完成国际化功能(包括中英文在内的34种语言)

This commit is contained in:
魏少阳 2024-08-29 18:13:00 +08:00
parent 0e99d60cb8
commit b241008de8
56 changed files with 36669 additions and 1210 deletions

BIN
.DS_Store vendored

Binary file not shown.

1085
lan/lan_ar.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_bg.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_bn.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_cs.json Normal file

File diff suppressed because one or more lines are too long

1085
lan/lan_da.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_de.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_el.json Normal file

File diff suppressed because it is too large Load Diff

63
lan/lan_en.json Executable file → Normal file
View File

@ -26,7 +26,6 @@
"星期五": "Friday", "星期五": "Friday",
"星期六": "Saturday", "星期六": "Saturday",
"星期日": "Sunday", "星期日": "Sunday",
"简写周一": "M", "简写周一": "M",
"简写周二": "T", "简写周二": "T",
"简写周三": "W", "简写周三": "W",
@ -34,7 +33,6 @@
"简写周五": "F", "简写周五": "F",
"简写周六": "S", "简写周六": "S",
"简写周日": "S", "简写周日": "S",
"周一": "Mon", "周一": "Mon",
"周二": "Tue", "周二": "Tue",
"周三": "Wed", "周三": "Wed",
@ -42,7 +40,6 @@
"周五": "Fri", "周五": "Fri",
"周六": "Sat", "周六": "Sat",
"周日": "Sun", "周日": "Sun",
"群发钥匙": "Send multiple ekeys", "群发钥匙": "Send multiple ekeys",
"锁": "Lock", "锁": "Lock",
"请添加": "Recipient", "请添加": "Recipient",
@ -80,6 +77,7 @@
"常开时间": "In this time period", "常开时间": "In this time period",
"常开日期": "On these Days", "常开日期": "On these Days",
"添加员工": "Add Staff", "添加员工": "Add Staff",
"编辑员工": "Edit Staff",
"节假日": "Holiday", "节假日": "Holiday",
"打卡方式": "Method", "打卡方式": "Method",
"员工是否有钥匙": "Already has ekey", "员工是否有钥匙": "Already has ekey",
@ -101,7 +99,6 @@
"月榜": "Monthly", "月榜": "Monthly",
"考勤记录": "Records", "考勤记录": "Records",
"假日信息": "Holiday Info", "假日信息": "Holiday Info",
"基本信息": "Basics", "基本信息": "Basics",
"无线键盘": "Wireless Keypad", "无线键盘": "Wireless Keypad",
"选择无线键盘": "Add Keypad", "选择无线键盘": "Add Keypad",
@ -120,7 +117,6 @@
"微信二维码": "Unlock QR Code", "微信二维码": "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", "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "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", "锁编号": "Lock Number",
"电量": "Battery", "电量": "Battery",
"锁分组": "Lock Group", "锁分组": "Lock Group",
"选择分组": "Select group", "选择分组": "Select group",
@ -134,7 +130,6 @@
"附近的设备": "Nearby Equipment", "附近的设备": "Nearby Equipment",
"暂无数据": "No Data", "暂无数据": "No Data",
"通过门磁可查询门的开、关状态。每把锁咳添加一个门磁": "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.", "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁": "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", "开始": "Start",
"全天": "All Hours", "全天": "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.", "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。": "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.",
@ -157,9 +152,8 @@
"升级": "Update", "升级": "Update",
"空闲": "Vacant", "空闲": "Vacant",
"已入住": "Occupied", "已入住": "Occupied",
"英文": "English", "英文": "English",
"中文": "中文", "简体中文": "Simplified Chinese",
"多语言": "Languages", "多语言": "Languages",
"添加锁": "Add Lock", "添加锁": "Add Lock",
"锁地址": "Lock Address", "锁地址": "Lock Address",
@ -170,7 +164,6 @@
"客服": "Customer Service", "客服": "Customer Service",
"设置": "Settings", "设置": "Settings",
"更多设置": "More Set", "更多设置": "More Set",
"消息推送": "Notification push", "消息推送": "Notification push",
"锁用户管理": "Lock Users", "锁用户管理": "Lock Users",
"拥有的钥匙": "eKeys associated with this User", "拥有的钥匙": "eKeys associated with this User",
@ -314,7 +307,6 @@
"请输入WiFi名字": "Please Enter Wifi Name", "请输入WiFi名字": "Please Enter Wifi Name",
"WiFi配网": "WiFi Distribution Network", "WiFi配网": "WiFi Distribution Network",
"胁迫卡": "Stress Card", "胁迫卡": "Stress Card",
"员工是否有密码": "Already has Passcode", "员工是否有密码": "Already has Passcode",
"员工是否有卡": "Already has Card", "员工是否有卡": "Already has Card",
"员工是否有指纹": "Already Set the Fingerprint", "员工是否有指纹": "Already Set the Fingerprint",
@ -352,7 +344,6 @@
"判断方法:": "判断方法:", "判断方法:": "判断方法:",
"判断方法内容": "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.", "判断方法内容": "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", "录像时段": "Video slot",
"密码": "Passcodes", "密码": "Passcodes",
"卡": "Cards", "卡": "Cards",
"指纹": "Fingerprint", "指纹": "Fingerprint",
@ -414,7 +405,6 @@
"工作日": "Workday", "工作日": "Workday",
"每日": "Daily", "每日": "Daily",
"周末": "Weekend", "周末": "Weekend",
"确定要删除吗?": "Delete?", "确定要删除吗?": "Delete?",
"该锁的密码都将被删除": "All Passcodes for this Lock will be DELETED", "该锁的密码都将被删除": "All Passcodes for this Lock will be DELETED",
"已过期": "Invalid", "已过期": "Invalid",
@ -746,7 +736,13 @@
"请选择有效日": "Please select the effective day", "请选择有效日": "Please select the effective day",
"公司名字长度不能小于 6 ": "The length of the company name cannot be less than 6", "公司名字长度不能小于 6 ": "The length of the company name cannot be less than 6",
"已是最新版本": "No updates", "已是最新版本": "No updates",
"一":"One",
"二":"Two",
"三":"Three",
"四":"Four",
"五":"Five",
"六":"Six",
"日":"Sun",
"新建短信模版":"Creat SMS template", "新建短信模版":"Creat SMS template",
"新建邮件模版":"Creat email template", "新建邮件模版":"Creat email template",
"自定义短信模版":"SMS template", "自定义短信模版":"SMS template",
@ -759,7 +755,6 @@
"国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "The choice of country/region will affect data security.You have currently selected Albania,please confirm before proceeding.", "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "The choice of country/region will affect data security.You have currently selected Albania,please confirm before proceeding.",
"确认国家或地区": "Confirm country/region", "确认国家或地区": "Confirm country/region",
"我知道了": "Got it", "我知道了": "Got it",
"为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "To receive important updates, please click 'OK' and enable notifications in the settings.", "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "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", "开启后可通过长按锁上的设置键重新上电用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",
"已有": "Current", "已有": "Current",
@ -770,13 +765,11 @@
"加载数据失败": "Failed to load data", "加载数据失败": "Failed to load data",
"重试": "Try Again", "重试": "Try Again",
"升级中,是否退出": "During the upgrade, whether to exit", "升级中,是否退出": "During the upgrade, whether to exit",
"下一步": "Next", "下一步": "Next",
"公寓": "Apartment", "公寓": "Apartment",
"个人用户": "Personal", "个人用户": "Personal",
"星寓": "Star apartment", "星寓": "Star apartment",
"账号": "Account", "账号": "Account",
"请输入手机号或email": "Phone Number or Email", "请输入手机号或email": "Phone Number or Email",
"请输入星寓管理员的账号": "Please enter the account of the star apartment administrator", "请输入星寓管理员的账号": "Please enter the account of the star apartment administrator",
"选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "All data of the selected lock(s) will be permanently transferred to the recipient.", "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "All data of the selected lock(s) will be permanently transferred to the recipient.",
@ -816,7 +809,6 @@
"感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。": "The sensing distance has been turned off, you need to manually touch any key on the keyboard to perform face recognition unlocking.", "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。": "The sensing distance has been turned off, you need to manually touch any key on the keyboard to perform face recognition unlocking.",
"防误开已打开,开锁后": "The anti-mistake opening has been turned on, and after unlocking", "防误开已打开,开锁后": "The anti-mistake opening has been turned on, and after unlocking",
"秒内不可使用面容开锁": "Face unlocking cannot be used within seconds", "秒内不可使用面容开锁": "Face unlocking cannot be used within seconds",
"掌静脉": "Palm vein", "掌静脉": "Palm vein",
"添加掌静脉": "Add palm vein", "添加掌静脉": "Add palm vein",
"胁迫掌静脉": "Forced palm vein", "胁迫掌静脉": "Forced palm vein",
@ -826,7 +818,6 @@
"掌静脉号": "Palm vein number", "掌静脉号": "Palm vein number",
"蓝牙未打开,请到设置里面打开蓝牙": "Bluetooth is not turned on, please turn on Bluetooth in the settings", "蓝牙未打开,请到设置里面打开蓝牙": "Bluetooth is not turned on, please turn on Bluetooth in the settings",
"删除用户时,会将用户拥有的钥匙一起删除。": "If a User is DELETED any ekeys associated with the User will also be DELETED.", "删除用户时,会将用户拥有的钥匙一起删除。": "If a User is DELETED any ekeys associated with the User will also be DELETED.",
"配置网络": "Configure network", "配置网络": "Configure network",
"你好": "Hello", "你好": "Hello",
"成功": "successful", "成功": "successful",
@ -1056,5 +1047,39 @@
"热门城市": "Hot cities", "热门城市": "Hot cities",
"导出锁数据": "Export lock data", "导出锁数据": "Export lock data",
"一键开锁": "One-click unlock", "一键开锁": "One-click unlock",
"已开通": "Opened" "已开通": "Opened",
"繁体中文": "Traditional Chinese",
"法语": "French",
"俄语": "Russian",
"德语": "German",
"日语": "Japanese",
"韩语": "Korean",
"意大利语": "Italian",
"乌克兰语": "Ukrainian",
"葡萄牙语": "Portuguese",
"西班牙语": "Spanish",
"阿拉伯语": "Arabic",
"越南语": "Vietnamese",
"马莱语": "Malay",
"荷兰语": "Dutch",
"罗马尼亚语": "Romanian",
"立陶宛语": "Lithuanian",
"瑞典语": "Swedish",
"爱沙尼亚语": "Estonian",
"波兰语": "Polish",
"斯洛伐克语": "Slovak",
"捷克语": "Czech",
"希腊语": "Greek",
"希伯来语": "Hebrew",
"塞尔维亚语": "Serbian",
"土耳其语": "Turkish",
"匈牙利语": "Hungarian",
"保加利亚语": "Bulgarian",
"哈萨克斯坦语": "Kazakh",
"孟加拉语": "Bengali",
"克罗地亚语": "Croatian",
"泰语": "Thai",
"印度尼西亚语": "Indonesian",
"芬兰语": "Finnish",
"丹麦语": "Danish"
} }

1085
lan/lan_es.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_et.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_fi.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_fr.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_he.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_hr.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_hu.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_id.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_it.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_ja.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,6 @@
"星期五": "星期五", "星期五": "星期五",
"星期六": "星期六", "星期六": "星期六",
"星期日": "星期日", "星期日": "星期日",
"简写周一": "简写周一", "简写周一": "简写周一",
"简写周二": "简写周二", "简写周二": "简写周二",
"简写周三": "简写周三", "简写周三": "简写周三",
@ -34,7 +33,6 @@
"简写周五": "简写周五", "简写周五": "简写周五",
"简写周六": "简写周六", "简写周六": "简写周六",
"简写周日": "简写周日", "简写周日": "简写周日",
"周一": "周一", "周一": "周一",
"周二": "周二", "周二": "周二",
"周三": "周三", "周三": "周三",
@ -42,7 +40,6 @@
"周五": "周五", "周五": "周五",
"周六": "周六", "周六": "周六",
"周日": "周日", "周日": "周日",
"群发钥匙":"群发钥匙", "群发钥匙":"群发钥匙",
"锁": "锁", "锁": "锁",
"请添加":"请添加", "请添加":"请添加",
@ -102,7 +99,6 @@
"月榜":"月榜", "月榜":"月榜",
"考勤记录":"考勤记录", "考勤记录":"考勤记录",
"假日信息":"假日信息", "假日信息":"假日信息",
"基本信息":"基本信息", "基本信息":"基本信息",
"无线键盘":"无线键盘", "无线键盘":"无线键盘",
"选择无线键盘": "选择无线键盘", "选择无线键盘": "选择无线键盘",
@ -121,7 +117,6 @@
"微信二维码":"微信二维码", "微信二维码":"微信二维码",
"拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边", "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边",
"锁编号":"锁编号", "锁编号":"锁编号",
"电量":"电量", "电量":"电量",
"锁分组":"锁分组", "锁分组":"锁分组",
"选择分组":"选择分组", "选择分组":"选择分组",
@ -135,9 +130,6 @@
"附近的设备":"附近的设备", "附近的设备":"附近的设备",
"暂无数据":"暂无数据", "暂无数据":"暂无数据",
"通过门磁可查询门的开、关状态。每把锁咳添加一个门磁":"通过门磁可查询门的开、关状态。每把锁咳添加一个门磁", "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁":"通过门磁可查询门的开、关状态。每把锁咳添加一个门磁",
"delayTime":"delayTime",
"automaticBlockingTip":"automaticBlockingTip",
"开始":"开始", "开始":"开始",
"全天":"全天", "全天":"全天",
"你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。":"你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。", "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。":"你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。",
@ -160,9 +152,8 @@
"升级":"升级", "升级":"升级",
"空闲":"空闲", "空闲":"空闲",
"已入住":"已入住", "已入住":"已入住",
"英文":"英文", "英文":"英文",
"中文":"中文", "简体中文":"简体中文",
"多语言":"多语言", "多语言":"多语言",
"添加锁":"添加锁", "添加锁":"添加锁",
"锁地址":"锁地址", "锁地址":"锁地址",
@ -173,7 +164,6 @@
"客服":"客服", "客服":"客服",
"设置":"设置", "设置":"设置",
"更多设置":"更多设置", "更多设置":"更多设置",
"消息推送":"消息推送", "消息推送":"消息推送",
"锁用户管理":"锁用户管理", "锁用户管理":"锁用户管理",
"拥有的钥匙":"拥有的钥匙", "拥有的钥匙":"拥有的钥匙",
@ -219,7 +209,6 @@
"即将到期":"即将到期", "即将到期":"即将到期",
"去授权":"去授权", "去授权":"去授权",
"修改名称":"修改名称", "修改名称":"修改名称",
"状态": "状态", "状态": "状态",
"WiFi名称": "WiFi名称", "WiFi名称": "WiFi名称",
"网络MAC": "网络MAC", "网络MAC": "网络MAC",
@ -245,6 +234,7 @@
"备选DNS": "备选DNS", "备选DNS": "备选DNS",
"不使用静态IP": "不使用静态IP", "不使用静态IP": "不使用静态IP",
"使用静态IP": "使用静态IP", "使用静态IP": "使用静态IP",
"请输入IP地址": "请输入IP地址",
"请输入子网掩码": "请输入子网掩码", "请输入子网掩码": "请输入子网掩码",
"请输入默认网关": "请输入默认网关", "请输入默认网关": "请输入默认网关",
"所有锁":"所有锁", "所有锁":"所有锁",
@ -259,7 +249,6 @@
"附近的锁":"附近的锁", "附近的锁":"附近的锁",
"如需修改名字请重新命名,点击确定添加锁":"如需修改名字请重新命名,点击确定添加锁", "如需修改名字请重新命名,点击确定添加锁":"如需修改名字请重新命名,点击确定添加锁",
"添加锁时,手机必须在锁旁边":"添加锁时,手机必须在锁旁边", "添加锁时,手机必须在锁旁边":"添加锁时,手机必须在锁旁边",
"登录":"登录", "登录":"登录",
"注册":"注册", "注册":"注册",
"我已阅读并同意":"我已阅读并同意", "我已阅读并同意":"我已阅读并同意",
@ -272,15 +261,12 @@
"你所在的国家/地区": "你所在的国家/地区", "你所在的国家/地区": "你所在的国家/地区",
"选择国家/地区": "你所在的国家/地区", "选择国家/地区": "你所在的国家/地区",
"获取验证码":"获取验证码", "获取验证码":"获取验证码",
"商务合作":"商务合作", "商务合作":"商务合作",
"电脑网页版":"电脑网页版", "电脑网页版":"电脑网页版",
"酒店系统":"酒店系统", "酒店系统":"酒店系统",
"说明书网页版":"说明书网页版", "说明书网页版":"说明书网页版",
"高级功能":"高级功能", "高级功能":"高级功能",
"记录保存":"记录保存", "记录保存":"记录保存",
"您可通过短信将密码、电子钥匙信息发给接收人。":"您可通过短信将密码、电子钥匙信息发给接收人。", "您可通过短信将密码、电子钥匙信息发给接收人。":"您可通过短信将密码、电子钥匙信息发给接收人。",
"您可通过邮件将密码、电子钥匙信息发给接收人。":"您可通过邮件将密码、电子钥匙信息发给接收人。", "您可通过邮件将密码、电子钥匙信息发给接收人。":"您可通过邮件将密码、电子钥匙信息发给接收人。",
"购买实名认证提示":"购买实名认证提示", "购买实名认证提示":"购买实名认证提示",
@ -299,7 +285,6 @@
"购买高级功能提示":"购买高级功能提示", "购买高级功能提示":"购买高级功能提示",
"免费体验":"免费体验", "免费体验":"免费体验",
"立即开通":"立即开通", "立即开通":"立即开通",
"购买短信":"购买短信", "购买短信":"购买短信",
"购买邮件":"购买邮件", "购买邮件":"购买邮件",
"购买实名认证次数":"购买实名认证次数", "购买实名认证次数":"购买实名认证次数",
@ -308,7 +293,6 @@
"支付方式":"支付方式", "支付方式":"支付方式",
"支付宝":"支付宝", "支付宝":"支付宝",
"去支付":"去支付", "去支付":"去支付",
"你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人":"你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人", "你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人":"你可以自己定义模版的内容,用于发送密码或电子钥匙信息给他人",
"高级功能仅能用于你自己的锁":"高级功能仅能用于你自己的锁", "高级功能仅能用于你自己的锁":"高级功能仅能用于你自己的锁",
"新建模板":"新建模板", "新建模板":"新建模板",
@ -317,15 +301,12 @@
"预览":"预览", "预览":"预览",
"房间名":"房间名", "房间名":"房间名",
"预计产生短信条数":"预计产生短信条数", "预计产生短信条数":"预计产生短信条数",
"功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。":"功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。", "功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。":"功能开启后,已失效较长时间的密码、电子钥匙、卡、指纹等开锁权限将被隐藏,不在列表里显示。",
"对于选中的这些锁当用户用APP开锁时他的手机需要是连网的否则无法开锁":"对于选中的这些锁当用户用APP开锁时他的手机需要是连网的否则无法开锁", "对于选中的这些锁当用户用APP开锁时他的手机需要是连网的否则无法开锁":"对于选中的这些锁当用户用APP开锁时他的手机需要是连网的否则无法开锁",
"配置WiFi":"配置WiFi", "配置WiFi":"配置WiFi",
"请输入WiFi名字":"请输入WiFi名字", "请输入WiFi名字":"请输入WiFi名字",
"WiFi配网":"WiFi配网", "WiFi配网":"WiFi配网",
"胁迫卡":"胁迫卡", "胁迫卡":"胁迫卡",
"员工是否有密码":"员工是否有密码", "员工是否有密码":"员工是否有密码",
"员工是否有卡":"员工是否有卡", "员工是否有卡":"员工是否有卡",
"员工是否有指纹":"员工是否有指纹", "员工是否有指纹":"员工是否有指纹",
@ -334,43 +315,35 @@
"获取指纹":"获取指纹", "获取指纹":"获取指纹",
"安全验证":"安全验证", "安全验证":"安全验证",
"删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?":"删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?", "删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?":"删除账号后,你的所有信息及相关记录都会从平台彻底删除,且不可恢复,是否删除?",
"监控":"监控", "监控":"监控",
"视频日志":"视频日志", "视频日志":"视频日志",
"网关设备":"网关设备", "网关设备":"网关设备",
"开门器":"开门器", "开门器":"开门器",
"面容开锁":"面容开锁", "面容开锁":"面容开锁",
"开门方向设置":"开门方向设置", "开门方向设置":"开门方向设置",
"电机功率设置":"电机功率设置", "电机功率设置":"电机功率设置",
"开锁时是否需联网":"开锁时是否需联网", "开锁时是否需联网":"开锁时是否需联网",
"选择要加入分组的锁":"选择要加入分组的锁", "选择要加入分组的锁":"选择要加入分组的锁",
"锁数量":"锁数量", "锁数量":"锁数量",
"小米IOT平台":"小米IOT平台", "小米IOT平台":"小米IOT平台",
"面容开锁设置": "面容开锁设置", "面容开锁设置": "面容开锁设置",
"感应距离": "感应距离", "感应距离": "感应距离",
"防误开": "防误开", "防误开": "防误开",
"防误开已关闭,关门后仍可使用面容开锁": "防误开已关闭,关门后仍可使用面容开锁", "防误开已关闭,关门后仍可使用面容开锁": "防误开已关闭,关门后仍可使用面容开锁",
"添加和使用面容开锁时": "添加和使用面容开锁时", "添加和使用面容开锁时": "添加和使用面容开锁时",
"添加和使用面容开锁时提示":"添加和使用面容开锁时提示", "添加和使用面容开锁时提示":"添加和使用面容开锁时提示",
"秒": "秒", "秒": "秒",
"请根据门锁实际情况,请谨慎选择电机功率:": "请根据门锁实际情况,请谨慎选择电机功率:", "请根据门锁实际情况,请谨慎选择电机功率:": "请根据门锁实际情况,请谨慎选择电机功率:",
"小功率:": "小功率:", "小功率:": "小功率:",
"耗电少": "耗电少", "耗电少": "耗电少",
"大功率": "大功率", "大功率": "大功率",
"大功率提示": "大功率提示", "大功率提示": "大功率提示",
"开门方向设置提示": "开门方向设置提示", "开门方向设置提示": "开门方向设置提示",
"左开": "左开", "左开": "左开",
"右开": "右开", "右开": "右开",
"判断方法:": "判断方法:", "判断方法:": "判断方法:",
"判断方法内容": "判断方法内容", "判断方法内容": "判断方法内容",
"录像时段": "录像时段", "录像时段": "录像时段",
"密码":"密码", "密码":"密码",
"卡":"卡", "卡":"卡",
"指纹":"指纹", "指纹":"指纹",
@ -594,7 +567,6 @@
"密码生成后请在当日2359前使用否则过0点后失效。": "密码生成后请在当日2359前使用否则过0点后失效。", "密码生成后请在当日2359前使用否则过0点后失效。": "密码生成后请在当日2359前使用否则过0点后失效。",
"清空密码底部提示": "清空密码底部提示", "清空密码底部提示": "清空密码底部提示",
"密码不一致哦":"密码不一致哦", "密码不一致哦":"密码不一致哦",
"相机": "相机", "相机": "相机",
"相册": "相册", "相册": "相册",
"读写": "读写", "读写": "读写",
@ -611,10 +583,8 @@
"请手动在系统设置中开启": "请手动在系统设置中开启", "请手动在系统设置中开启": "请手动在系统设置中开启",
"权限以继续使用应用": "权限以继续使用应用。", "权限以继续使用应用": "权限以继续使用应用。",
"去设置": "去设置", "去设置": "去设置",
"虹膜":"虹膜", "虹膜":"虹膜",
"手掌":"手掌", "手掌":"手掌",
"商城":"mall", "商城":"mall",
"我的":"my", "我的":"my",
"微信公众号推送":"微信公众号推送", "微信公众号推送":"微信公众号推送",
@ -707,7 +677,6 @@
"当前剩余数量":"当前剩余数量", "当前剩余数量":"当前剩余数量",
"购买":"购买", "购买":"购买",
"实名认证为付费功能,请购买后再使用":"实名认证为付费功能,请购买后再使用", "实名认证为付费功能,请购买后再使用":"实名认证为付费功能,请购买后再使用",
"退出添加":"退出添加", "退出添加":"退出添加",
"管理员已满":"管理员已满", "管理员已满":"管理员已满",
"用户已满": "用户已满", "用户已满": "用户已满",
@ -721,13 +690,11 @@
"密码已存在": "密码已存在", "密码已存在": "密码已存在",
"请输入密码": "请输入密码", "请输入密码": "请输入密码",
"暂无密码,无需重置": "暂无密码,无需重置", "暂无密码,无需重置": "暂无密码,无需重置",
"真实姓名":"真实姓名", "真实姓名":"真实姓名",
"身份证号":"身份证号", "身份证号":"身份证号",
"请输入真实姓名":"请输入真实姓名", "请输入真实姓名":"请输入真实姓名",
"请输入身份证号":"请输入身份证号", "请输入身份证号":"请输入身份证号",
"请输入身份证号和真实姓名":"请输入身份证号和真实姓名", "请输入身份证号和真实姓名":"请输入身份证号和真实姓名",
"点击返回设备配对":"点击返回设备配对", "点击返回设备配对":"点击返回设备配对",
"无法连接?尝试升级":"无法连接?尝试升级", "无法连接?尝试升级":"无法连接?尝试升级",
"固件升级提示":"固件升级提示", "固件升级提示":"固件升级提示",
@ -782,14 +749,12 @@
"自定义邮件模版":"自定义邮件模版", "自定义邮件模版":"自定义邮件模版",
"名称":"名称", "名称":"名称",
"星星锁": "星星锁", "星星锁": "星星锁",
"无考勤记录": "无考勤记录", "无考勤记录": "无考勤记录",
"大家干劲十足": "大家干劲十足", "大家干劲十足": "大家干劲十足",
"工作时长未出炉": "工作时长未出炉", "工作时长未出炉": "工作时长未出炉",
"国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续", "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续",
"确认国家或地区": "确认国家或地区", "确认国家或地区": "确认国家或地区",
"我知道了": "我知道了", "我知道了": "我知道了",
"为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。", "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。",
"开启后可通过长按锁上的设置键重新上电用APP重新添加":"开启后可通过长按锁上的设置键重新上电用APP重新添加", "开启后可通过长按锁上的设置键重新上电用APP重新添加":"开启后可通过长按锁上的设置键重新上电用APP重新添加",
"已有": "已有", "已有": "已有",
@ -800,13 +765,11 @@
"加载数据失败": "加载数据失败", "加载数据失败": "加载数据失败",
"重试": "重试", "重试": "重试",
"升级中,是否退出": "升级中,是否退出", "升级中,是否退出": "升级中,是否退出",
"下一步": "下一步", "下一步": "下一步",
"公寓": "公寓", "公寓": "公寓",
"个人用户": "个人用户", "个人用户": "个人用户",
"星寓": "星寓", "星寓": "星寓",
"账号": "账号", "账号": "账号",
"请输入手机号或email": "请输入手机号或email", "请输入手机号或email": "请输入手机号或email",
"请输入星寓管理员的账号": "请输入星寓管理员的账号", "请输入星寓管理员的账号": "请输入星寓管理员的账号",
"选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权", "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权",
@ -840,14 +803,12 @@
"进度": "进度", "进度": "进度",
"失败": "失败", "失败": "失败",
"人脸详情": "人脸详情", "人脸详情": "人脸详情",
"感应到门前约1.5米有人时,将自动启动面部识别开锁。": "感应到门前约1.5米有人时,将自动启动面部识别开锁。", "感应到门前约1.5米有人时,将自动启动面部识别开锁。": "感应到门前约1.5米有人时,将自动启动面部识别开锁。",
"感应到门前约0.8米有人时,将自动启动面部识别开锁。": "感应到门前约0.8米有人时,将自动启动面部识别开锁。", "感应到门前约0.8米有人时,将自动启动面部识别开锁。": "感应到门前约0.8米有人时,将自动启动面部识别开锁。",
"感应到门前约0.5米有人时,将自动启动面部识别开锁。": "感应到门前约0.5米有人时,将自动启动面部识别开锁。", "感应到门前约0.5米有人时,将自动启动面部识别开锁。": "感应到门前约0.5米有人时,将自动启动面部识别开锁。",
"感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。": "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。", "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。": "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。",
"防误开已打开,开锁后": "防误开已打开,开锁后", "防误开已打开,开锁后": "防误开已打开,开锁后",
"秒内不可使用面容开锁": "秒内不可使用面容开锁", "秒内不可使用面容开锁": "秒内不可使用面容开锁",
"掌静脉": "掌静脉", "掌静脉": "掌静脉",
"添加掌静脉": "添加掌静脉", "添加掌静脉": "添加掌静脉",
"胁迫掌静脉": "胁迫掌静脉", "胁迫掌静脉": "胁迫掌静脉",
@ -857,7 +818,6 @@
"掌静脉号": "掌静脉号", "掌静脉号": "掌静脉号",
"蓝牙未打开,请到设置里面打开蓝牙": "蓝牙未打开,请到设置里面打开蓝牙", "蓝牙未打开,请到设置里面打开蓝牙": "蓝牙未打开,请到设置里面打开蓝牙",
"删除用户时,会将用户拥有的钥匙一起删除。": "删除用户时,会将用户拥有的钥匙一起删除。", "删除用户时,会将用户拥有的钥匙一起删除。": "删除用户时,会将用户拥有的钥匙一起删除。",
"配置网络": "配置网络", "配置网络": "配置网络",
"你好": "你好", "你好": "你好",
"成功": "成功", "成功": "成功",
@ -1087,5 +1047,39 @@
"热门城市": "热门城市", "热门城市": "热门城市",
"导出锁数据": "导出锁数据", "导出锁数据": "导出锁数据",
"一键开锁": "一键开锁", "一键开锁": "一键开锁",
"已开通": "已开通" "已开通": "已开通",
"繁体中文": "繁体中文",
"法语": "法语",
"俄语": "俄语",
"德语": "德语",
"日语": "日语",
"韩语": "韩语",
"意大利语": "意大利语",
"乌克兰语": "乌克兰语",
"葡萄牙语": "葡萄牙语",
"西班牙语": "西班牙语",
"阿拉伯语": "阿拉伯语",
"越南语": "越南语",
"马莱语": "马莱语",
"荷兰语": "荷兰语",
"罗马尼亚语": "罗马尼亚语",
"立陶宛语": "立陶宛语",
"瑞典语": "瑞典语",
"爱沙尼亚语": "爱沙尼亚语",
"波兰语": "波兰语",
"斯洛伐克语": "斯洛伐克语",
"捷克语": "捷克语",
"希腊语": "希腊语",
"希伯来语": "希伯来语",
"塞尔维亚语": "塞尔维亚语",
"土耳其语": "土耳其语",
"匈牙利语": "匈牙利语",
"保加利亚语": "保加利亚语",
"哈萨克斯坦语": "哈萨克斯坦语",
"孟加拉语": "孟加拉语",
"克罗地亚语": "克罗地亚语",
"泰语": "泰语",
"印度尼西亚语": "印度尼西亚语",
"芬兰语": "芬兰语",
"丹麦语": "丹麦语"
} }

1085
lan/lan_kk.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_ko.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_lt.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_ms.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_nl.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_pl.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_pt.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_ro.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_ru.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_sk.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_sv.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_th.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_tr.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_tw.json Normal file

File diff suppressed because it is too large Load Diff

1085
lan/lan_vi.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -26,7 +26,6 @@
"星期五": "星期五", "星期五": "星期五",
"星期六": "星期六", "星期六": "星期六",
"星期日": "星期日", "星期日": "星期日",
"简写周一": "一", "简写周一": "一",
"简写周二": "二", "简写周二": "二",
"简写周三": "三", "简写周三": "三",
@ -34,7 +33,6 @@
"简写周五": "五", "简写周五": "五",
"简写周六": "六", "简写周六": "六",
"简写周日": "日", "简写周日": "日",
"周一": "周一", "周一": "周一",
"周二": "周二", "周二": "周二",
"周三": "周三", "周三": "周三",
@ -42,7 +40,6 @@
"周五": "周五", "周五": "周五",
"周六": "周六", "周六": "周六",
"周日": "周日", "周日": "周日",
"群发钥匙": "群发钥匙", "群发钥匙": "群发钥匙",
"锁": "锁", "锁": "锁",
"请添加": "请添加", "请添加": "请添加",
@ -103,7 +100,6 @@
"考勤记录": "考勤记录", "考勤记录": "考勤记录",
"未打卡": "未打卡", "未打卡": "未打卡",
"假日信息": "假日信息", "假日信息": "假日信息",
"基本信息": "基本信息", "基本信息": "基本信息",
"无线键盘": "无线键盘", "无线键盘": "无线键盘",
"选择无线键盘": "选择无线键盘", "选择无线键盘": "选择无线键盘",
@ -122,7 +118,6 @@
"微信二维码": "微信二维码", "微信二维码": "微信二维码",
"拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边", "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边": "拥有电子钥匙的人,通过微信扫一扫这个二维码,即可开门。每把锁的二维码都不相同,你可以将其打印出来贴在对应的锁旁边",
"锁编号": "锁编号", "锁编号": "锁编号",
"电量": "电量", "电量": "电量",
"锁分组": "锁分组", "锁分组": "锁分组",
"选择分组": "选择分组", "选择分组": "选择分组",
@ -136,7 +131,6 @@
"附近的设备": "附近的设备", "附近的设备": "附近的设备",
"暂无数据": "暂无数据", "暂无数据": "暂无数据",
"通过门磁可查询门的开、关状态。每把锁咳添加一个门磁": "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁", "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁": "通过门磁可查询门的开、关状态。每把锁咳添加一个门磁",
"开始": "开始", "开始": "开始",
"全天": "全天", "全天": "全天",
"你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。": "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。", "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。": "你可以设置多个常开时间段,在设置的时间段内,锁被打开后一直处于打开的状态。",
@ -159,9 +153,8 @@
"升级": "升级", "升级": "升级",
"空闲": "空闲", "空闲": "空闲",
"已入住": "已入住", "已入住": "已入住",
"英文": "英文", "英文": "英文",
"中文": "中文", "简体中文": "简体中文",
"多语言": "多语言", "多语言": "多语言",
"添加锁": "添加锁", "添加锁": "添加锁",
"锁地址": "锁地址", "锁地址": "锁地址",
@ -172,7 +165,6 @@
"客服": "客服", "客服": "客服",
"设置": "设置", "设置": "设置",
"更多设置": "更多设置", "更多设置": "更多设置",
"消息推送": "消息推送", "消息推送": "消息推送",
"锁用户管理": "锁用户管理", "锁用户管理": "锁用户管理",
"拥有的钥匙": "拥有的钥匙", "拥有的钥匙": "拥有的钥匙",
@ -201,7 +193,6 @@
"请输入昵称": "请输入昵称", "请输入昵称": "请输入昵称",
"修改昵称": "修改昵称", "修改昵称": "修改昵称",
"修改账号": "修改账号", "修改账号": "修改账号",
"重置密码": "重置密码", "重置密码": "重置密码",
"安全问题": "安全问题", "安全问题": "安全问题",
"为了你的账号安全,修改账号前请先使用验证码验证": "为了你的账号安全,修改账号前请先使用验证码验证", "为了你的账号安全,修改账号前请先使用验证码验证": "为了你的账号安全,修改账号前请先使用验证码验证",
@ -354,7 +345,6 @@
"判断方法:": "判断方法:", "判断方法:": "判断方法:",
"判断方法内容": "人站在屋外,面向入户门。\n如果门的合页或门轴在左边则门是左开\n如果门的合页或门轴在右边则门是右开。\n如果设置错误将无法正常开关门。\n建议由安装或维修人员操作。", "判断方法内容": "人站在屋外,面向入户门。\n如果门的合页或门轴在左边则门是左开\n如果门的合页或门轴在右边则门是右开。\n如果设置错误将无法正常开关门。\n建议由安装或维修人员操作。",
"录像时段": "录像时段", "录像时段": "录像时段",
"密码": "密码", "密码": "密码",
"卡": "卡", "卡": "卡",
"指纹": "指纹", "指纹": "指纹",
@ -746,19 +736,25 @@
"请选择有效日": "请选择有效日", "请选择有效日": "请选择有效日",
"公司名字长度不能小于 6 ": "公司名字长度不能小于 6 ", "公司名字长度不能小于 6 ": "公司名字长度不能小于 6 ",
"已是最新版本": "已是最新版本", "已是最新版本": "已是最新版本",
"一":"一",
"无考勤记录": "无考勤记录", "二":"二",
"大家干劲十足": "大家干劲十足", "三":"三",
"工作时长未出炉": "工作时长未出炉", "四":"四",
"国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续", "五":"五",
"确认国家或地区": "确认国家或地区", "六":"六",
"我知道了": "我知道了", "日":"日",
"新建短信模版": "新建短信模版", "新建短信模版": "新建短信模版",
"新建邮件模版": "新建邮件模版", "新建邮件模版": "新建邮件模版",
"自定义短信模版": "自定义短信模版", "自定义短信模版": "自定义短信模版",
"自定义邮件模版": "自定义邮件模版", "自定义邮件模版": "自定义邮件模版",
"名称": "名称", "名称": "名称",
"星星锁": "星星锁", "星星锁": "星星锁",
"无考勤记录": "无考勤记录",
"大家干劲十足": "大家干劲十足",
"工作时长未出炉": "工作时长未出炉",
"国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续": "国家地区的选择将影响数据安全,你当前选择的是阿尔巴尼亚,请确认后再继续",
"确认国家或地区": "确认国家或地区",
"我知道了": "我知道了",
"为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。", "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。": "为了让您及时收到重要通知和更新,我们需要获取通知权限。请点击“确定”按钮,然后在设置页面中启用通知权限。",
"开启后可通过长按锁上的设置键重新上电用APP重新添加": "开启后可通过长按锁上的设置键重新上电用APP重新添加", "开启后可通过长按锁上的设置键重新上电用APP重新添加": "开启后可通过长按锁上的设置键重新上电用APP重新添加",
"已有": "已有", "已有": "已有",
@ -774,7 +770,6 @@
"个人用户": "个人用户", "个人用户": "个人用户",
"星寓": "星寓", "星寓": "星寓",
"账号": "账号", "账号": "账号",
"请输入手机号或email": "请输入手机号或email", "请输入手机号或email": "请输入手机号或email",
"请输入星寓管理员的账号": "请输入星寓管理员的账号", "请输入星寓管理员的账号": "请输入星寓管理员的账号",
"选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权", "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权": "选中的智能锁将会转移到您输入的账号中,您将失去锁的管理权",
@ -808,14 +803,12 @@
"进度": "进度", "进度": "进度",
"失败": "失败", "失败": "失败",
"人脸详情": "人脸详情", "人脸详情": "人脸详情",
"感应到门前约1.5米有人时,将自动启动面部识别开锁。": "感应到门前约1.5米有人时,将自动启动面部识别开锁。", "感应到门前约1.5米有人时,将自动启动面部识别开锁。": "感应到门前约1.5米有人时,将自动启动面部识别开锁。",
"感应到门前约0.8米有人时,将自动启动面部识别开锁。": "感应到门前约0.8米有人时,将自动启动面部识别开锁。", "感应到门前约0.8米有人时,将自动启动面部识别开锁。": "感应到门前约0.8米有人时,将自动启动面部识别开锁。",
"感应到门前约0.5米有人时,将自动启动面部识别开锁。": "感应到门前约0.5米有人时,将自动启动面部识别开锁。", "感应到门前约0.5米有人时,将自动启动面部识别开锁。": "感应到门前约0.5米有人时,将自动启动面部识别开锁。",
"感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。": "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。", "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。": "感应距离已关闭,需手动触摸键盘任意键,进行面部识别开锁。",
"防误开已打开,开锁后": "防误开已打开,开锁后", "防误开已打开,开锁后": "防误开已打开,开锁后",
"秒内不可使用面容开锁": "秒内不可使用面容开锁", "秒内不可使用面容开锁": "秒内不可使用面容开锁",
"掌静脉": "掌静脉", "掌静脉": "掌静脉",
"添加掌静脉": "添加掌静脉", "添加掌静脉": "添加掌静脉",
"胁迫掌静脉": "胁迫掌静脉", "胁迫掌静脉": "胁迫掌静脉",
@ -825,7 +818,6 @@
"掌静脉号": "掌静脉号", "掌静脉号": "掌静脉号",
"蓝牙未打开,请到设置里面打开蓝牙": "蓝牙未打开,请到设置里面打开蓝牙", "蓝牙未打开,请到设置里面打开蓝牙": "蓝牙未打开,请到设置里面打开蓝牙",
"删除用户时,会将用户拥有的钥匙一起删除。": "删除用户时,会将用户拥有的钥匙一起删除。", "删除用户时,会将用户拥有的钥匙一起删除。": "删除用户时,会将用户拥有的钥匙一起删除。",
"配置网络": "配置网络", "配置网络": "配置网络",
"你好": "你好", "你好": "你好",
"成功": "成功", "成功": "成功",
@ -1055,6 +1047,39 @@
"热门城市": "热门城市", "热门城市": "热门城市",
"导出锁数据": "导出锁数据", "导出锁数据": "导出锁数据",
"一键开锁": "一键开锁", "一键开锁": "一键开锁",
"已开通": "已开通" "已开通": "已开通",
"繁体中文": "繁体中文",
"法语": "法语",
"俄语": "俄语",
"德语": "德语",
"日语": "日语",
"韩语": "韩语",
"意大利语": "意大利语",
"乌克兰语": "乌克兰语",
"葡萄牙语": "葡萄牙语",
"西班牙语": "西班牙语",
"阿拉伯语": "阿拉伯语",
"越南语": "越南语",
"马莱语": "马莱语",
"荷兰语": "荷兰语",
"罗马尼亚语": "罗马尼亚语",
"立陶宛语": "立陶宛语",
"瑞典语": "瑞典语",
"爱沙尼亚语": "爱沙尼亚语",
"波兰语": "波兰语",
"斯洛伐克语": "斯洛伐克语",
"捷克语": "捷克语",
"希腊语": "希腊语",
"希伯来语": "希伯来语",
"塞尔维亚语": "塞尔维亚语",
"土耳其语": "土耳其语",
"匈牙利语": "匈牙利语",
"保加利亚语": "保加利亚语",
"哈萨克斯坦语": "哈萨克斯坦语",
"孟加拉语": "孟加拉语",
"克罗地亚语": "克罗地亚语",
"泰语": "泰语",
"印度尼西亚语": "印度尼西亚语",
"芬兰语": "芬兰语",
"丹麦语": "丹麦语"
} }

View File

@ -71,7 +71,7 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
if (idx != -1) { if (idx != -1) {
locale = appSupportedLocales[idx]; locale = appSupportedLocales[idx];
} else { } else {
locale = const Locale('zh', 'CN'); locale = Get.locale;
} }
} }
AppManager().setLanCode( AppManager().setLanCode(
@ -86,7 +86,7 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver, BaseWidget {
.first .first
: Get.deviceLocale, : Get.deviceLocale,
// locale: Get.deviceLocale, // locale: Get.deviceLocale,
fallbackLocale: const Locale('zh', 'CN'), fallbackLocale: Get.locale,
theme: ThemeData( theme: ThemeData(
scaffoldBackgroundColor: const Color(0xFFF6F6F6), scaffoldBackgroundColor: const Color(0xFFF6F6F6),
backgroundColor: const Color(0xFFF6F6F6), backgroundColor: const Color(0xFFF6F6F6),

View File

@ -65,11 +65,7 @@ FutureOr<void> main() async {
} }
// //
Future<void> _initTranslation() async => TranslationLoader.loadTranslation( Future<void> _initTranslation() async => TranslationLoader.loadTranslation();
zhSource: 'lan/lan_zh.json',
enSource: 'lan/lan_en.json',
keySource: 'lan/lan_keys.json',
);
// //
Future<void> _setCommonServices() async { Future<void> _setCommonServices() async {

View File

@ -90,10 +90,12 @@ class LockDetailLogic extends BaseGetXController {
// //
lockReportLockSuccessfullyUploadData(); lockReportLockSuccessfullyUploadData();
//
// getLockRecordLastUploadDataTime();
resetOpenDoorState(); resetOpenDoorState();
state.animationController!.stop(); state.animationController!.stop();
//
// getLockRecordLastUploadDataTime();
break; break;
case 0x06: case 0x06:
// //

View File

@ -258,7 +258,7 @@ class _RealTimePicturePageState extends State<RealTimePicturePage> with TickerPr
*/ */
})), })),
bottomBtnItemWidget( bottomBtnItemWidget(
'images/main/icon_lockDetail_hangUp.png', '挂断', Colors.red, () async { 'images/main/icon_lockDetail_hangUp.png', '挂断'.tr, Colors.red, () async {
// //
logic.udpHangUpAction(); logic.udpHangUpAction();
CallTalk().finishAVData(); CallTalk().finishAVData();

View File

@ -165,7 +165,7 @@ class _AboutPageState extends State<AboutPage> {
endIndent: 20.w, endIndent: 20.w,
), ),
CommonItem( CommonItem(
leftTitel:"".tr, leftTitel:'第三方信息共享清单'.tr,
rightTitle: '', rightTitle: '',
isHaveLine: false, isHaveLine: false,
isHaveDirection: true, isHaveDirection: true,

View File

@ -1,6 +1,7 @@
import 'dart:ui'; import 'dart:ui';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/tools/baseGetXController.dart'; import 'package:star_lock/tools/baseGetXController.dart';
import '../../main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart'; import '../../main/lockDetail/passwordKey/passwordKeyList/passwordKeyListEntity.dart';
import '../../network/api_repository.dart'; import '../../network/api_repository.dart';
@ -10,19 +11,21 @@ import 'mineMultiLanguage_state.dart';
class MineMultiLanguageLogic extends GetxController { class MineMultiLanguageLogic extends GetxController {
final MineMultiLanguageState state = MineMultiLanguageState(); final MineMultiLanguageState state = MineMultiLanguageState();
//- //
Future<void> updateUserLangInfo(Locale l, String lanTypeTitle) async { Future<void> updateUserLangInfo(Locale l) async {
// AppLog.log('lanTypeTitle: $lanTypeTitle');
final String lang = l.toLanguageTag(); final String lang = l.toLanguageTag();
final PasswordKeyListEntity entity = await ApiRepository.to.updateUserLangInfo(lang: lang); final PasswordKeyListEntity entity = await ApiRepository.to.updateUserLangInfo(lang: lang);
if (entity.errorCode!.codeIsSuccessful) { if (entity.errorCode!.codeIsSuccessful) {
eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanTypeTitle)); await changeLanguage(l);
changeLanguage(l); eventBus.fire(ChangeLanguageBlockLastLanguageEvent());
} }
} }
void changeLanguage(Locale l) { Future<void> changeLanguage(Locale l) async {
if(l == Get.locale)return; if(l == Get.locale)return;
Get.updateLocale(l); await Get.updateLocale(l);
state.resetLan(); state.resetLan();
} }
} }

View File

@ -6,7 +6,6 @@ import 'package:star_lock/mine/mineMultiLanguage/mineMultiLanguage_state.dart';
import '../../app_settings/app_colors.dart'; import '../../app_settings/app_colors.dart';
import '../../tools/commonItem.dart'; import '../../tools/commonItem.dart';
import '../../tools/eventBusEventManage.dart';
import '../../tools/titleAppBar.dart'; import '../../tools/titleAppBar.dart';
import '../../translations/app_dept.dart'; import '../../translations/app_dept.dart';
import 'mineMultiLanguage_logic.dart'; import 'mineMultiLanguage_logic.dart';
@ -30,9 +29,9 @@ class _MineMultiLanguagePageState extends State<MineMultiLanguagePage> {
barTitle: '多语言'.tr, barTitle: '多语言'.tr,
haveBack: true, haveBack: true,
backgroundColor: AppColors.mainColor), backgroundColor: AppColors.mainColor),
body: Column( body: ListView(
mainAxisAlignment: MainAxisAlignment.start, // mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min, // mainAxisSize: MainAxisSize.min,
children: _children(), children: _children(),
) )
); );
@ -54,7 +53,8 @@ class _MineMultiLanguagePageState extends State<MineMultiLanguagePage> {
// ); // );
for (int i = 0; i < state.languages.length; i++) { for (int i = 0; i < state.languages.length; i++) {
final Locale e = state.languages[i]; final Locale e = state.languages[i];
final LanguageType lanType = ExtensionLanguageType.fromLanguageCode(e.languageCode); final LanguageType lanType = ExtensionLanguageType.fromLocale(e);
// AppLog.log('e:$e lanType:$lanType state.currentLanguageType.value:${state.currentLanguageType.value} Get.locale!.languageCode:${Get.locale!.languageCode} Get.locale!.countryCode:${Get.locale!.countryCode}');
l.add( l.add(
CommonItem( CommonItem(
leftTitel: lanType.lanTitle, leftTitel: lanType.lanTitle,
@ -71,7 +71,7 @@ class _MineMultiLanguagePageState extends State<MineMultiLanguagePage> {
) )
: Container()), : Container()),
action: () { action: () {
logic.updateUserLangInfo(e, lanType.lanTitle); logic.updateUserLangInfo(e);
// eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanType.lanTitle)); // eventBus.fire(ChangeLanguageBlockLastLanguageEvent(lanType.lanTitle));
}), }),
); );

View File

@ -16,11 +16,11 @@ class MineMultiLanguageState {
return appDept.deptSupportedLocales; return appDept.deptSupportedLocales;
} }
var currentLanguageType = ExtensionLanguageType.fromLanguageCode(Get.locale!.languageCode).obs; var currentLanguageType = ExtensionLanguageType.fromLocale(Get.locale!).obs;
void resetLan() { Future<void> resetLan() async {
currentLanguageType.value = ExtensionLanguageType.fromLanguageCode(Get.locale!.languageCode); currentLanguageType.value = ExtensionLanguageType.fromLocale(Get.locale!);
AppLog.log("currentLanguageType.value:${currentLanguageType.value}"); // AppLog.log('currentLanguageType.value:${currentLanguageType.value} Get.locale!.languageCode:${Get.locale!.languageCode} languages:$languages');
StoreService.to.saveLanguageCode(Get.locale!.languageCode); await StoreService.to.saveLanguageCode(Get.locale!.languageCode);
} }
} }

View File

@ -16,10 +16,12 @@ import 'package:star_lock/versionUndate/versionUndate_entity.dart';
import '../../../../network/api_repository.dart'; import '../../../../network/api_repository.dart';
import '../../../../tools/baseGetXController.dart'; import '../../../../tools/baseGetXController.dart';
import '../../../app_settings/app_settings.dart';
import '../../../blue/blue_manage.dart'; import '../../../blue/blue_manage.dart';
import '../../../talk/udp/udp_help.dart'; import '../../../talk/udp/udp_help.dart';
import '../../../tools/eventBusEventManage.dart'; import '../../../tools/eventBusEventManage.dart';
import '../../../tools/store_service.dart'; import '../../../tools/store_service.dart';
import '../../../translations/app_dept.dart';
class MineSetLogic extends BaseGetXController { class MineSetLogic extends BaseGetXController {
final MineSetState state = MineSetState(); final MineSetState state = MineSetState();
@ -139,16 +141,23 @@ class MineSetLogic extends BaseGetXController {
StreamSubscription? _getNumberEvent; StreamSubscription? _getNumberEvent;
void _initLoadDataAction() { void _initLoadDataAction() {
// eventBus // eventBus
_getNumberEvent = _getNumberEvent = eventBus.on<ChangeLanguageBlockLastLanguageEvent>().listen((event) {
eventBus.on<ChangeLanguageBlockLastLanguageEvent>().listen((event) { state.currentLanguage.value = _getCurrentLanguage();
state.currentLanguage.value = event.languageTitle;
}); });
} }
String _getCurrentLanguage() {
String currentLanguage = ExtensionLanguageType.fromLocale(appDept.deptSupportedLocales.where((Locale element) =>
element.languageCode == StoreService.to.getLanguageCode()).first).lanTitle;
// AppLog.log('currentLanguagecurrentLanguage:$currentLanguage StoreService.to.getLanguageCode():${StoreService.to.getLanguageCode()}');
return currentLanguage ??'';
}
@override @override
void onReady() { void onReady() {
super.onReady(); super.onReady();
state.currentLanguage.value = _getCurrentLanguage();
_initLoadDataAction(); _initLoadDataAction();
} }

View File

@ -15,7 +15,7 @@ class MineSetState {
RxInt lockScreen = 2.obs; // RxInt lockScreen = 2.obs; //
RxInt hideExpiredAccessFlag = 2.obs; // RxInt hideExpiredAccessFlag = 2.obs; //
RxString currentLanguage = "".obs; // RxString currentLanguage = ''.obs; //
late FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = late FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin(); FlutterLocalNotificationsPlugin();

View File

@ -1,6 +1,5 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart'; import 'package:star_lock/common/XSConstantMacro/XSConstantMacro.dart';
@ -88,7 +87,7 @@ class _ValueAddedServicesHighFunctionPageState
children: <Widget>[ children: <Widget>[
SizedBox(height: 20.h), SizedBox(height: 20.h),
Text( Text(
'当前状态:已开通'.tr, '${'当前状态'.tr}${"已开通".tr}',
style: TextStyle( style: TextStyle(
fontSize: 24.sp, fontWeight: FontWeight.w600), fontSize: 24.sp, fontWeight: FontWeight.w600),
), ),

View File

@ -39,6 +39,6 @@ String getLanguageCode() {
.where((Locale element) => .where((Locale element) =>
element.languageCode == StoreService.to.getLanguageCode()) element.languageCode == StoreService.to.getLanguageCode())
.first .first
: const Locale('zh', 'CN');// Get.deviceLocale; : Get.locale!;// Get.deviceLocale;
return locale.toLanguageTag(); return locale.toLanguageTag();
} }

View File

@ -5,6 +5,6 @@ import 'package:star_lock/app_settings/app_settings.dart';
FutureOr<Request> requestLogInterceptor(Request request) async { FutureOr<Request> requestLogInterceptor(Request request) async {
// AppLog.log('GET HTTP REQUEST \n${request.url} \n${request.headers} ${request.toString()} '); // 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; return request;
} }

View File

@ -69,9 +69,7 @@ class ChickInAddStaffCardAndFingerprintBlockNumberEvent {
/// ///
class ChangeLanguageBlockLastLanguageEvent { class ChangeLanguageBlockLastLanguageEvent {
ChangeLanguageBlockLastLanguageEvent(this.languageTitle); ChangeLanguageBlockLastLanguageEvent();
String languageTitle;
} }
/// ///

View File

@ -8,25 +8,57 @@ import 'package:star_lock/translations/trans_lib.dart';
import '../tools/app_manager.dart'; import '../tools/app_manager.dart';
enum AppDept { enum AppDept {
cdl, starLock,
} }
extension ExtensionAppDept on AppDept { extension ExtensionAppDept on AppDept {
static AppDept fromAppPackageName(String packageName) { static AppDept fromAppPackageName(String packageName) {
AppDept dept = AppDept.cdl; AppDept dept = AppDept.starLock;
packageName = packageName.toLowerCase(); packageName = packageName.toLowerCase();
if(packageName.contains('cdl')){ if(packageName.contains('starLock')){
dept = AppDept.cdl; dept = AppDept.starLock;
} }
return dept; return dept;
} }
List<Locale> get deptSupportedLocales { List<Locale> get deptSupportedLocales {
Locale enL = const Locale('en', 'US'); const Locale enL = Locale('en', 'US');
Locale zhL = const Locale('zh', 'CN'); const Locale zhL = Locale('zh', 'CN');
const Locale twL = Locale('zh', 'TW');
const Locale frL = Locale('fr', 'FR');
const Locale ruL = Locale('ru', 'RU');
const Locale deL = Locale('de', 'DE');
const Locale jaL = Locale('ja', 'JP');
const Locale koL = Locale('ko', 'KR');
const Locale itL = Locale('it', 'IT');
const Locale ptL = Locale('pt', 'PT');
const Locale esL = Locale('es', 'ES');
const Locale arL = Locale('ar', 'SA');
const Locale viL = Locale('vi', 'VN');
const Locale msL = Locale('ms', 'MY');
const Locale nlL = Locale('nl', 'NL');
const Locale roL = Locale('ro', 'RO');
const Locale ltL = Locale('lt', 'LT');
const Locale svL = Locale('sv', 'SE');
const Locale etL = Locale('et', 'EE');
const Locale plL = Locale('pl', 'PL');
const Locale skL = Locale('sk', 'SK');
const Locale csL = Locale('cs', 'CZ');
const Locale elL = Locale('el', 'GR');
const Locale heL = Locale('he', 'IL');
const Locale trL = Locale('tr', 'TR');
const Locale huL = Locale('hu', 'HU');
const Locale bgL = Locale('bg', 'BG');
const Locale kkL = Locale('kk', 'KZ');
const Locale bnL = Locale('bn', 'BD');
const Locale hbsL = Locale('hr', 'BA');
const Locale thL = Locale('th', 'TH');
const Locale idL = Locale('id', 'ID');
const Locale fiL = Locale('fi', 'FI');
const Locale daL = Locale('da', 'DK');
return [enL,zhL]; return [enL,zhL,twL,frL,ruL,deL,jaL,koL,itL,ptL,esL,arL,viL,msL,nlL,roL,ltL,svL,etL,plL,skL,csL,elL,heL,trL,huL,bgL,kkL,bnL,hbsL,thL,idL,fiL,daL];
} }
} }
@ -38,13 +70,75 @@ final List<Locale> appSupportedLocales = appDept.deptSupportedLocales;
enum LanguageType { enum LanguageType {
chinese, chinese,
english, english,
deutsch, // //
francais, // traditionalChinese,
italiano, // //
dutch, // french,
spanish, // 西 //
czech, // russian,
slovak // //
german,
//
japanese,
//
korean,
//
italian,
//
// ukrainian,
//
portuguese,
// 西
spanish,
//
arabic,
//
vietnamese,
//
malay,
//
dutch,
//
romanian,
//
lithuanian,
//
swedish,
//
estonian,
//
polish,
//
slovak,
//
czech,
//
greek,
//
hebrew,
//
// serbian,
//
turkish,
//
hungarian,
//
bulgarian,
//
kazakh,
//
bengali,
//
croatian,
//
thai,
// 西
indonesian,
//
finnish,
//
danish,
} }
extension ExtensionLanguageType on LanguageType { extension ExtensionLanguageType on LanguageType {
@ -55,25 +149,344 @@ extension ExtensionLanguageType on LanguageType {
str = '英文'.tr; str = '英文'.tr;
break; break;
case LanguageType.chinese: case LanguageType.chinese:
str = '中文'.tr; str = '简体中文'.tr;
break;
case LanguageType.traditionalChinese:
str = '繁体中文'.tr;
break;
case LanguageType.french:
str = '法语'.tr;
break;
case LanguageType.russian:
str = '俄语'.tr;
break;
case LanguageType.german:
str = '德语'.tr;
break;
case LanguageType.japanese:
str = '日语'.tr;
break;
case LanguageType.korean:
str = '韩语'.tr;
break;
case LanguageType.italian:
str = '意大利语'.tr;
break;
// case LanguageType.ukrainian:
// str = '乌克兰语'.tr;
// break;
case LanguageType.portuguese:
str = '葡萄牙语'.tr;
break;
case LanguageType.spanish:
str = '西班牙语'.tr;
break;
case LanguageType.arabic:
str = '阿拉伯语'.tr;
break;
case LanguageType.vietnamese:
str = '越南语'.tr;
break;
case LanguageType.malay:
str = '马莱语'.tr;
break;
case LanguageType.dutch:
str = '荷兰语'.tr;
break;
case LanguageType.romanian:
str = '罗马尼亚语'.tr;
break;
case LanguageType.lithuanian:
str = '立陶宛语'.tr;
break;
case LanguageType.swedish:
str = '瑞典语'.tr;
break;
case LanguageType.estonian:
str = '爱沙尼亚语'.tr;
break;
case LanguageType.polish:
str = '波兰语'.tr;
break;
case LanguageType.slovak:
str = '斯洛伐克语'.tr;
break;
case LanguageType.czech:
str = '捷克语'.tr;
break;
case LanguageType.greek:
str = '希腊语'.tr;
break;
case LanguageType.hebrew:
str = '希伯来语'.tr;
break;
// case LanguageType.serbian:
// str = '塞尔维亚文'.tr;
// break;
case LanguageType.turkish:
str = '土耳其语'.tr;
break;
case LanguageType.hungarian:
str = '匈牙利语'.tr;
break;
case LanguageType.bulgarian:
str = '保加利亚语'.tr;
break;
case LanguageType.kazakh:
str = '哈萨克斯坦语'.tr;
break;
case LanguageType.bengali:
str = '孟加拉语'.tr;
break;
case LanguageType.croatian:
str = '克罗地亚语'.tr;
break;
case LanguageType.thai:
str = '泰语'.tr;
break;
case LanguageType.indonesian:
str = '印度尼西亚语'.tr;
break;
case LanguageType.finnish:
str = '芬兰语'.tr;
break;
case LanguageType.danish:
str = '丹麦语'.tr;
break; break;
} }
return str; return str;
} }
static LanguageType fromLanguageCode(String code) { // static LanguageType fromLanguageCode(String code) {
// LanguageType languageType = LanguageType.english;
// switch(code.toLowerCase()){
// case 'en':
// languageType = LanguageType.english;
// break;
// case 'zh':
// languageType = LanguageType.chinese;
// break;
// case 'tw':
// languageType = LanguageType.traditionalChinese;
// break;
// case 'fr':
// languageType = LanguageType.french;
// break;
// case 'ru':
// languageType = LanguageType.russian;
// break;
// case 'de':
// languageType = LanguageType.german;
// break;
// case 'ja':
// languageType = LanguageType.japanese;
// break;
// case 'ko':
// languageType = LanguageType.korean;
// break;
// case 'it':
// languageType = LanguageType.italian;
// break;
// // case 'uk':
// // languageType = LanguageType.ukrainian;
// // break;
// case 'pt':
// languageType = LanguageType.portuguese;
// break;
// case 'es':
// languageType = LanguageType.spanish;
// break;
// case 'ar':
// languageType = LanguageType.arabic;
// break;
// case 'vi':
// languageType = LanguageType.vietnamese;
// break;
// case 'ms':
// languageType = LanguageType.malay;
// break;
// case 'nl':
// languageType = LanguageType.dutch;
// break;
// case 'ro':
// languageType = LanguageType.romanian;
// break;
// case 'lt':
// languageType = LanguageType.lithuanian;
// break;
// case 'sv':
// languageType = LanguageType.swedish;
// break;
// case 'et':
// languageType = LanguageType.estonian;
// break;
// case 'pl':
// languageType = LanguageType.polish;
// break;
// case 'sk':
// languageType = LanguageType.slovak;
// break;
// case 'cs':
// languageType = LanguageType.czech;
// break;
// case 'el':
// languageType = LanguageType.greek;
// break;
// case 'he':
// languageType = LanguageType.hebrew;
// break;
// // case 'sr':
// // languageType = LanguageType.serbian;
// // break;
// case 'tr':
// languageType = LanguageType.turkish;
// break;
// case 'hu':
// languageType = LanguageType.hungarian;
// break;
// case 'bg':
// languageType = LanguageType.bulgarian;
// break;
// case 'kk':
// languageType = LanguageType.kazakh;
// break;
// case 'bn':
// languageType = LanguageType.bengali;
// break;
// case 'hr':
// languageType = LanguageType.croatian;
// break;
// case 'th':
// languageType = LanguageType.thai;
// break;
// case 'id':
// languageType = LanguageType.indonesian;
// break;
// case 'fi':
// languageType = LanguageType.finnish;
// break;
// case 'da':
// languageType = LanguageType.danish;
// break;
// }
// return languageType;
// }
static LanguageType fromLocale(Locale locale) {
LanguageType languageType = LanguageType.english; LanguageType languageType = LanguageType.english;
final String code = locale.languageCode;
final String countryCode = locale.countryCode ?? '';
switch(code.toLowerCase()){ switch(code.toLowerCase()){
case 'en': case 'en':
languageType = LanguageType.english; languageType = LanguageType.english;
break; break;
case 'zh': case 'zh':
languageType = LanguageType.chinese; if(countryCode.toLowerCase() == 'cn'){
languageType = LanguageType.chinese;
}else{
languageType = LanguageType.traditionalChinese;
}
break;
case 'fr':
languageType = LanguageType.french;
break;
case 'ru':
languageType = LanguageType.russian;
break;
case 'de':
languageType = LanguageType.german;
break;
case 'ja':
languageType = LanguageType.japanese;
break;
case 'ko':
languageType = LanguageType.korean;
break;
case 'it':
languageType = LanguageType.italian;
break;
// case 'uk':
// languageType = LanguageType.ukrainian;
// break;
case 'pt':
languageType = LanguageType.portuguese;
break;
case 'es':
languageType = LanguageType.spanish;
break;
case 'ar':
languageType = LanguageType.arabic;
break;
case 'vi':
languageType = LanguageType.vietnamese;
break;
case 'ms':
languageType = LanguageType.malay;
break;
case 'nl':
languageType = LanguageType.dutch;
break;
case 'ro':
languageType = LanguageType.romanian;
break;
case 'lt':
languageType = LanguageType.lithuanian;
break;
case 'sv':
languageType = LanguageType.swedish;
break;
case 'et':
languageType = LanguageType.estonian;
break;
case 'pl':
languageType = LanguageType.polish;
break;
case 'sk':
languageType = LanguageType.slovak;
break;
case 'cs':
languageType = LanguageType.czech;
break;
case 'el':
languageType = LanguageType.greek;
break;
case 'he':
languageType = LanguageType.hebrew;
break;
// case 'sr':
// languageType = LanguageType.serbian;
// break;
case 'tr':
languageType = LanguageType.turkish;
break;
case 'hu':
languageType = LanguageType.hungarian;
break;
case 'bg':
languageType = LanguageType.bulgarian;
break;
case 'kk':
languageType = LanguageType.kazakh;
break;
case 'bn':
languageType = LanguageType.bengali;
break;
case 'hr':
languageType = LanguageType.croatian;
break;
case 'th':
languageType = LanguageType.thai;
break;
case 'id':
languageType = LanguageType.indonesian;
break;
case 'fi':
languageType = LanguageType.finnish;
break;
case 'da':
languageType = LanguageType.danish;
break; break;
} }
return languageType; return languageType;
} }
} }

View File

@ -2,28 +2,158 @@ part of lib_trans;
class TranslationLoader { class TranslationLoader {
static bool get isZh => Get.locale?.languageCode.toLowerCase() == 'zh'; // LAN_ZH_CN="zh" #
static bool get isEn => Get.locale?.languageCode.toLowerCase() == 'en'; // LAN_EN_US="en" #
// LAN_ZH_TW="tw" #
// LAN_Fr_FR="fr" #
// LAN_RU_RU="ru" #
// LAN_DE_DE="de" #
// LAN_ZH_JA="ja" #
// LAN_ZH_KO="ko" #
// LAN_ZH_IT="it" #
// #LAN_ZH_TW="uk" #
// LAN_ZH_PT="pt" #
// LAN_ZH_ES="es" # 西
// LAN_ZH_AR="ar" #
// LAN_ZH_vi="vi" #
// LAN_ZH_MS="ms" #
// LAN_ZH_NL="nl" #
// LAN_ZH_RO="ro" #
// LAN_ZH_LT="lt" #
// LAN_ZH_SV="sv" #
// LAN_ZH_ET="et" #
// LAN_ZH_PL="pl" #
// LAN_ZH_SK="sk" #
// LAN_ZH_CS="cs" #
// LAN_ZH_EL="el" #
// LAN_ZH_HE="he" #
// #LAN_ZH_TW="sr" #
// LAN_ZH_TR="tr" #
// LAN_ZH_HU="hu" #
// LAN_ZH_BG="bg" #
// LAN_ZH_KK="kk" # ===
// LAN_ZH_BN="bn" #
// LAN_ZH_HBS="hr" #
// LAN_ZH_TH="th" #
// LAN_ZH_ID="id" # 西
// LAN_ZH_FI="fi" #
// LAN_ZH_DA="da" #
static Map<String,String>
_zhMap = <String, String>{}, // static bool get isZh => Get.locale?.languageCode.toLowerCase() == 'zh';
_enMap = <String, String>{}, // static bool get isEn => Get.locale?.languageCode.toLowerCase() == 'en';
_keyMap = <String, String>{};
static Map<String,String> _zhMap = <String, String>{};
static Map<String,String> _enMap = <String, String>{};
static Map<String,String> _twMap = <String, String>{};
static Map<String,String> _frMap = <String, String>{};
static Map<String,String> _ruMap = <String, String>{};
static Map<String,String> _deMap = <String, String>{};
static Map<String,String> _jaMap = <String, String>{};
static Map<String,String> _koMap = <String, String>{};
static Map<String,String> _itMap = <String, String>{};
static Map<String,String> _ukMap = <String, String>{};
static Map<String,String> _ptMap = <String, String>{};
static Map<String,String> _esMap = <String, String>{};
static Map<String,String> _arMap = <String, String>{};
static Map<String,String> _viMap = <String, String>{};
static Map<String,String> _msMap = <String, String>{};
static Map<String,String> _nlMap = <String, String>{};
static Map<String,String> _roMap = <String, String>{};
static Map<String,String> _ltMap = <String, String>{};
static Map<String,String> _svMap = <String, String>{};
static Map<String,String> _etMap = <String, String>{};
static Map<String,String> _plMap = <String, String>{};
static Map<String,String> _skMap = <String, String>{};
static Map<String,String> _csMap = <String, String>{};
static Map<String,String> _elMap = <String, String>{};
static Map<String,String> _heMap = <String, String>{};
static Map<String,String> _srMap = <String, String>{};
static Map<String,String> _trMap = <String, String>{};
static Map<String,String> _huMap = <String, String>{};
static Map<String,String> _bgMap = <String, String>{};
static Map<String,String> _kkMap = <String, String>{};
static Map<String,String> _bnMap = <String, String>{};
static Map<String,String> _hrMap = <String, String>{};
static Map<String,String> _thMap = <String, String>{};
static Map<String,String> _idMap = <String, String>{};
static Map<String,String> _fiMap = <String, String>{};
static Map<String,String> _daMap = <String, String>{};
static Map<String,String> get zhDic => _zhMap; static Map<String,String> get zhDic => _zhMap;
static Map<String,String> get enDic => _enMap; static Map<String,String> get enDic => _enMap;
static Map<String,String> get twDic => _twMap;
static Map<String,String> get frDic => _frMap;
static Map<String,String> get ruDic => _ruMap;
static Map<String,String> get deDic => _deMap;
static Map<String,String> get jaDic => _jaMap;
static Map<String,String> get koDic => _koMap;
static Map<String,String> get itDic => _itMap;
static Map<String,String> get ukDic => _ukMap;
static Map<String,String> get ptDic => _ptMap;
static Map<String,String> get esDic => _esMap;
static Map<String,String> get arDic => _arMap;
static Map<String,String> get viDic => _viMap;
static Map<String,String> get msDic => _msMap;
static Map<String,String> get nlDic => _nlMap;
static Map<String,String> get roDic => _roMap;
static Map<String,String> get ltDic => _ltMap;
static Map<String,String> get svDic => _svMap;
static Map<String,String> get etDic => _etMap;
static Map<String,String> get plDic => _plMap;
static Map<String,String> get skDic => _skMap;
static Map<String,String> get csDic => _csMap;
static Map<String,String> get elDic => _elMap;
static Map<String,String> get heDic => _heMap;
static Map<String,String> get srDic => _srMap;
static Map<String,String> get trDic => _trMap;
static Map<String,String> get huDic => _huMap;
static Map<String,String> get bgDic => _bgMap;
static Map<String,String> get kkDic => _kkMap;
static Map<String,String> get bnDic => _bnMap;
static Map<String,String> get hrDic => _hrMap;
static Map<String,String> get thDic => _thMap;
static Map<String,String> get idDic => _idMap;
static Map<String,String> get fiDic => _fiMap;
static Map<String,String> get daDic => _daMap;
// static LanKeyEntity? _lanKeyEntity; static Future<void> loadTranslation() async {
// static LanKeyEntity? get lanKeys => _lanKeyEntity; _zhMap = await _loadJsonFile('lan/lan_zh.json');
_enMap = await _loadJsonFile('lan/lan_en.json');
static Future<void> loadTranslation({ _twMap = await _loadJsonFile('lan/lan_tw.json');
String? zhSource, _frMap = await _loadJsonFile('lan/lan_fr.json');
String? enSource, _ruMap = await _loadJsonFile('lan/lan_ru.json');
String? keySource,}) async { _deMap = await _loadJsonFile('lan/lan_de.json');
_zhMap = await _loadJsonFile(zhSource!); _jaMap = await _loadJsonFile('lan/lan_ja.json');
_enMap = await _loadJsonFile(enSource!); _koMap = await _loadJsonFile('lan/lan_ko.json');
_keyMap = await _loadJsonFile(keySource!); _itMap = await _loadJsonFile('lan/lan_it.json');
// _lanKeyEntity = LanKeyEntity.fromJson(_keyMap); _ukMap = await _loadJsonFile('lan/lan_uk.json');
_ptMap = await _loadJsonFile('lan/lan_pt.json');
_esMap = await _loadJsonFile('lan/lan_es.json');
_arMap = await _loadJsonFile('lan/lan_ar.json');
_viMap = await _loadJsonFile('lan/lan_vi.json');
_msMap = await _loadJsonFile('lan/lan_ms.json');
_nlMap = await _loadJsonFile('lan/lan_nl.json');
_roMap = await _loadJsonFile('lan/lan_ro.json');
_ltMap = await _loadJsonFile('lan/lan_lt.json');
_svMap = await _loadJsonFile('lan/lan_sv.json');
_etMap = await _loadJsonFile('lan/lan_et.json');
_plMap = await _loadJsonFile('lan/lan_pl.json');
_skMap = await _loadJsonFile('lan/lan_sk.json');
_csMap = await _loadJsonFile('lan/lan_cs.json');
_elMap = await _loadJsonFile('lan/lan_el.json');
_heMap = await _loadJsonFile('lan/lan_he.json');
_srMap = await _loadJsonFile('lan/lan_sr.json');
_trMap = await _loadJsonFile('lan/lan_tr.json');
_huMap = await _loadJsonFile('lan/lan_hu.json');
_bgMap = await _loadJsonFile('lan/lan_bg.json');
_kkMap = await _loadJsonFile('lan/lan_kk.json');
_bnMap = await _loadJsonFile('lan/lan_bn.json');
_hrMap = await _loadJsonFile('lan/lan_hr.json');
_thMap = await _loadJsonFile('lan/lan_th.json');
_idMap = await _loadJsonFile('lan/lan_id.json');
_fiMap = await _loadJsonFile('lan/lan_fi.json');
_daMap = await _loadJsonFile('lan/lan_da.json');
} }
static Future<Map<String,String>> _loadJsonFile(String filePath) async => rootBundle.loadString(filePath).then((String jsonString){ static Future<Map<String,String>> _loadJsonFile(String filePath) async => rootBundle.loadString(filePath).then((String jsonString){

View File

@ -2,10 +2,81 @@ part of lib_trans;
class TranslationMessage extends Translations { class TranslationMessage extends Translations {
// LAN_ZH_CN="zh" #
// LAN_EN_US="en" #
// LAN_ZH_TW="tw" #
// LAN_Fr_FR="fr" #
// LAN_RU_RU="ru" #
// LAN_DE_DE="de" #
// LAN_ZH_JA="ja" #
// LAN_ZH_KO="ko" #
// LAN_ZH_IT="it" #
// #LAN_ZH_TW="uk" #
// LAN_ZH_PT="pt" #
// LAN_ZH_ES="es" # 西
// LAN_ZH_AR="ar" #
// LAN_ZH_vi="vi" #
// LAN_ZH_MS="ms" #
// LAN_ZH_NL="nl" #
// LAN_ZH_RO="ro" #
// LAN_ZH_LT="lt" #
// LAN_ZH_SV="sv" #
// LAN_ZH_ET="et" #
// LAN_ZH_PL="pl" #
// LAN_ZH_SK="sk" #
// LAN_ZH_CS="cs" #
// LAN_ZH_EL="el" #
// LAN_ZH_HE="he" #
// #LAN_ZH_TW="sr" #
// LAN_ZH_TR="tr" #
// LAN_ZH_HU="hu" #
// LAN_ZH_BG="bg" #
// LAN_ZH_KK="kk" # ===
// LAN_ZH_BN="bn" #
// LAN_ZH_HBS="hr" #
// LAN_ZH_TH="th" #
// LAN_ZH_ID="id" # 西
// LAN_ZH_FI="fi" #
// LAN_ZH_DA="da" #
@override @override
Map<String, Map<String, String>> get keys => { Map<String, Map<String, String>> get keys => {
'en_US' : TranslationLoader.enDic, 'en_US' : TranslationLoader.enDic,
'zh_CN': TranslationLoader.zhDic, 'zh_CN': TranslationLoader.zhDic,
'zh_TW': TranslationLoader.twDic,
'fr_FR': TranslationLoader.frDic,
'ru_RU': TranslationLoader.ruDic,
'de_DE': TranslationLoader.deDic,
'ja_JA': TranslationLoader.jaDic,
'ko_KO': TranslationLoader.koDic,
'it_IT': TranslationLoader.itDic,
'uk_UK': TranslationLoader.ukDic,
'pt_PT': TranslationLoader.ptDic,
'es_ES': TranslationLoader.esDic,
'ar_AR': TranslationLoader.arDic,
'vi_VI': TranslationLoader.viDic,
'ms_MS': TranslationLoader.msDic,
'nl_NL': TranslationLoader.nlDic,
'ro_RO': TranslationLoader.roDic,
'lt_LT': TranslationLoader.ltDic,
'sv_SV': TranslationLoader.svDic,
'et_ET': TranslationLoader.etDic,
'pl_PL': TranslationLoader.plDic,
'sk_SK': TranslationLoader.skDic,
'cs_CS': TranslationLoader.csDic,
'el_EL': TranslationLoader.elDic,
'he_HE': TranslationLoader.heDic,
'sr_SR': TranslationLoader.srDic,
'tr_TR': TranslationLoader.trDic,
'hu_HU': TranslationLoader.huDic,
'bg_BG': TranslationLoader.bgDic,
'kk_KK': TranslationLoader.kkDic,
'bn_BN': TranslationLoader.bnDic,
'hr_HR': TranslationLoader.hrDic,
'th_TH': TranslationLoader.thDic,
'id_ID': TranslationLoader.idDic,
'fi_FI': TranslationLoader.fiDic,
'da_DA': TranslationLoader.daDic,
}; };
void updateLocal(Locale l) => Get.updateLocale(l); void updateLocal(Locale l) => Get.updateLocale(l);

View File

@ -105,6 +105,6 @@ echo -e "\n* 没有发现废弃 API开始编译"
# 编译命令 # 编译命令
#flutter clean && flutter pub get #flutter clean && flutter pub get
#flutter build apk --flavor $environment -t $main_file flutter build apk --flavor $environment -t $main_file
#flutter build ios --flavor $environment -t $main_file #flutter build ios --flavor $environment -t $main_file
flutter build appbundle --flavor $environment -t $main_file #flutter build appbundle --flavor $environment -t $main_file

View File

@ -86,8 +86,9 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# 1.0.74+2024080901xhj 预发布环境,提交测试:回归 8月9号之前bug # 1.0.74+2024080901xhj 预发布环境,提交测试:回归 8月9号之前bug
# 1.0.75+2024081001锁定版本上架商城 # 1.0.75+2024081001锁定版本上架商城
# 1.0.76+2024081201锁定版本上架商城--最新版本 # 1.0.76+2024081201锁定版本上架商城--最新版本
# 1.0.78+2024082701测试国际化功能
version: 1.0.76+2024081601 version: 1.0.78+2024082701
environment: environment:
sdk: '>=2.12.0 <3.0.0' sdk: '>=2.12.0 <3.0.0'

View File

@ -10,9 +10,46 @@ SOURCE_LANGUAGE="en"
#项目语言常量 #项目语言常量
LAN_ZH_CN="zh_CN" #LAN_ZH_CN="zh_CN"
LAN_ZH_TW="zh_TW" #LAN_ZH_TW="zh_TW"
LAN_EN_US="en_US" #LAN_EN_US="en_US"
LAN_ZH_CN="zh" # 简体中文
LAN_EN_US="en" # 英文
LAN_ZH_TW="tw" # 繁体中文
LAN_Fr_FR="fr" # 法语
LAN_RU_RU="ru" # 俄语
LAN_DE_DE="de" # 德语
LAN_ZH_JA="ja" # 日语
LAN_ZH_KO="ko" # 韩语
LAN_ZH_IT="it" # 意大利语
#LAN_ZH_TW="tw" # 乌克兰语
LAN_ZH_PT="pt" # 葡萄牙语
LAN_ZH_ES="es" # 西班牙语
LAN_ZH_AR="ar" # 阿拉伯语
LAN_ZH_vi="vi" # 越南语
LAN_ZH_MS="ms" # 马莱语
LAN_ZH_NL="nl" # 荷兰语
LAN_ZH_RO="ro" # 罗马尼亚语
LAN_ZH_LT="lt" # 立陶宛语
LAN_ZH_SV="sv" # 瑞典语
LAN_ZH_ET="et" # 爱沙尼亚语
LAN_ZH_PL="pl" # 波兰语
LAN_ZH_SK="sk" # 斯洛伐克语
LAN_ZH_CS="cs" # 捷克语
LAN_ZH_EL="el" # 希腊语
LAN_ZH_HE="he" # 希伯来语
#LAN_ZH_TW="tw" # 塞尔维亚文
LAN_ZH_TR="tr" # 土耳其语
LAN_ZH_HU="hu" # 匈牙利语
LAN_ZH_BG="bg" # 保加利亚语
LAN_ZH_KK="kk" # 哈萨克斯坦语 === 哈萨克语
LAN_ZH_BN="bn" # 孟加拉语
LAN_ZH_HBS="hbs" # 克罗地亚语
LAN_ZH_TH="th" # 泰语
LAN_ZH_ID="id" # 印度尼西亚语
LAN_ZH_FI="fi" # 芬兰语
LAN_ZH_DA="da" # 丹麦语
declare -A LANG_LIST=( declare -A LANG_LIST=(
["$LAN_ZH_CN"]="简体中文" ["$LAN_ZH_CN"]="简体中文"
@ -25,6 +62,42 @@ declare -A ALIYUN_LANG_MAP=(
["$LAN_ZH_CN"]="zh" ["$LAN_ZH_CN"]="zh"
["$LAN_ZH_TW"]="zh-tw" ["$LAN_ZH_TW"]="zh-tw"
["$LAN_EN_US"]="en" ["$LAN_EN_US"]="en"
# ["$LAN_ZH_CN"]="zh" # 简体中文
# ["$LAN_EN_US"]="en" # 英文
# ["$LAN_ZH_TW"]="tw" # 繁体中文
["$LAN_Fr_FR"]="fr" # 法语
["$LAN_RU_RU"]="ru" # 俄语
["$LAN_DE_DE"]="de" # 德语
["$LAN_ZH_JA"]="ja" # 日语
["$LAN_ZH_KO"]="ko" # 韩语
["$LAN_ZH_IT"]="it" # 意大利语
#LAN_ZH_TW="tw" # 乌克兰语
["$LAN_ZH_PT"]="pt" # 葡萄牙语
["$LAN_ZH_ES"]="es" # 西班牙语
["$LAN_ZH_AR"]="ar" # 阿拉伯语
["$LAN_ZH_vi"]="vi" # 越南语
["$LAN_ZH_MS"]="ms" # 马莱语
["$LAN_ZH_NL"]="nl" # 荷兰语
["$LAN_ZH_RO"]="ro" # 罗马尼亚语
["$LAN_ZH_LT"]="lt" # 立陶宛语
["$LAN_ZH_SV"]="sv" # 瑞典语
["$LAN_ZH_ET"]="et" # 爱沙尼亚语
["$LAN_ZH_PL"]="pl" # 波兰语
["$LAN_ZH_SK"]="sk" # 斯洛伐克语
["$LAN_ZH_CS"]="cs" # 捷克语
["$LAN_ZH_EL"]="el" # 希腊语
["$LAN_ZH_HE"]="he" # 希伯来语
#LAN_ZH_TW="tw" # 塞尔维亚文
["$LAN_ZH_TR"]="tr" # 土耳其语
["$LAN_ZH_HU"]="hu" # 匈牙利语
["$LAN_ZH_BG"]="bg" # 保加利亚语
["$LAN_ZH_KK"]="kk" # 哈萨克斯坦语 === 哈萨克语
["$LAN_ZH_BN"]="bn" # 孟加拉语
["$LAN_ZH_HBS"]="hbs" # 克罗地亚语
["$LAN_ZH_TH"]="th" # 泰语
["$LAN_ZH_ID"]="id" # 印度尼西亚语
["$LAN_ZH_FI"]="fi" # 芬兰语
["$LAN_ZH_DA"]="da" # 丹麦语
) )