feat(国际化): 新增国际化

This commit is contained in:
gx_ma
2026-03-24 11:41:41 +08:00
parent abe46baf18
commit e70c198071
97 changed files with 10802 additions and 5302 deletions

View File

@@ -5,6 +5,7 @@ import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fastbee.common.utils.MessageUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
@@ -55,7 +56,7 @@ public class CommonController
{
if (!FileUtils.checkAllowDownload(fileName))
{
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
throw new Exception(StringUtils.format(MessageUtils.message("download.filename.not.valid"), fileName));
}
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = RuoYiConfig.getDownloadPath() + fileName;
@@ -151,7 +152,7 @@ public class CommonController
{
if (!FileUtils.checkAllowDownload(resource))
{
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
throw new Exception(StringUtils.format(MessageUtils.message("download.resource.not.valid"), resource));
}
// 本地资源路径
String localPath = RuoYiConfig.getProfile();

View File

@@ -1,8 +1,11 @@
package com.fastbee.web.controller.system;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -36,7 +39,7 @@ import com.fastbee.system.service.ISysConfigService;
@RequestMapping("/system/config")
public class SysConfigController extends BaseController
{
@Autowired
@Resource
private ISysConfigService configService;
/**
@@ -95,7 +98,7 @@ public class SysConfigController extends BaseController
{
if (!configService.checkConfigKeyUnique(config))
{
return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
return error(StringUtils.format(MessageUtils.message("sysConfig.add.param.fail.name.exist"), config.getConfigName()));
}
config.setCreateBy(getUsername());
return toAjax(configService.insertConfig(config));
@@ -112,7 +115,7 @@ public class SysConfigController extends BaseController
{
if (!configService.checkConfigKeyUnique(config))
{
return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
return error(StringUtils.format(MessageUtils.message("sysConfig.update.param.fail.name.exist"), config.getConfigName()));
}
config.setUpdateBy(getUsername());
return toAjax(configService.updateConfig(config));

View File

@@ -5,6 +5,7 @@ import java.util.stream.Collectors;
import com.fastbee.common.core.domain.model.LoginUser;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -29,6 +30,8 @@ import com.fastbee.common.enums.BusinessType;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.system.service.ISysDeptService;
import javax.servlet.http.HttpServletRequest;
/**
* 部门信息
*
@@ -98,11 +101,11 @@ public class SysDeptController extends BaseController
@PreAuthorize("@ss.hasPermi('system:dept:add')")
@Log(title = "部门管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysDept dept)
public AjaxResult add(HttpServletRequest request, @Validated @RequestBody SysDept dept)
{
if (!deptService.checkDeptNameUnique(dept))
{
return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
return error(StringUtils.format(MessageUtils.message("dept.add.failed.name.exists"), dept.getDeptName()));
}
dept.setCreateBy(getUsername());
return toAjax(deptService.insertDept(dept));
@@ -121,15 +124,15 @@ public class SysDeptController extends BaseController
deptService.checkDeptDataScope(deptId);
if (!deptService.checkDeptNameUnique(dept))
{
return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
return error(StringUtils.format(MessageUtils.message("dept.update.failed.name.exists"), dept.getDeptName()));
}
else if (dept.getParentId().equals(deptId))
{
return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
return error(StringUtils.format(MessageUtils.message("dept.update.failed.parent.not.valid"), dept.getDeptName()));
}
else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
{
return error("该部门包含未停用的子部门!");
return error(MessageUtils.message("dept.update.failed.child.not.valid"));
}
dept.setUpdateBy(getUsername());
return toAjax(deptService.updateDept(dept));
@@ -146,11 +149,11 @@ public class SysDeptController extends BaseController
{
if (deptService.hasChildByDeptId(deptId))
{
return warn("存在下级部门,不允许删除");
return warn(MessageUtils.message("dept.delete.failed.child.exists"));
}
if (deptService.checkDeptExistUser(deptId))
{
return warn("部门存在用户,不允许删除");
return warn(MessageUtils.message("dept.delete.failed.user.exists"));
}
deptService.checkDeptDataScope(deptId);
return toAjax(deptService.deleteDeptById(deptId));

View File

@@ -78,7 +78,7 @@ public class SysDictDataController extends BaseController
List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
if (StringUtils.isNull(data))
{
data = new ArrayList<SysDictData>();
data = new ArrayList<>();
}
return success(data);
}

View File

@@ -3,6 +3,8 @@ package com.fastbee.web.controller.system;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -82,7 +84,7 @@ public class SysDictTypeController extends BaseController
{
if (!dictTypeService.checkDictTypeUnique(dict))
{
return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
return error(StringUtils.format(MessageUtils.message("dict.add.failed.type.exists"), dict.getDictName()));
}
dict.setCreateBy(getUsername());
return toAjax(dictTypeService.insertDictType(dict));
@@ -99,7 +101,7 @@ public class SysDictTypeController extends BaseController
{
if (!dictTypeService.checkDictTypeUnique(dict))
{
return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
return error(StringUtils.format(MessageUtils.message("dict.update.failed.type.exists"), dict.getDictName()));
}
dict.setUpdateBy(getUsername());
return toAjax(dictTypeService.updateDictType(dict));

View File

@@ -1,5 +1,6 @@
package com.fastbee.web.controller.system;
import com.fastbee.common.utils.MessageUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@@ -24,6 +25,6 @@ public class SysIndexController
@RequestMapping("/")
public String index()
{
return StringUtils.format("欢迎使用{}后台管理框架当前版本v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
return StringUtils.format(MessageUtils.message("index.welcome.message"), ruoyiConfig.getName(), ruoyiConfig.getVersion());
}
}

View File

@@ -17,9 +17,12 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Set;
import static com.fastbee.common.constant.Constants.LANGUAGE;
/**
* 登录验证
*
@@ -47,12 +50,12 @@ public class SysLoginController
* @return 结果
*/
@PostMapping("/login")
public AjaxResult login(@RequestBody LoginBody loginBody)
public AjaxResult login(HttpServletRequest request, @RequestBody LoginBody loginBody)
{
AjaxResult ajax = AjaxResult.success();
// 生成令牌
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
loginBody.getUuid());
loginBody.getUuid(), request.getHeader(LANGUAGE));
ajax.put(Constants.TOKEN, token);
return ajax;
}
@@ -89,10 +92,10 @@ public class SysLoginController
* @return 路由信息
*/
@GetMapping("getRouters")
public AjaxResult getRouters()
public AjaxResult getRouters(HttpServletRequest request)
{
Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId, request.getHeader(LANGUAGE));
return AjaxResult.success(menuService.buildMenus(menus));
}
}

View File

@@ -2,6 +2,7 @@ package com.fastbee.web.controller.system;
import java.util.List;
import com.fastbee.common.utils.MessageUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -96,11 +97,11 @@ public class SysMenuController extends BaseController
{
if (!menuService.checkMenuNameUnique(menu))
{
return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
return error(StringUtils.format(MessageUtils.message("menu.add.failed.name.exists"), menu.getMenuName()));
}
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
{
return error("新增菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
return error(StringUtils.format(MessageUtils.message("menu.add.failed.path.not.valid"), menu.getMenuName()));
}
menu.setCreateBy(getUsername());
return toAjax(menuService.insertMenu(menu));
@@ -117,15 +118,15 @@ public class SysMenuController extends BaseController
{
if (!menuService.checkMenuNameUnique(menu))
{
return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
return error(StringUtils.format(MessageUtils.message("menu.update.failed.name.exists"), menu.getMenuName()));
}
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
{
return error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
return error(StringUtils.format(MessageUtils.message("menu.update.failed.path.not.valid"), menu.getMenuName()));
}
else if (menu.getMenuId().equals(menu.getParentId()))
{
return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
return error(StringUtils.format(MessageUtils.message("menu.update.failed.parent.not.valid"), menu.getMenuName()));
}
menu.setUpdateBy(getUsername());
return toAjax(menuService.updateMenu(menu));
@@ -142,11 +143,11 @@ public class SysMenuController extends BaseController
{
if (menuService.hasChildByMenuId(menuId))
{
return warn("存在子菜单,不允许删除");
return warn(MessageUtils.message("menu.delete.failed.child.exists"));
}
if (menuService.checkMenuExistRole(menuId))
{
return warn("菜单已分配,不允许删除");
return warn(MessageUtils.message("menu.delete.failed.role.exists"));
}
return toAjax(menuService.deleteMenuById(menuId));
}

View File

@@ -3,6 +3,8 @@ package com.fastbee.web.controller.system;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -85,11 +87,11 @@ public class SysPostController extends BaseController
{
if (!postService.checkPostNameUnique(post))
{
return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
return error(StringUtils.format(MessageUtils.message("post.add.failed.name.exists"), post.getPostName()));
}
else if (!postService.checkPostCodeUnique(post))
{
return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
return error(StringUtils.format(MessageUtils.message("post.add.failed.code.exists"), post.getPostName()));
}
post.setCreateBy(getUsername());
return toAjax(postService.insertPost(post));
@@ -106,11 +108,11 @@ public class SysPostController extends BaseController
{
if (!postService.checkPostNameUnique(post))
{
return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
return error(StringUtils.format(MessageUtils.message("post.update.failed.name.exists"), post.getPostName()));
}
else if (!postService.checkPostCodeUnique(post))
{
return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
return error(StringUtils.format(MessageUtils.message("post.update.failed.code.exists"), post.getPostName()));
}
post.setUpdateBy(getUsername());
return toAjax(postService.updatePost(post));

View File

@@ -9,6 +9,7 @@ import com.fastbee.common.core.domain.entity.SysUser;
import com.fastbee.common.core.domain.model.LoginUser;
import com.fastbee.common.enums.BusinessType;
import com.fastbee.common.enums.SocialPlatformType;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.SecurityUtils;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.common.utils.file.FileUploadUtils;
@@ -86,11 +87,11 @@ public class SysProfileController extends BaseController
currentUser.setSex(user.getSex());
if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser))
{
return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
return error(StringUtils.format(MessageUtils.message("user.update.failed.phone.exists"), user.getUserName()));
}
if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser))
{
return error("修改用户'" + loginUser.getUsername() + "'失败,邮箱账号已存在");
return error(StringUtils.format(MessageUtils.message("user.update.failed.email.exists"), user.getUserName()));
}
if (userService.updateUserProfile(currentUser) > 0)
{
@@ -98,7 +99,7 @@ public class SysProfileController extends BaseController
tokenService.setLoginUser(loginUser);
return success();
}
return error("修改个人信息异常,请联系管理员");
return error(MessageUtils.message("user.update.failed"));
}
/**
@@ -116,11 +117,11 @@ public class SysProfileController extends BaseController
String password = loginUser.getPassword();
if (!SecurityUtils.matchesPassword(oldPassword, password))
{
return error("修改密码失败,旧密码错误");
return error(MessageUtils.message("user.update.failed.password.wrong"));
}
if (SecurityUtils.matchesPassword(newPassword, password))
{
return error("新密码不能与旧密码相同");
return error(MessageUtils.message("user.update.failed.password.same"));
}
newPassword = SecurityUtils.encryptPassword(newPassword);
if (userService.resetUserPwd(userName, newPassword) > 0)
@@ -130,7 +131,7 @@ public class SysProfileController extends BaseController
tokenService.setLoginUser(loginUser);
return success();
}
return error("修改密码异常,请联系管理员");
return error(MessageUtils.message("user.update.password.failed"));
}
/**
@@ -155,6 +156,6 @@ public class SysProfileController extends BaseController
return ajax;
}
}
return error("上传图片异常,请联系管理员");
return error(MessageUtils.message("user.upload.avatar.failed"));
}
}

View File

@@ -1,5 +1,6 @@
package com.fastbee.web.controller.system;
import com.fastbee.common.utils.MessageUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +14,8 @@ import com.fastbee.common.utils.StringUtils;
import com.fastbee.framework.web.service.SysRegisterService;
import com.fastbee.system.service.ISysConfigService;
import javax.annotation.Resource;
/**
* 注册验证
*
@@ -22,10 +25,10 @@ import com.fastbee.system.service.ISysConfigService;
@RestController
public class SysRegisterController extends BaseController
{
@Autowired
@Resource
private SysRegisterService registerService;
@Autowired
@Resource
private ISysConfigService configService;
@ApiOperation("注册账号")
@@ -34,7 +37,7 @@ public class SysRegisterController extends BaseController
{
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
{
return error("当前系统没有开启注册功能!");
return error(MessageUtils.message("sysRegister.fail.not.enable.register"));
}
String msg = registerService.register(user);
return StringUtils.isEmpty(msg) ? success() : error(msg);

View File

@@ -3,6 +3,7 @@ package com.fastbee.web.controller.system;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.fastbee.common.utils.MessageUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -104,11 +105,11 @@ public class SysRoleController extends BaseController
{
if (!roleService.checkRoleNameUnique(role))
{
return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
return error(StringUtils.format(MessageUtils.message("role.add.failed.name.exists"), role.getRoleName()));
}
else if (!roleService.checkRoleKeyUnique(role))
{
return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
return error(StringUtils.format(MessageUtils.message("role.add.failed.key.exists"), role.getRoleName()));
}
role.setCreateBy(getUsername());
return toAjax(roleService.insertRole(role));
@@ -128,11 +129,11 @@ public class SysRoleController extends BaseController
roleService.checkRoleDataScope(role.getRoleId());
if (!roleService.checkRoleNameUnique(role))
{
return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
return error(StringUtils.format(MessageUtils.message("role.update.failed.name.exists"), role.getRoleName()));
}
else if (!roleService.checkRoleKeyUnique(role))
{
return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
return error(StringUtils.format(MessageUtils.message("role.update.failed.key.exists"), role.getRoleName()));
}
role.setUpdateBy(getUsername());
@@ -148,7 +149,7 @@ public class SysRoleController extends BaseController
}
return success();
}
return error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
return error(StringUtils.format(MessageUtils.message("role.update.failed"), role.getRoleName()));
}
/**

View File

@@ -0,0 +1,80 @@
package com.fastbee.web.controller.system;
import com.fastbee.common.core.domain.AjaxResult;
import com.fastbee.common.core.controller.BaseController;
import com.fastbee.common.utils.poi.ExcelUtil;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.system.domain.SysTranslate;
import com.fastbee.system.service.ISysTranslateService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* 翻译表管理
*
* @author ruoyi
*/
@Api(tags = "翻译表管理")
@RestController
@RequestMapping("/system/translate")
public class SysTranslateController extends BaseController
{
@Autowired
private ISysTranslateService sysTranslateService;
/**
* 导入翻译列表
*/
@ApiOperation("导入翻译列表")
@PreAuthorize("@ss.hasPermi('system:translate:import')")
@PostMapping("/import")
public AjaxResult importSysTranslate(MultipartFile file, String type, Long productId) throws Exception {
if (null == file) {
return error(MessageUtils.message("import.failed.file.null"));
}
if (StringUtils.isEmpty(type)) {
return error();
}
ExcelUtil<SysTranslate> util = new ExcelUtil<>(SysTranslate.class);
List<SysTranslate> list = util.importExcel(file.getInputStream());
if (CollectionUtils.isEmpty(list)) {
return error(MessageUtils.message("import.failed.data.null"));
}
sysTranslateService.importSysTranslate(list, type, productId);
return success(MessageUtils.message("import.success"));
}
/**
* 导出翻译列表
*/
@ApiOperation("导出翻译列表")
@PreAuthorize("@ss.hasPermi('system:translate:export')")
@PostMapping("/export")
public void export(HttpServletResponse response, SysTranslate sysTranslate, String type, @RequestParam(name = "isSource", required = false, defaultValue = "0") Boolean isSource)
{
if (StringUtils.isEmpty(type)) {
return;
}
List<SysTranslate> list;
if (isSource) {
list = sysTranslateService.selectSourceList(type, sysTranslate.getProductId());
} else {
list = sysTranslateService.selectSysTranslateList(sysTranslate, type);
}
ExcelUtil<SysTranslate> util = new ExcelUtil<>(SysTranslate.class);
util.exportExcel(response, list, "翻译列表");
}
}

View File

@@ -10,6 +10,7 @@ import com.fastbee.common.core.domain.model.LoginUser;
import com.fastbee.common.core.page.TableDataInfo;
import com.fastbee.common.enums.BusinessType;
import com.fastbee.common.exception.ServiceException;
import com.fastbee.common.utils.MessageUtils;
import com.fastbee.common.utils.SecurityUtils;
import com.fastbee.common.utils.StringUtils;
import com.fastbee.common.utils.poi.ExcelUtil;
@@ -160,15 +161,15 @@ public class SysUserController extends BaseController
roleService.checkRoleDataScope(user.getRoleIds());
if (!userService.checkUserNameUnique(user))
{
return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
return error(StringUtils.format(MessageUtils.message("user.add.failed.name.exists"), user.getUserName()));
}
else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
{
return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
return error(StringUtils.format(MessageUtils.message("user.add.failed.phone.exists"), user.getUserName()));
}
else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
{
return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
return error(StringUtils.format(MessageUtils.message("user.add.failed.email.exists"), user.getUserName()));
}
user.setCreateBy(getUsername());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
@@ -189,15 +190,15 @@ public class SysUserController extends BaseController
roleService.checkRoleDataScope(user.getRoleIds());
if (!userService.checkUserNameUnique(user))
{
return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
return error(StringUtils.format(MessageUtils.message("user.update.failed.name.exists"), user.getUserName()));
}
else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
{
return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
return error(StringUtils.format(MessageUtils.message("user.update.failed.phone.exists"), user.getUserName()));
}
else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
{
return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
return error(StringUtils.format(MessageUtils.message("user.update.failed.email.exists"), user.getUserName()));
}
user.setUpdateBy(getUsername());
return toAjax(userService.updateUser(user));
@@ -213,7 +214,7 @@ public class SysUserController extends BaseController
{
if (ArrayUtils.contains(userIds, getUserId()))
{
return error("当前用户不能删除");
return error(MessageUtils.message("user.delete.failed"));
}
return toAjax(userService.deleteUserByIds(userIds));
}

View File

@@ -1,38 +1,429 @@
#错误消息
not.null=* 必须填写
user.jcaptcha.error=验证码错误
user.jcaptcha.expire=验证码已失效
user.not.exists=用户不存在/密码错误
user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
user.password.delete=对不起,您的账号已被删除
user.blocked=用户已封禁,请联系管理员
role.blocked=角色已封禁,请联系管理员
login.blocked=很遗憾访问IP已被列入系统黑名单
user.logout.success=退出成功
#\u9519\u8BEF\u6D88\u606F
not.null=\u5FC5\u987B\u586B\u5199
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548
user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF
user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF
user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21
user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F
user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.logout.success=\u9000\u51FA\u6210\u529F
length.not.valid=长度必须在{min}到{max}个字符之间
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成且必须以非数字开头
user.password.not.valid=* 5-50个字符
user.username.not.valid=2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934
user.password.not.valid=5-50\u4E2A\u5B57\u7B26
user.email.not.valid=邮箱格式错误
user.mobile.phone.number.not.valid=手机号格式错误
user.login.success=登录成功
user.register.success=注册成功
user.notfound=请重新登录
user.forcelogout=管理员强制退出,请重新登录
user.unknown.error=未知错误,请重新登录
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF
user.login.success=\u767B\u5F55\u6210\u529F
user.register.success=\u6CE8\u518C\u6210\u529F
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
##文件上传消息
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB
upload.filename.exceed.length=上传的文件名最长{0}个字符
##\u6743\u9650
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.operate.permission=\u6682\u65e0\u6743\u9650\u64cd\u4f5c\uff01
##权限
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26
upload.success=\u4E0A\u4F20\u6210\u529F
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F
download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D
download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25
download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D
##Dept
dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728
dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728
dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1
dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01
dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664
dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664
dept.invitationCode.is.exists=\u9080\u8bf7\u7801\u5df2\u7ecf\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165
##Dict
dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728
dict.update.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728
##Index
index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002
##Menu
menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728
menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934
menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728
menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934
menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1
menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664
menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664
##Post
post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728
post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728
post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728
post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728
##User
user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5
user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165
user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728
user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728
user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728
user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF
user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C
user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728
user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728
user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728
user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664
user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5
user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE
##Role
role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6
role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728
role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728
role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728
role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728
role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
##Import
import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01
import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01
import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01
import.success=\u5BFC\u5165\u6210\u529F
import.fail=\u5bfc\u5165\u5931\u8d25
##General
success=\u6210\u529F
fail=\u5931\u8D25
query.success=\u67E5\u8BE2\u6210\u529F
operate.success=\u64CD\u4F5C\u6210\u529F
operate.fail=\u64cd\u4f5c\u5931\u8d25
create.success=\u521B\u5EFA\u6210\u529F
create.failed=\u521B\u5EFA\u5931\u8D25
save.success=\u4FDD\u5B58\u6210\u529F
save.failed=\u4FDD\u5B58\u5931\u8D25
authorization.success=\u6388\u6743\u6210\u529F
delete.success=\u5220\u9664\u6210\u529f
delete.fail=\u5220\u9664\u5931\u8d25
bind.success=\u7ed1\u5b9a\u6210\u529f
bind.fail=\u7ed1\u5b9a\u5931\u8d25
unbind.success=\u89e3\u7ed1\u6210\u529f
unbind.fail=\u89e3\u7ed1\u5931\u8d25
captcha.fail=\u9a8c\u8bc1\u7801\u9519\u8bef
import.fail.[{}]=\u5bfc\u5165\u5931\u8d25\uff1a[{}]
only.allow.tenant.config=\u53ea\u5141\u8bb8\u79df\u6237\u914d\u7f6e
password.fail=\u5bc6\u7801\u9519\u8bef
login.success=\u767b\u5f55\u6210\u529f
##Email
email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF
email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001
##Firmware
firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4
##Media
media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E
##Modbus
modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A
modbus.crc.check.abnormal=crc\u6821\u9a8c\u5f02\u5e38
##Netty
netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728
##Runtime
runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A
##Wechat
wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F
wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID
wechat.please.config.open.platform=\u8bf7\u5148\u914d\u7f6e\u5fae\u4fe1\u5f00\u653e\u5e73\u53f0\u79fb\u52a8\u5e94\u7528\u4fe1\u606f
wechat.user.certificate.gain.fail=\u7528\u6237\u51ed\u8bc1\u83b7\u53d6\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\uff01
wechat.please.config.open.platform.mini=\u8bf7\u5148\u914d\u7f6e\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5c0f\u7a0b\u5e8f\u4fe1\u606f\uff01
wechat.user.phone.certificate.gain.fail=\u7528\u6237\u624b\u673a\u53f7\u51ed\u8bc1\u83b7\u53d6\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\uff01
wechat.gain.user.call.certificate.fail=\u83b7\u53d6\u7528\u6237\u8c03\u7528\u51ed\u636e\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\uff01
wechat.gain.user.phone.fail=\u83b7\u53d6\u7528\u6237\u624b\u673a\u53f7\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\uff01
wechat.please.login=\u8bf7\u5148\u767b\u5f55\u540e\u91cd\u8bd5
wechat.please.enter.user.password=\u8bf7\u4f20\u5165\u7528\u6237\u5bc6\u7801
wechat.cancelBind.password.fail=\u5bc6\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165
wechat.please.enter.wechat.user.info=\u8bf7\u4f20\u5165\u5fae\u4fe1\u7528\u6237\u4fe1\u606f
wechat.please.enter.user.certificate=\u8bf7\u4f20\u5165\u7528\u6237\u51ed\u8bc1
wechat.gain.wechat.info.fail=\u83b7\u53d6\u5fae\u4fe1\u4fe1\u606f\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\uff01
wechat.your.wechat.already.bind.other.account=\u60a8\u7684\u5fae\u4fe1\u5df2\u7ed1\u5b9a\u5176\u4ed6\u8d26\u53f7\uff0c\u8bf7\u5148\u4f7f\u7528\u5fae\u4fe1\u767b\u5f55\u89e3\u7ed1\u540e\u91cd\u8bd5
wechat.this.wechat.already.bind.other.account=\u8be5\u5fae\u4fe1\u5df2\u7ed1\u5b9a\u5176\u4ed6\u8d26\u53f7\uff0c\u8bf7\u5148\u4f7f\u7528\u5fae\u4fe1\u767b\u5f55\u89e3\u7ed1\u540e\u91cd\u8bd5\uff01
wechat.please.config.open.platform.web.application.personal.bind.info=\u8bf7\u5148\u914d\u7f6e\u5fae\u4fe1\u5f00\u653e\u5e73\u53f0\u7f51\u7ad9\u5e94\u7528\u4e2a\u4eba\u4e2d\u5fc3\u7ed1\u5b9a\u4fe1\u606f
wechat.you.cancel.or.not.gain.authorization.info=\u60a8\u5df2\u53d6\u6d88\u6388\u6743\u6216\u672a\u83b7\u53d6\u5230\u6388\u6743\u4fe1\u606f
wechat.the.qr.code.has.expired=\u4e8c\u7ef4\u7801\u5df2\u5931\u6548\uff0c\u8bf7\u91cd\u65b0\u70b9\u51fb\u7ed1\u5b9a
wechat.your.account.already.bind.wechat=\u60a8\u7684\u8d26\u53f7\u5df2\u7ed1\u5b9a\u5fae\u4fe1\uff0c\u8bf7\u5148\u89e3\u7ed1
##AuthResource
auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F
##Device
device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A
device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A
device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784
device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907
device.not.select=\u8bf7\u9009\u62e9\u8bbe\u5907
device.serialNumber.not.empty=\u8bbe\u5907\u7f16\u53f7\u4e0d\u80fd\u4e3a\u7a7a
device.delete.fail.please.delete.device.scene=\u8bbe\u5907\u7f16\u53f7\u4e3a[{}]\u7684\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u8bbe\u5907\u4e0b\u7684\u573a\u666f\u8054\u52a8
delete.fail.please.delete.scene.model=\u8bbe\u5907\u7f16\u53f7\u4e3a[{}]\u7684\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u8bbe\u5907\u4e0b\u7684\u573a\u666f\u7ba1\u7406
device.tenant.can.not.bind.exist.device=\u79df\u6237\u4e0d\u5141\u8bb8\u7ed1\u5b9a\u5df2\u5b58\u5728\u7684\u8bbe\u5907\uff0c\u8bbe\u5907\u7f16\u53f7\uff1a[{}]
now.user.belong.device.can.not.repeat.share=\u5f53\u524d\u7528\u6237\u5df2\u62e5\u6709\u8be5\u8bbe\u5907\uff0c\u65e0\u6cd5\u91cd\u590d\u5206\u914d\uff0c\u8bbe\u5907\u7f16\u53f7\uff1a[{}]
device.share.other.user.can.not.share=\u8be5\u8bbe\u5907\u5df2\u88ab\u5206\u914d\u5230\u5176\u4ed6\u7528\u6237\uff0c\u65e0\u6cd5\u91cd\u590d\u5206\u914d\uff0c\u8bbe\u5907\u7f16\u53f7\uff1a[{}]
device.not.exist.add.fail.please.check.product.id.is.correct=\u8bbe\u5907\u4e0d\u5b58\u5728\uff0c\u81ea\u52a8\u6dfb\u52a0\u8bbe\u5907\u65f6\u5931\u8d25\uff0c\u8bf7\u68c0\u67e5\u4ea7\u54c1\u7f16\u53f7\u662f\u5426\u6b63\u786e
device.add.success=\u6dfb\u52a0\u8bbe\u5907\u6210\u529f
device.assignment.fail.dept.not.exist=\u673a\u6784\u4e0d\u5b58\u5728\u6216\u672a\u7ed1\u5b9a\u7ba1\u7406\u5458\uff0c\u8bf7\u8c03\u6574\u540e\u91cd\u8bd5\uff01
device.assignment.fail.dept.admin.not.exist=\u673a\u6784\u7ba1\u7406\u5458\u4e0d\u5b58\u5728
device.assignment.success=\u5206\u914d\u8bbe\u5907\u6210\u529f
device.assignment.fail=\u5206\u914d\u8bbe\u5907\u5931\u8d25
device.recovery.fail.dept.not.exist=\u673a\u6784\u4e0d\u5b58\u5728\u6216\u672a\u7ed1\u5b9a\u7ba1\u7406\u5458\uff0c\u8bf7\u8c03\u6574\u540e\u91cd\u8bd5\uff01
device.recovery.fail.dept.admin.not.exist=\u673a\u6784\u7ba1\u7406\u5458\u4e0d\u5b58\u5728
device.recovery.success=\u56de\u6536\u8bbe\u5907\u6210\u529f
device.recovery.fail=\u56de\u6536\u8bbe\u5907\u5931\u8d25
device.not.exist=\u8bbe\u5907\u4e0d\u5b58\u5728
device.serialNumber.allow.generate.max.number=\u6700\u591a\u53ea\u80fd\u751f\u6210200\u4e2a\uff01
device.insert.fail.device.number.already.exist=\u8bbe\u5907\u7f16\u53f7\uff1a[{}] \u5df2\u7ecf\u5b58\u5728\uff0c\u65b0\u589e\u5931\u8d25
device.insert.fail.device.ip.already.exist=\u8be5\u4e3b\u673aip\u548c\u7aef\u53e3\u5df2\u7ecf\u5b58\u5728\uff0c\u8bbe\u5907\u7f16\u53f7\u4e3a\uff1a[{}]
device.get.mqtt.connection.param.fail=\u83b7\u53d6\u8bbe\u5907mqtt\u8fde\u63a5\u53c2\u6570\u5931\u8d25
device.get.authorization.fail.please.config=\u4ea7\u54c1\u5df2\u542f\u7528\u6388\u6743\uff0c\u83b7\u53d6\u8bbe\u5907\u6388\u6743\u7801\u5931\u8d25\uff0c\u8bf7\u5148\u914d\u7f6e\u6388\u6743\u7801
device.unsupported.authentication.method=\u4f20\u8f93\u534f\u8bae\u4e3aHTTP\uff0c\u8ba4\u8bc1\u65b9\u5f0f\u4ec5\u652f\u6301 Basic \u548c Digest\uff0c\u8bf7\u524d\u5f80\u4ea7\u54c1\u4fee\u6539\u534f\u8bae
device.not.found.by.serial.number=\u6570\u636e\u5e93\u4e2d\u4e0d\u5b58\u5728\u8be5\u8bbe\u5907
device.duplicate.by.serial.number=\u5df2\u5b58\u5728\u76f8\u540c\u8bbe\u5907\u7f16\u53f7\u7684\u6570\u636e
device.restore.success=\u8bbe\u5907\u8fd8\u539f\u6210\u529f
device.restore.fail=\u8bbe\u5907\u8fd8\u539f\u5931\u8d25
product.not.found.by.product.id=\u8bbe\u5907\u6240\u5c5e\u4ea7\u54c1\u5df2\u5220\u9664\uff0c\u8bf7\u5148\u5c06\u4ea7\u54c1\u6062\u590d
device.import.assignment.fail.product.information.is.empty=\u5bfc\u5165\u5931\u8d25\uff0c\u4ea7\u54c1\u4fe1\u606f\u4e3a\u7a7a
device.import.assignment.fail.serialNumber.already.exists=\u4ee5\u4e0b\u8bbe\u5907\u7f16\u53f7[{}]\u5df2\u5b58\u5728\uff0c\u8bf7\u4fee\u6539\u540e\u91cd\u8bd5
device.import.assignment.fail.dept.not.exists=\u673a\u6784\u4e0d\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\u673a\u6784\uff01
device.import.assignment.fail.dept.admin.not.exists=\u673a\u6784\u7ba1\u7406\u5458\u4fe1\u606f\u4e0d\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\u673a\u6784\uff01
device.import.serialNumber.not.comply.national.standard.protocol=\u8bbe\u5907\u7f16\u53f7[{}]\u4e0d\u7b26\u5408\u56fd\u6807\u534f\u8bae\u683c\u5f0f\u8981\u6c42
##DeviceJob
job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E
job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528
job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528
job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528
job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4
job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185
job.add.failed.product.not.modbus.config=\u65b0\u589e\u4efb\u52a1[{}]\u5931\u8d25\uff0c\u8bf7\u5148\u53bb\u4ea7\u54c1\u8fdb\u884cmodbus\u914d\u7f6e
job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E
job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528
job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528
job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528
job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4
job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185
job.update.failed.product.not.modbus.config=\u66f4\u65b0\u4efb\u52a1[{}]\u5931\u8d25\uff0c\u8bf7\u5148\u53bb\u4ea7\u54c1\u8fdb\u884cmodbus\u914d\u7f6e
job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F
##DeviceUser
device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664
##GoviewProject
goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID
goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5
##ThingsModel
things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D
things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D
things.model.update.fail.quote.the.scene.variable.formula.please.delete=\u5f53\u524d\u7269\u6a21\u578b\u88ab\u5f15\u7528\u5230\u573a\u666f\u8fd0\u7b97\u578b\u53d8\u91cf\u7684\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u4fee\u6539\uff0c\u8bf7\u5148\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u4fee\u6539\u64cd\u4f5c\uff01
things.model.delete.fail.quote.the.scene.variable.formula.please.delete=\u5f53\u524d\u7269\u6a21\u578b\u88ab\u5f15\u7528\u5230\u573a\u666f\u8fd0\u7b97\u578b\u53d8\u91cf\u7684\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u5220\u9664\uff0c\u8bf7\u5148\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u5220\u9664\u64cd\u4f5c\uff01
things.model.import.data.exception=\u5bfc\u5165\u6570\u636e\u5f02\u5e38
things.model.register.address.repeat=\u540c\u4e00\u4e2a\u91c7\u96c6\u70b9\u6a21\u677f\u4e0b,\u5bc4\u5b58\u5668\u5730\u5740\u91cd\u590d,\u8bf7\u68c0\u67e5\u5bfc\u5165\u53d8\u91cf\u5bc4\u5b58\u5668\u5730\u5740
##MQTT
mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D
##Oauth
oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken
oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B
oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F
oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A
obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012
##Record
record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A
record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A
record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4
record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6
##ErrorCodeConstants
app.not.found=App \u4E0D\u5B58\u5728
app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528
app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664
app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664
channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728
channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528
channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053
order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728
order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8
order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762
order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F
order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{}
order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E
order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728
order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8
order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C
refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D
refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D
refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355
refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728
refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E
demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728
demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001
demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D
demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001
demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D
demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8
demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E
demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728
demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F
demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D
demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D
device.order.control.no.permission=\u6682\u65e0\u6743\u9650\u64cd\u4f5c\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u5206\u914d\u6307\u4ee4\u6743\u9650\uff01
##sysConfig
sysConfig.add.param.fail.name.exist=\u65b0\u589e\u53c2\u6570[{}]\u5931\u8d25\uff0c\u53c2\u6570\u952e\u540d\u5df2\u5b58\u5728
sysConfig.update.param.fail.name.exist=\u4fee\u6539\u53c2\u6570[{}]\u5931\u8d25\uff0c\u53c2\u6570\u952e\u540d\u5df2\u5b58\u5728
##sysRegister
sysRegister.fail.not.enable.register=\u5f53\u524d\u7cfb\u7edf\u6ca1\u6709\u5f00\u542f\u6ce8\u518c\u529f\u80fd\uff01
##ossDetail
ossDetail.fail.file.not.empty=\u4e0a\u4f20\u6587\u4ef6\u4e0d\u80fd\u4e3a\u7a7a
##notify
sms.send.fail.contact.admin=\u77ed\u4fe1\u53d1\u9001\u5931\u8d25\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01
captcha.has.sent.please.try.again.later=\u9a8c\u8bc1\u7801\u5df2\u53d1\u9001\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5\uff01
not.find.enable.notify.template=\u67e5\u8be2\u4e0d\u5230\u542f\u7528\u7684\u901a\u77e5\u6a21\u677f
not.find.notify.channel=\u67e5\u8be2\u4e0d\u5230\u901a\u77e5\u6e20\u9053
only.can.config.alert.and.not.wechat.mini.notify=\u975e\u7ba1\u7406\u5458\u53ea\u5141\u8bb8\u6dfb\u52a0\u8bbe\u5907\u544a\u8b66\u4e1a\u52a1\u5e76\u4e14\u975e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u7684\u6a21\u677f\uff01
notify.can.not.not.alert.and.wechat.mini.status=\u975e\u7ba1\u7406\u5458\u53ea\u80fd\u66f4\u6539\u8bbe\u5907\u544a\u8b66\u4e1a\u52a1\u5e76\u4e14\u975e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u7684\u6a21\u677f\u72b6\u6001\uff01
##dataCenter
please.select.device=\u8bf7\u9009\u62e9\u8bbe\u5907
please.incoming.serialNumber=\u8bf7\u4f20\u5165\u8bbe\u5907\u7f16\u53f7
##license
certificate.install.success=\u8bc1\u4e66\u5b89\u88c5\u6210\u529f
certificate.install.fail=\u8bc1\u4e66\u5b89\u88c5\u5931\u8d25:[{}]
certificate.incoming.success=\u8bc1\u4e66\u4e0a\u4f20\u6210\u529f
certificate.incoming.fail=\u8bc1\u4e66\u4e0a\u4f20\u5931\u8d25
certificate.upload.success=\u8bc1\u4e66\u4e0a\u4f20\u6210\u529f
certificate.upload.fail=\u8bc1\u4e66\u4e0a\u4f20\u5931\u8d25:[{}]
##sceneModel
please.incoming.scene.id=\u8bf7\u4f20\u5165\u573a\u666fid
please.incoming.device.config.number=\u8bf7\u4f20\u5165\u5173\u8054\u8bbe\u5907\u914d\u7f6e\u7684\u5e8f\u53f7
sceneModel.please.introduced.id=\u8bf7\u4f20\u5165\u573a\u666f\u7ba1\u7406id
sceneModel.current.variable.quote.operate.variable.formula.please.delete=\u5f53\u524d\u53d8\u91cf\u88ab\u5f15\u7528\u5230\u573a\u666f\u8fd0\u7b97\u578b\u53d8\u91cf\u7684\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u5220\u9664\uff0c\u8bf7\u5148\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u5220\u9664\u64cd\u4f5c\uff01
sceneModel.scene.already.bind.device=\u573a\u666f\u5df2\u7ed1\u5b9a\u8be5\u8bbe\u5907\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\uff01
sceneModel.update.fail.device.variable.has.quote.scene.variable.please.delete=\u5f53\u524d\u8bbe\u5907\u4e0b\u5b58\u5728\u53d8\u91cf\u88ab\u5f15\u7528\u5230\u8fd0\u7b97\u578b\u53d8\u91cf\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u4fee\u6539\uff0c\u8bf7\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u4fee\u6539\u64cd\u4f5c\uff01
sceneModel.delete.fail.device.variable.has.quote.scene.variable.please.delete=\u5f53\u524d\u8bbe\u5907\u4e0b\u5b58\u5728\u53d8\u91cf\u88ab\u5f15\u7528\u5230\u8fd0\u7b97\u578b\u53d8\u91cf\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u5220\u9664\uff0c\u8bf7\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u5220\u9664\u64cd\u4f5c\uff01
sceneModel.formula.cannot.empty=\u8ba1\u7b97\u516c\u5f0f\u4e0d\u80fd\u4e3a\u7a7a\uff01
sceneModel.variable.cannot.empty=\u53d8\u91cf\u4e0d\u80fd\u4e3a\u7a7a\uff01
sceneModel.formula.and.variable.number.inconsistent=\u8ba1\u7b97\u516c\u5f0f\u548c\u53d8\u91cf\u4e2a\u6570\u4e0d\u4e00\u81f4\uff0c\u8bf7\u68c0\u67e5\u540e\u91cd\u8bd5
sceneModel.update.fail.variable.name.exist=\u53d8\u91cf\u540d\u79f0\u5df2\u5b58\u5728\uff0c\u8bf7\u4fee\u6539\u540e\u91cd\u8bd5\uff01
sceneModel.device.not.belong.current.tenant=\u8bf7\u5148\u628a\u8bbe\u5907\u914d\u7f6e\u7684\u6240\u6709\u8bbe\u5907\u5206\u914d\u7ed9\u5f53\u524d\u573a\u666f\u914d\u7f6e\u7684\u6240\u5c5e\u673a\u6784\uff0c\u624d\u53ef\u8fdb\u884c\u64cd\u4f5c\uff01
##oauthClientDetail
add.fail.same.client.can.config.one=\u540c\u4e00\u4e2a\u6388\u6743\u5e73\u53f0\u53ea\u80fd\u914d\u7f6e\u4e00\u6761\u4fe1\u606f\uff0c\u8bf7\u52ff\u91cd\u590d\u914d\u7f6e
client.id.is.exist=\u5ba2\u6237\u7aefid\uff1a[{}]\u5df2\u5b58\u5728\u6216\u5df2\u88ab\u5176\u4ed6\u79df\u6237\u4f7f\u7528
oauthClientDetail.client.not.exist=oauth2 \u5ba2\u6237\u7aef\u4e0d\u5b58\u5728
oauthClientDetail.client.disabled=oauth2 \u5ba2\u6237\u7aef\u5df2\u7981\u7528
oauthClientDetail.invalid.client.set=\u65e0\u6548 client_secret
oauthClientDetail.invalid.redirects=\u65e0\u6548 redirect_uri\uff1a[{}]
##category
delete.fail.please.delete.category.product=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u5206\u7c7b\u4e0b\u7684\u4ea7\u54c1
##goviewProjectData
only.allow.select.operate=\u53ea\u5141\u8bb8select\u64cd\u4f5c\uff0c\u7981\u6b62update\u3001delete\u3001insert\u64cd\u4f5c
##newsCategory
newsCategory.delete.fail.please.delete.category.info=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u5206\u7c7b\u4e0b\u7684\u65b0\u95fb\u8d44\u8baf
##product
delete.fail.please.delete.firmware=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u4ea7\u54c1\u4e0b\u7684\u56fa\u4ef6
delete.fail.please.delete.product.device=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u4ea7\u54c1\u4e0b\u7684\u8bbe\u5907
delete.fail.please.delete.product.scene=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u4fee\u6539\u6216\u5220\u9664\u5bf9\u5e94\u4ea7\u54c1\u4e0b\u7684\u573a\u666f\u8054\u52a8\uff1a[{}]
product.status.update.fail.value.fail=\u72b6\u6001\u66f4\u65b0\u5931\u8d25,\u72b6\u6001\u503c\u6709\u8bef
product.status.update.fail=\u72b6\u6001\u66f4\u65b0\u5931\u8d25
restore.product.fail=\u5f53\u524d\u4ea7\u54c1\u672a\u67e5\u8be2\u5230
product.name.is.not.empty=\u8bf7\u8f93\u5165\u4ea7\u54c1\u540d\u79f0
product.import.categoryId.is.fail=\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u4ea7\u54c1\u5206\u7c7b\u7f16\u53f7categoryid
##socialLogin
bind.account.not.exist=\u7ed1\u5b9a\u8d26\u6237\u4e0d\u5b58\u5728
socialLogin.verify.has.expired=\u9a8c\u8bc1\u7801\u5df2\u5931\u6548\uff0c\u8bf7\u91cd\u65b0\u83b7\u53d6
socialLogin.platform.type.fail=\u9519\u8bef\u5e73\u53f0\u7c7b\u578b
user.account.and.bind.account.not.match=\u7528\u6237\u8d26\u6237\u548c\u7ed1\u5b9a\u8d26\u6237\u4e0d\u5339\u914d
socialLogin.user.not.exist=\u7528\u6237\u4e0d\u5b58\u5728
socialLogin.bind.end.user.cannot.login.web=\u8bf7\u52ff\u7ed1\u5b9a\u7ec8\u7aef\u7528\u6237\uff0c\u7ed1\u5b9a\u7ec8\u7aef\u7528\u6237\u540e\u4e0d\u53ef\u767b\u5f55web\u7aef
socialLogin.account.already.bind.other.wechat.please.unbind=\u8be5\u8d26\u53f7\u5df2\u7ecf\u7ed1\u5b9a\u5176\u4ed6\u5fae\u4fe1\uff0c\u8bf7\u5148\u89e3\u7ed1\u540e\u91cd\u8bd5\uff01
socialLogin.register.fail.please.check.role.exist=\u6ce8\u518c\u5931\u8d25,\u8bf7\u8054\u7cfb\u7ba1\u7406\u4eba\u5458\u68c0\u67e5\u673a\u6784\u89d2\u8272\u662f\u5426\u5b58\u5728
socialLogin.web.not.allow.end.user.login=web\u7aef\u4e0d\u5141\u8bb8\u7ec8\u7aef\u7528\u6237\u767b\u5f55
socialLogin.register.fail.please.check.invitationCode.exist=\u9080\u8bf7\u7801\u9519\u8bef\uff0c\u8bf7\u8054\u7cfb\u673a\u6784\u7ba1\u7406\u5458\u6838\u5bf9
The.organization.to.which.your.account.belongs.has.been.suspended.Please.contact.the.administrator=\u4f60\u7684\u8d26\u53f7\u6240\u5c5e\u673a\u6784\u5df2\u88ab\u505c\u7528\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01
default.institution.has.been.deactivated.contact.administrator=\u9ed8\u8ba4\u673a\u6784\u5df2\u88ab\u505c\u7528\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01
##alert
alert.push.fail.device.not.exist=\u544a\u8b66\u63a8\u9001\uff0c\u8bbe\u5907\u4e0d\u5b58\u5728\uff1a[{}]
##modbus
not.modbus.protocol.please.config.collect.protocol=\u975emodbus\u534f\u8bae\u8bf7\u5148\u914d\u7f6e\u4e3b\u52a8\u91c7\u96c6\u534f\u8bae
modbus.point.not.config=\u672a\u914d\u7f6emodbus\u70b9\u4f4d
##ota
firmwareTask.add.fail.FirmwareTask.exist=\u4efb\u52a1\uff1a[{}]\u5df2\u5b58\u5728
firmware.version.not.exist=\u56fa\u4ef6\u7248\u672c\u4e0d\u5b58\u5728%21
##mqttMessage
mqtt.service.send.device.not.exist=\u670d\u52a1\u4e0b\u53d1\u7684\u8bbe\u5907\uff1a[{}]\u4e0d\u5b58\u5728
mqtt.disconnect.occur.fail=\u65ad\u5f00mqtt\u8fde\u63a5\u53d1\u751f\u9519\u8bef\uff1a[{}]
##genTable
genTable.template.rendering.fail=\u5bfc\u5165\u5931\u8d25\uff1a[{}]
genTable.data.sync.fail.original.table.not.exist=\u540c\u6b65\u6570\u636e\u5931\u8d25\uff0c\u539f\u8868\u7ed3\u6784\u4e0d\u5b58\u5728
genTable.tree.code.field.cannot.empty=\u6811\u7f16\u7801\u5b57\u6bb5\u4e0d\u80fd\u4e3a\u7a7a
genTable.tree.parent.code.field.cannot.empty=\u6811\u7236\u7f16\u7801\u5b57\u6bb5\u4e0d\u80fd\u4e3a\u7a7a
genTable.tree.name.field.cannot.empty=\u6811\u540d\u79f0\u5b57\u6bb5\u4e0d\u80fd\u4e3a\u7a7a
genTable.relate.child.table.name.cannot.empty=\u5173\u8054\u5b50\u8868\u7684\u8868\u540d\u4e0d\u80fd\u4e3a\u7a7a
genTable.child.table.relate.foreign.key.name.cannot.empty=\u5b50\u8868\u5173\u8054\u7684\u5916\u952e\u540d\u4e0d\u80fd\u4e3a\u7a7a
##oauthCode
oauthCode.code.not.exist=code \u4e0d\u5b58\u5728
##protocol
protocol.input.content.is.empty=\u8f93\u5165\u5185\u5bb9\u4e3a\u7a7a
protocol.data.parse.error=\u6570\u636e\u89e3\u6790\u51fa\u9519[{}]
protocol.data.parse.exception=\u6570\u636e\u89e3\u6790\u5f02\u5e38[{}]
protocol.instruction.number.exception=\u6307\u4ee4\u7f16\u53f7\u5f02\u5e38\uff1a[{}]
##modbusJob
modbusJob.add.fail.please.bind.gateway=\u8bf7\u5148\u7ed1\u5b9a\u7f51\u5173
thingsModel.array.or.object.no.need.update=\u6682\u65e0\u9700\u8981\u66f4\u65b0\u7684\u6570\u7ec4\u3001\u5bf9\u8c61\u7c7b\u7269\u6a21\u578b
sync.fail.please.try.again=\u540c\u6b65\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\uff01
sync.success=\u540c\u6b65\u6210\u529f
## scada
scada.product.id.is.null=\u4ea7\u54c1id\u4e3a\u7a7a
scada.scene.id.is.null=\u573a\u666fid\u4e3a\u7a7a
scada.guid.cannot.empty=guid\u4e0d\u80fd\u4e3a\u7a7a
scada.base64.change.image.exception=\u7ec4\u6001base64\u8f6c\u56fe\u7247\u5f02\u5e38:[{}]
scada.please.select.device=\u8bf7\u9009\u62e9\u8bbe\u5907
scada.please.enter.password=\u8bf7\u8f93\u5165\u5bc6\u7801\uff01
scada.please.login=\u672a\u767b\u5f55\uff0c\u8bf7\u767b\u5f55\u540e\u91cd\u8bd5
scada.password.fail.please.reload.enter=\u5bc6\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\uff01
scada.product.has.relate.please.select.again=\u8be5\u4ea7\u54c1\u5df2\u7ecf\u5173\u8054\u7ec4\u6001\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\uff01
scada.scene.has.relate.please.select.again=\u8be5\u573a\u666f\u5df2\u7ecf\u5173\u8054\u7ec4\u6001\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\uff01
scada.not.allow.view.other.tenant.config=\u4e0d\u5141\u8bb8\u67e5\u770b\u5176\u4ed6\u79df\u6237\u7684\u7ec4\u6001\uff01
scada.upload.gallery.file.fail=\u4e0a\u4f20\u56fe\u5e93\u6587\u4ef6\u5f02\u5e38\uff0c[{}]
scada.upload.fail=\u4e0a\u4f20\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\uff01
scada.invalid.profile=\u65e0\u6548\u7684\u914d\u7f6e\u6587\u4ef6
scada.import.success.need.replace.variable=\u5bfc\u5165\u6210\u529f\uff0c\u5f53\u524d\u9875\u9762\u9700\u8981\u91cd\u65b0\u66ff\u6362\u7ed1\u5b9a\u7ec4\u4ef6\u7684\u53d8\u91cf\uff01
## speaker
speaker.product.has.relate=\u8be5\u4ea7\u54c1\u5df2\u5173\u8054\uff0c\u8bf7\u52ff\u91cd\u590d\u5173\u8054
speaker.product.relate.add.fail=\u65b0\u589e\u5931\u8d25
speaker.not.found.product.relate=\u672a\u67e5\u8be2\u5230\u4ea7\u54c1\u5173\u8054\u4fe1\u606f
##file
file.content.is.empty=\u6587\u4ef6\u5185\u5bb9\u4e3a\u7a7a
file.is.invalid=\u65e0\u6548\u7684\u6587\u4ef6
## workOrder
workOrder.please.select.user=\u8bf7\u6307\u5b9a\u8054\u7cfb\u4eba
workOrder.please.fill.result.info=\u8bf7\u586b\u5199\u7ed3\u5355\u4fe1\u606f
## subGateway
subGateway.subDeviceAddress.is.repeat=\u5b58\u5728\u76f8\u540c\u7684\u5b50\u8bbe\u5907\u5730\u5740\uff0c\u8bf7\u4fee\u6539\u540e\u91cd\u8bd5\uff01

View File

@@ -0,0 +1,429 @@
#\u9519\u8BEF\u6D88\u606F
not.null=Required
user.jcaptcha.error=The verification code is incorrect
user.jcaptcha.expire=The verification code has expired
user.not.exists=User does not exist/password is incorrect
user.password.not.match=User does not exist/password is incorrect
user.password.retry.limit.count=The password was entered incorrectly {0} times
user.password.retry.limit.exceed=The password was entered incorrectly {0} times and the account was locked for {1} minutes
user.password.delete=Sorry, your account has been deleted
user.blocked=The user has been blocked, please contact the administrator
role.blocked=The role has been banned, contact the administrator
user.logout.success=The exit was successful
length.not.valid=The length must be between {min} and {max} characters
user.username.not.valid=Consists of 2 to 20 characters, letters, numbers, or underscores and must start with a non-number
user.password.not.valid=5-50 characters
user.email.not.valid=The mailbox is malformed
user.mobile.phone.number.not.valid=The phone number is in the wrong format
user.login.success=Login successful
user.register.success=Registration is successful
user.notfound=Please log in again
user.forcelogout=The administrator forcibly logs out, please log back in
user.unknown.error=Unknown error, please log back in
##\u6743\u9650
no.permission=You don't have permissions for data, contact your administrator to add permissions [{0}]
no.create.permission=You do not have permission to create data, please contact your administrator to add permission [{0}]
no.update.permission=You do not have permission to modify the data, please contact the administrator to add permission [{0}]
no.delete.permission=You do not have permission to delete data, please contact your administrator to add permission [{0}]
no.export.permission=You do not have permission to export data, please contact your administrator to add permission [{0}]
no.view.permission=You do not have permission to view the data, please contact your administrator to add permission [{0}]
no.operate.permission=You do not have the permission to perform this operation!
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F
upload.exceed.maxSize=The uploaded file size exceeds the limit file size! <br/>The maximum file size allowed is: {0}MB!
upload.filename.exceed.length=The uploaded file name can be up to {0} characters
upload.success=The upload is successful
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F
download.filename.not.valid=The file name [{}] is illegal and is not allowed to be downloaded
download.file.failed=Failed to download the file
download.resource.not.valid=The resource file [{}] is illegal and is not allowed to be downloaded
##Dept
dept.add.failed.name.exists=Failed to add organization [{}], and the organization name already exists
dept.update.failed.name.exists=Failed to modify organization [{}], and the organization name already exists
dept.update.failed.parent.not.valid=If the modification of the organization [{}] fails, the parent organization cannot be itself
dept.update.failed.child.not.valid=The agency contains sub-institutions that are not deactivated!
dept.delete.failed.child.exists=There are subordinate organizations and deletion is not allowed
dept.delete.failed.user.exists=If there are users in the organization, you cannot delete them
dept.invitationCode.is.exists=The invitation code already exists, please re-enter it
##Dict
dict.add.failed.type.exists=Failed to add dictionary [{}], the dictionary type already exists
dict.update.failed.type.exists=Failed to modify dictionary [{}], the dictionary type already exists
##Index
index.welcome.message=Welcome to the {} backend management framework, the current version: v{}, please access it through the front-end address.
##Menu
menu.add.failed.name.exists=Failed to add a new menu [{}], the menu name already exists
menu.add.failed.path.not.valid=Failed to add a new menu [{}] with an address starting with http(s)://
menu.update.failed.name.exists=Failed to modify menu [{}], menu name already exists
menu.update.failed.path.not.valid=Failed to modify menu [{}] with address starting with http(s)://
menu.update.failed.parent.not.valid=Failed to modify the menu [{}], the parent menu cannot select itself
menu.delete.failed.child.exists=A submenu exists and cannot be deleted
menu.delete.failed.role.exists=Menu is assigned and is not allowed to be deleted
##Post
post.add.failed.name.exists=Failed to add a new post [{}], and the job name already exists
post.add.failed.code.exists=Failed to add a new post [{}], and the post code already exists
post.update.failed.name.exists=Failed to modify the post [{}], the post name already exists
post.update.failed.code.exists=Failed to modify post [{}], the post code already exists
##User
user.username.exists=The system account name already exists, please modify it and try again
user.password.differ=The password is inconsistent twice, please re-enter it
user.add.failed.name.exists=The new user [{}] failed, and the login account already exists
user.add.failed.phone.exists=Failed to add user [{}], and the mobile phone number already exists
user.add.failed.email.exists=Failed to add user [{}], the email account already exists
user.update.failed.password.wrong=Failed to change the password, the old password is incorrect
user.update.failed.password.repeat=The new password cannot be the same as the old password
user.update.password.failed=If the password is abnormal, contact the administrator
user.update.failed.name.exists=The new user [{}] failed, and the login account already exists
user.update.failed.phone.exists=Failed to modify user [{}], mobile phone number already exists
user.update.failed.email.exists=Failed to modify user [{}], and the email account already exists
user.update.failed=If the personal information is abnormal, contact the administrator
user.delete.failed=The current user cannot be deleted
user.upload.avatar.failed=If the uploaded image is abnormal, contact the administrator
user.not.login=Please log in and try again
user.access.denied=Access denied by the user
##Role
role.add.manager.failed=Administrator role identity is not allowed
role.add.failed.name.exists=Failed to add a role [{}], the name of the role already exists
role.add.failed.key.exists=Failed to add a role [{}], and the role permissions already exist
role.update.failed.name.exists=Failed to modify the role [{}], the role name already exists
role.update.failed.key.exists=Failed to modify the role [{}], and the role permissions already exist
role.update.failed=Failed to modify the role [{}], contact the administrator
##Import
import.failed.file.null=Failed to import, please upload the file first!
import.failed.data.null=Failed to import, imported data is empty!
import.failed.device.name.null=Failed to import, the device name in the template cannot be empty!
import.success=The import is successful
import.fail=The import failed
##General
success=success
fail=failed
query.success=The query succeeds
operate.success=The operation succeeded
operate.fail=The operation failed
create.success=The creation is successful
create.failed=Failed to create
save.success=Save successfully
save.failed=Failed to save
authorization.success=Authorization succeeded
delete.success=Delete successfully
delete.fail=Delete failed
bind.success=Binding successful
bind.fail=Binding failed
unbind.success=Unbind successfully
unbind.fail=Unbinding failed
captcha.fail=Verification code error
import.fail.[{}]=Import failed: [{}]
only.allow.tenant.config=Only allow tenant configuration
password.fail=Password error
login.success=Login succeeded
##Email
email.format.error=The email address is malformed
email.verification.code.send=Email verification code sent
##Firmware
firmware.task.upgrade.failed.time.not.valid=The scheduled upgrade time should be greater than the current time
##Media
media.record.query.failed=The connection timed out or an error occurred and no data was obtained
##Modbus
modbus.type.null=type is empty
modbus.crc.check.abnormal=CRC check abnormal
##Netty
netty.client.not.exists=The client does not exist
##Runtime
runtime.message.id.null=The message id is empty
##Wechat
wechat.verify.type.null=Please specify the verification method
wechat.bind.message.id.null=Please pass in the binding information ID
wechat.please.config.open.platform=Please configure WeChat Open Platform mobile application information first
wechat.user.certificate.gain.fail=Failed to obtain user credentials, please log in again!
wechat.please.config.open.platform.mini=Please configure WeChat public platform mini program information first!
wechat.user.phone.certificate.gain.fail=Failed to obtain user's mobile phone number credentials, please log in again!
wechat.gain.user.call.certificate.fail=Failed to obtain user call credentials, please log in again!
wechat.gain.user.phone.fail=Failed to obtain user phone number, please log in again!
wechat.please.login=Please log in first and try again
wechat.please.enter.user.password=Please enter the user password
wechat.cancelBind.password.fail=Password error, please re-enter
wechat.please.enter.wechat.user.info=Please provide WeChat user information
wechat.please.enter.user.certificate=Please provide user credentials
wechat.gain.wechat.info.fail=Failed to obtain WeChat information, please try again!
wechat.your.wechat.already.bind.other.account=Your WeChat account has already been linked to another account. Please log in and unbind it using WeChat first, and then try again
wechat.this.wechat.already.bind.other.account=This WeChat account has already been linked to another account. Please log in and unbind it using WeChat first, and then try again!
wechat.please.config.open.platform.web.application.personal.bind.info=Please first configure the WeChat Open Platform website application personal center binding information
wechat.you.cancel.or.not.gain.authorization.info=You have cancelled authorization or have not obtained authorization information
wechat.the.qr.code.has.expired=The QR code has expired, please click bind again
wechat.your.account.already.bind.wechat=Your account has been linked to WeChat, please unbind it first
##AuthResource
auth.resource.product.query.success=The product list was queried
##Device
device.user.id.null=User ID cannot be empty
device.product.id.null=Device number and product ID cannot be empty
device.dept.id.null=Select Allocation Authority
device.id.null=Select a device
device.not.select=Please select a device
device.serialNumber.not.empty=The device number cannot be empty
device.delete.fail.please.delete.device.scene=If the device ID [{}] fails, delete the scene linkage under the corresponding device
delete.fail.please.delete.scene.model=If the device ID [{}] fails, delete the sceneModel linkage under the corresponding device
device.tenant.can.not.bind.exist.device=Tenants are not allowed to bind existing devices, device number: [{}]
now.user.belong.device.can.not.repeat.share=The current user already owns the device and cannot be reassigned. Device ID: [{}]
device.share.other.user.can.not.share=This device has already been assigned to another user and cannot be duplicated. Device ID: [{}]
device.not.exist.add.fail.please.check.product.id.is.correct=The device does not exist, automatic device addition failed, please check if the product number is correct
device.add.success=Device added successfully
device.assignment.fail.dept.not.exist=The institution does not exist or is not bound to an administrator. Please adjust and try again!
device.assignment.fail.dept.admin.not.exist=Institution administrator does not exist
device.assignment.success=Equipment allocation successful
device.assignment.fail=Equipment allocation failed
device.recovery.fail.dept.not.exist=The institution does not exist or is not bound to an administrator. Please adjust and try again!
device.recovery.fail.dept.admin.not.exist=Institution administrator does not exist
device.recovery.success=Successful recycling of equipment
device.recovery.fail=Recycling device failed
device.not.exist=The device does not exist
device.serialNumber.allow.generate.max.number=Only up to 200 can be generated!
device.insert.fail.device.number.already.exist=Device number: [{}] already exists, adding failed
device.insert.fail.device.ip.already.exist=The host IP and port already exist, and the device number is: [{}]
device.get.mqtt.connection.param.fail=Failed to retrieve device MQTT connection parameters
device.get.authorization.fail.please.config=The product has enabled authorization, but obtaining the device authorization code has failed. Please configure the authorization code first
device.unsupported.authentication.method=Device authentication method not supported
device.not.found.by.serial.number=Device not found
device.duplicate.by.serial.number=Device already exists
device.restore.success=Device restored successfully
device.restore.fail=Device restoration failed
product.not.found.by.product.id=Product not found
device.import.assignment.fail.product.information.is.empty=Import failed, product information is empty
device.import.assignment.fail.serialNumber.already.exists=The following device number [{}] already exists. Please modify it and try again
device.import.assignment.fail.dept.not.exists=The institution does not exist. Please select another institution!
device.import.assignment.fail.dept.admin.not.exists=The institution administrator information does not exist. Please select an institution again!
device.import.serialNumber.not.comply.national.standard.protocol=The device number [{}] does not comply with the format requirements of the national standard protocol
##DeviceJob
job.add.failed.cron.not.valid=Failed to add task [{}] with incorrect Cron expression
job.add.failed.rmi.not.valid=The new task [{}] failed, and 'rmi' is not allowed to be called on the target string
job.add.failed.ldap.not.valid=The new task [{}] failed, and 'ldap(s)' cannot be called as the target string
job.add.failed.http.not.valid=The new task [{}] failed, and the target string does not allow 'http(s)' to be called
job.add.failed.string.error=The new task [{}] has failed, and the target string has been violated
job.add.failed.string.not.valid=The new task [{}] failed, and the destination string is not in the whitelist
job.add.failed.product.not.modbus.config=Failed to add task [{}], please go to the product to configure modbus first
job.update.failed.cron.not.valid=Task [{}] failed to be modified, and the Cron expression is incorrect
job.update.failed.rmi.not.valid=Task [{}] failed, and 'rmi' is not allowed to be called by the target string
job.update.failed.ldap.not.valid=Modify task [{}] failed, and 'ldap(s)' is not allowed to be called as the target string
job.update.failed.http.not.valid=Modify task [{}] failed, and 'http(s)' is not allowed to be called to the target string
job.update.failed.string.error=Task [{}] has failed to be modified, and the target string has been violated
job.update.failed.string.not.valid=Task [{}] has failed to be modified, and the destination string is not in the whitelist
job.update.failed.product.not.modbus.config=Update task [{}] failed, please go to the product to configure modbus
job.not.exists=The task does not exist or has expired
##DeviceUser
device.user.delete.failed.user.not.valid=Device owner cannot be deleted
##GoviewProject
goview.project.data.save.failed.id.null=There is no project ID
goview.project.data.execute.sql.failed=Write an SQL statement
##ThingsModel
things.model.identifier.repeat=The identifier under the product cannot be repeated
things.model.import.failed.identifier.repeat=[{}] data is not imported, and the identifier is duplicated
things.model.update.fail.quote.the.scene.variable.formula.please.delete=The current object model is referenced to the calculation formula of the scene operation variable and cannot be modified. Please delete the reference relationship before performing the modification operation!
things.model.delete.fail.quote.the.scene.variable.formula.please.delete=The current object model is referenced to the calculation formula of the scene operation variable and cannot be deleted. Please delete the reference relationship before performing the deletion operation!
things.model.import.data.exception=Import data exception
things.model.register.address.repeat=Under the same collection point template, there are duplicate register addresses. Please check the imported variable register addresses
##MQTT
mqtt.unauthorized=mqtt account and password do not match the configuration of the authentication server
##Oauth
oauth.response.type.not.valid=response_type parameter values allow only code and token
oauth.grant.type.null=Unknown grant type
The oauth.grant.type.implicit.not.support=Token operation does not support implicit authorization mode
oauth.access.token.null=Access token cannot be empty
obtain.basic.authorization.failed=client_id or client_secret is not delivered correctly
##Record
record.app.null=app cannot be empty
record.stream.null=stream cannot be empty
record.time.not.valid=Wrong start time or end time
record.file.null=No video file found
##ErrorCodeConstants
app.not.found=App does not exist
app.is.disable=App has been disabled
app.exist.order.cant.delete=A payment order exists in the payment application and cannot be deleted
app.exist.refund.cant.delete=A refund order exists in the payment app and cannot be deleted
channel.not.found=The configuration of the payment channel does not exist
channel.is.disable=Payment channel is disabled
channel.exists.same.channel.error=The same channel already exists
order.not.found=The payment order does not exist
order.status.is.not.waiting=The paid order is not pending payment
order.status.is.success=Order has been paid, please refresh the page
order.is.expired=The payment order has expired
order.submit.channel.error=Error message is reported for initiating payment, error code: {}, error message: {}
order.refund.fail.status.error=Failed to refund the paid order due to the fact that the status is not Paid or Refunded
order.extension.not.found=The payment transaction extension does not exist
order.extension.status.is.not.waiting=The payment transaction extension order is not pending payment
order.extension.is.paid=The order has been paid, please wait for the payment result
refund.price.exceed=The amount refunded exceeds the amount of the order that can be refunded
refund.has.refunding=A refund is already being processed
refund.exists=A refund ticket already exists
refund.not.found=Payment Refund Form Does Not Exist
refund.statue.is.not.waiting=Payment of a refund receipt is not pending refund
demo.order.not.found=The sample order does not exist
demo.order.update.paid.status.not.unpaid=Example: Failed to update payment status of order, order is not in unpaid status
demo.order.update.paid.fail.pay.order.id.error=Failed to update the payment status of the sample order, and the payment slip number does not match
demo.order.update.paid.fail.pay.order.status.not.success=Example: Failed to update the payment status of the order, and the status of the payment slip is not [Payment Successful].
demo.order.update.paid.fail.pay.price.not.match=Failed to update the payment status of the sample order, and the payment order amount does not match
demo.order.refund.fail.not.paid=Failed to initiate a refund, but the sample order has not been paid
demo.order.refund.fail.refunded=Failed to initiate a refund, the sample order has been refunded
demo.order.refund.fail.refund.not.found=Failed to initiate a refund, but the refund order does not exist
demo.order.refund.fail.refund.not.success=Failed to initiate a refund, but the order was not refunded
demo.order.refund.fail.refund.order.id.error=Failed to initiate a refund, and the refund order number does not match
demo.order.refund.fail.refund.price.not.match=Failed to initiate a refund, and the amount of the refund order does not match
device.order.control.no.permission=There is no permission to operate, please contact the administrator to assign command permissions!
##sysConfig
sysConfig.add.param.fail.name.exist=Failed to add parameter [{}], the parameter key name already exists
sysConfig.update.param.fail.name.exist=Parameter [{}] failed, and the parameter key name already exists
##sysRegister
sysRegister.fail.not.enable.register=The current system does not have the registration function enabled!
##ossDetail
ossDetail.fail.file.not.empty=The uploaded file cannot be empty
##notify
sms.send.fail.contact.admin=SMS sending failed, please contact the administrator!
captcha.has.sent.please.try.again.later=The verification code has been sent, please try again later!
not.find.enable.notify.template=Unable to find enabled notification templates
not.find.notify.channel=Unable to find notification channel
only.can.config.alert.and.not.wechat.mini.notify=Non-administrators are only allowed to add device alarm services and templates that are not WeChat Mini Programs!
notify.can.not.not.alert.and.wechat.mini.status=Non-administrators can only change the template status of the device alarm service and non-WeChat Mini Program!
##dataCenter
please.select.device=Please select a device
please.incoming.serialNumber=Please pass in the device number
##license
certificate.install.success=The certificate is successfully installed
certificate.install.fail=Certificate installation failed:[{}]
certificate.incoming.success=The certificate is successfully uploaded
certificate.incoming.fail=The certificate upload failed
certificate.upload.success=The certificate is successfully uploaded
certificate.upload.fail=Certificate upload failed:[{}]
##sceneModel
please.incoming.scene.id=Please pass in the scene ID
please.incoming.device.config.number=Enter the serial number of the associated device configuration
sceneModel.please.introduced.id=Please enter the scene management ID
sceneModel.current.variable.quote.operate.variable.formula.please.delete=The current variable is referenced to the calculation formula of the scene operation variable and cannot be deleted. Please delete the reference relationship before performing the deletion operation!
sceneModel.scene.already.bind.device=The scene has already been bound to this device, please select again!
sceneModel.update.fail.device.variable.has.quote.scene.variable.please.delete=There are variables in the current device that are referenced to the calculation formula of operational variables and cannot be modified. Please delete the reference relationship before performing the modification operation!
sceneModel.delete.fail.device.variable.has.quote.scene.variable.please.delete=There are variables under the current device that are referenced to the calculation formula of operational variables and cannot be deleted. Please delete the reference relationship before performing the deletion operation!
sceneModel.formula.cannot.empty=The calculation formula cannot be empty!
sceneModel.variable.cannot.empty=The variable cannot be empty!
sceneModel.formula.and.variable.number.inconsistent=The calculation formula and the number of variables are inconsistent. Please check and try again
sceneModel.update.fail.variable.name.exist=The variable name already exists, please modify it and try again!
sceneModel.device.not.belong.current.tenant=Please allocate all devices configured in the device configuration to the organization specified in the current scene configuration before proceeding with the operation!
##oauthClientDetail
add.fail.same.client.can.config.one=Only one piece of information can be configured on the same authorization platform, please do not configure it again
client.id.is.exist=Client ID: [{}] Already exists or is already in use by another tenant
oauthClientDetail.client.not.exist=OAuth2 client does not exist
oauthClientDetail.client.disabled=OAuth2 client disabled
oauthClientDetail.invalid.client.set=Invalid client set
oauthClientDetail.invalid.redirects=Invalid redirects: [{}]
##category
delete.fail.please.delete.category.product=Delete failed, please delete the products under the corresponding category first
##goviewProjectData
only.allow.select.operate=Only allow select operation, prohibit update, delete, insert operation
##newsCategory
newsCategory.delete.fail.please.delete.category.info=Delete failed, please delete the news information under the corresponding category first
##product
delete.fail.please.delete.firmware=Delete failed, please delete the firmware under the corresponding product first
delete.fail.please.delete.product.device=Delete failed, please delete the device under the corresponding product first
delete.fail.please.delete.product.scene=Delete failed, please modify or delete the scene linkage under the corresponding product first: [{}]
product.status.update.fail.value.fail=Status update failed, incorrect status value
product.status.update.fail=Status update failed
restore.product.fail=Product restore failed not exist
product.name.is.not.empty=Please enter a product name
product.import.categoryId.is.fail=Please enter the correct product classification number categoryId
##socialLogin
bind.account.not.exist=The bound account does not exist
socialLogin.verify.has.expired=The verification code has expired, please obtain it again
socialLogin.platform.type.fail=Wrong platform type
user.account.and.bind.account.not.match=User account and bound account do not match
socialLogin.user.not.exist=user does not exist
socialLogin.bind.end.user.cannot.login.web=Do not bind end users, after binding end users, you cannot log in to the web end
socialLogin.account.already.bind.other.wechat.please.unbind=This account has already been linked to another WeChat account. Please unbind it first and try again!
socialLogin.register.fail.please.check.role.exist=Registration failed, please contact the management personnel to check if the institutional role exists
socialLogin.web.not.allow.end.user.login=The web end does not allow end users to log in
socialLogin.register.fail.please.check.invitationCode.exist=If the invitation code is incorrect, contact your organization administrator to check it
The.organization.to.which.your.account.belongs.has.been.suspended.Please.contact.the.administrator=The organization to which your account belongs has been suspended. Please contact the administrator!
default.institution.has.been.deactivated.contact.administrator=The default institution has been deactivated. Please contact the administrator!
##alert
alert.push.fail.device.not.exist=Alarm push, device does not exist: [{}]
##modbus
not.modbus.protocol.please.config.collect.protocol=Please configure the active collection protocol first for non Modbus protocols
modbus.point.not.config=Modbus point not configured
##ota
firmwareTask.add.fail.FirmwareTask.exist=Task: [{}] already exists
firmware.version.not.exist=The firmware version does not exist!
##mqttMessage
mqtt.service.send.device.not.exist=The device issued by the service: [{}] does not exist
mqtt.disconnect.occur.fail=Error occurred while disconnecting MQTT connection: [{}]
##genTable
genTable.template.rendering.fail=Template rendering failed, table name: [{}]
genTable.data.sync.fail.original.table.not.exist=Data synchronization failed, original table structure does not exist
genTable.tree.code.field.cannot.empty=The tree code field cannot be empty
genTable.tree.parent.code.field.cannot.empty=The tree parent code field cannot be empty
genTable.tree.name.field.cannot.empty=The tree name field cannot be empty
genTable.relate.child.table.name.cannot.empty=The table name of the associated sub table cannot be empty
genTable.child.table.relate.foreign.key.name.cannot.empty=The foreign key name associated with a sub table cannot be empty
##oauthCode
oauthCode.code.not.exist=Code does not exist
##protocol
protocol.input.content.is.empty=The input content is empty
protocol.data.parse.error=Data parsing error [{}]
protocol.data.parse.exception=Data parsing exception [{}]
protocol.instruction.number.exception=Instruction number exception: [{}]
##modbusJob
modbusJob.add.fail.please.bind.gateway=Please bind the gateway first
thingsModel.array.or.object.no.need.update=There are no arrays or objects that need to be updated
sync.fail.please.try.again=Sync failed, please try again!
sync.success=Synchronization succeeded
## scada
scada.product.id.is.null=The product ID is empty
scada.scene.id.is.null=The scene ID is empty
scada.guid.cannot.empty=The guid cannot be empty
scada.base64.change.image.exception=Configuration base64 to image abnormal:[{}]
scada.please.select.device=Please select a device
scada.please.enter.password=Please enter your password!
scada.please.login=If you are not logged in, please log in and try again
scada.password.fail.please.reload.enter=The password is incorrect, please re-enter it!
scada.product.has.relate.please.select.again=The product has been associated with the configuration, please select it again!
scada.scene.has.relate.please.select.again=This scene has been associated with the configuration, please select it again!
scada.not.allow.view.other.tenant.config=It is not allowed to view the configuration of other tenants!
scada.upload.gallery.file.fail=The upload of the gallery file is abnormal,[{}]
scada.upload.fail=Upload failed, please try again!
scada.invalid.profile=Invalid profile
scada.import.success.need.replace.variable=The import is successful, and the current page needs to replace the variables of the bound component again!
## speaker
speaker.product.has.relate=The product is already linked, please do not associate it repeatedly
speaker.product.relate.add.fail=Failed to add a new feature
speaker.not.found.product.relate=No product related information was found
##file
file.content.is.empty=The file content is empty
file.is.invalid=Invalid file
## workOrder
workOrder.please.select.user=Please specify the contact person
workOrder.please.fill.result.info=Please fill in the statement information
## subGateway
subGateway.subDeviceAddress.is.repeat=There is a duplicate sub-device address. Please modify it and try again!

View File

@@ -0,0 +1,429 @@
#\u9519\u8BEF\u6D88\u606F
not.null=\u5FC5\u987B\u586B\u5199
user.jcaptcha.error=\u9A8C\u8BC1\u7801\u9519\u8BEF
user.jcaptcha.expire=\u9A8C\u8BC1\u7801\u5DF2\u5931\u6548
user.not.exists=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF
user.password.not.match=\u7528\u6237\u4E0D\u5B58\u5728/\u5BC6\u7801\u9519\u8BEF
user.password.retry.limit.count=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21
user.password.retry.limit.exceed=\u5BC6\u7801\u8F93\u5165\u9519\u8BEF{0}\u6B21\uFF0C\u5E10\u6237\u9501\u5B9A{1}\u5206\u949F
user.password.delete=\u5BF9\u4E0D\u8D77\uFF0C\u60A8\u7684\u8D26\u53F7\u5DF2\u88AB\u5220\u9664
user.blocked=\u7528\u6237\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
role.blocked=\u89D2\u8272\u5DF2\u5C01\u7981\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.logout.success=\u9000\u51FA\u6210\u529F
length.not.valid=\u957F\u5EA6\u5FC5\u987B\u5728{min}\u5230{max}\u4E2A\u5B57\u7B26\u4E4B\u95F4
user.username.not.valid=2\u523020\u4E2A\u6C49\u5B57\u3001\u5B57\u6BCD\u3001\u6570\u5B57\u6216\u4E0B\u5212\u7EBF\u7EC4\u6210\uFF0C\u4E14\u5FC5\u987B\u4EE5\u975E\u6570\u5B57\u5F00\u5934
user.password.not.valid=5-50\u4E2A\u5B57\u7B26
user.email.not.valid=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF
user.mobile.phone.number.not.valid=\u624B\u673A\u53F7\u683C\u5F0F\u9519\u8BEF
user.login.success=\u767B\u5F55\u6210\u529F
user.register.success=\u6CE8\u518C\u6210\u529F
user.notfound=\u8BF7\u91CD\u65B0\u767B\u5F55
user.forcelogout=\u7BA1\u7406\u5458\u5F3A\u5236\u9000\u51FA\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
user.unknown.error=\u672A\u77E5\u9519\u8BEF\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55
##\u6743\u9650
no.permission=\u60A8\u6CA1\u6709\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.create.permission=\u60A8\u6CA1\u6709\u521B\u5EFA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.update.permission=\u60A8\u6CA1\u6709\u4FEE\u6539\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.delete.permission=\u60A8\u6CA1\u6709\u5220\u9664\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.export.permission=\u60A8\u6CA1\u6709\u5BFC\u51FA\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.view.permission=\u60A8\u6CA1\u6709\u67E5\u770B\u6570\u636E\u7684\u6743\u9650\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u6DFB\u52A0\u6743\u9650 [{0}]
no.operate.permission=\u6682\u65e0\u6743\u9650\u64cd\u4f5c\uff01
##\u6587\u4EF6\u4E0A\u4F20\u6D88\u606F
upload.exceed.maxSize=\u4E0A\u4F20\u7684\u6587\u4EF6\u5927\u5C0F\u8D85\u51FA\u9650\u5236\u7684\u6587\u4EF6\u5927\u5C0F\uFF01<br/>\u5141\u8BB8\u7684\u6587\u4EF6\u6700\u5927\u5927\u5C0F\u662F\uFF1A{0}MB\uFF01
upload.filename.exceed.length=\u4E0A\u4F20\u7684\u6587\u4EF6\u540D\u6700\u957F{0}\u4E2A\u5B57\u7B26
upload.success=\u4E0A\u4F20\u6210\u529F
##\u6587\u4EF6\u4E0B\u8F7D\u6D88\u606F
download.filename.not.valid=\u6587\u4EF6\u540D\u79F0[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D
download.file.failed=\u4E0B\u8F7D\u6587\u4EF6\u5931\u8D25
download.resource.not.valid=\u8D44\u6E90\u6587\u4EF6[{}]\u975E\u6CD5\uFF0C\u4E0D\u5141\u8BB8\u4E0B\u8F7D
##Dept
dept.add.failed.name.exists=\u65B0\u589E\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728
dept.update.failed.name.exists=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u673A\u6784\u540D\u79F0\u5DF2\u5B58\u5728
dept.update.failed.parent.not.valid=\u4FEE\u6539\u673A\u6784[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u673A\u6784\u4E0D\u80FD\u662F\u81EA\u5DF1
dept.update.failed.child.not.valid=\u8BE5\u673A\u6784\u5305\u542B\u672A\u505C\u7528\u7684\u5B50\u673A\u6784\uFF01
dept.delete.failed.child.exists=\u5B58\u5728\u4E0B\u7EA7\u673A\u6784\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664
dept.delete.failed.user.exists=\u673A\u6784\u5B58\u5728\u7528\u6237\uFF0C\u4E0D\u5141\u8BB8\u5220\u9664
dept.invitationCode.is.exists=\u9080\u8bf7\u7801\u5df2\u7ecf\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165
##Dict
dict.add.failed.type.exists=\u65B0\u589E\u5B57\u5178[{}]\u5931\u8D25\uFF0C\u5B57\u5178\u7C7B\u578B\u5DF2\u5B58\u5728
dict.update.failed.type.exists=\u4fee\u6539\u5b57\u5178[{}]\u5931\u8d25\uff0c\u5b57\u5178\u7c7b\u578b\u5df2\u5b58\u5728
##Index
index.welcome.message=\u6B22\u8FCE\u4F7F\u7528{}\u540E\u53F0\u7BA1\u7406\u6846\u67B6\uFF0C\u5F53\u524D\u7248\u672C\uFF1Av{}\uFF0C\u8BF7\u901A\u8FC7\u524D\u7AEF\u5730\u5740\u8BBF\u95EE\u3002
##Menu
menu.add.failed.name.exists=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728
menu.add.failed.path.not.valid=\u65B0\u589E\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934
menu.update.failed.name.exists=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u83DC\u5355\u540D\u79F0\u5DF2\u5B58\u5728
menu.update.failed.path.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u5730\u5740\u5FC5\u987B\u4EE5http(s)://\u5F00\u5934
menu.update.failed.parent.not.valid=\u4FEE\u6539\u83DC\u5355[{}]\u5931\u8D25\uFF0C\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u9009\u62E9\u81EA\u5DF1
menu.delete.failed.child.exists=\u5B58\u5728\u5B50\u83DC\u5355,\u4E0D\u5141\u8BB8\u5220\u9664
menu.delete.failed.role.exists=\u83DC\u5355\u5DF2\u5206\u914D,\u4E0D\u5141\u8BB8\u5220\u9664
##Post
post.add.failed.name.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728
post.add.failed.code.exists=\u65B0\u589E\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728
post.update.failed.name.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u540D\u79F0\u5DF2\u5B58\u5728
post.update.failed.code.exists=\u4FEE\u6539\u5C97\u4F4D[{}]\u5931\u8D25\uFF0C\u5C97\u4F4D\u7F16\u7801\u5DF2\u5B58\u5728
##User
user.username.exists=\u7CFB\u7EDF\u8D26\u53F7\u540D\u79F0\u5DF2\u5B58\u5728\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5
user.password.differ=\u4E24\u6B21\u5BC6\u7801\u4E0D\u4E00\u81F4\uFF0C\u8BF7\u91CD\u65B0\u8F93\u5165
user.add.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728
user.add.failed.phone.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728
user.add.failed.email.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728
user.update.failed.password.wrong=\u4FEE\u6539\u5BC6\u7801\u5931\u8D25\uFF0C\u65E7\u5BC6\u7801\u9519\u8BEF
user.update.failed.password.repeat=\u65B0\u5BC6\u7801\u4E0D\u80FD\u4E0E\u65E7\u5BC6\u7801\u76F8\u540C
user.update.password.failed=\u4FEE\u6539\u5BC6\u7801\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.update.failed.name.exists=\u65B0\u589E\u7528\u6237[{}]\u5931\u8D25\uFF0C\u767B\u5F55\u8D26\u53F7\u5DF2\u5B58\u5728
user.update.failed.phone.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u624B\u673A\u53F7\u7801\u5DF2\u5B58\u5728
user.update.failed.email.exists=\u4FEE\u6539\u7528\u6237[{}]\u5931\u8D25\uFF0C\u90AE\u7BB1\u8D26\u53F7\u5DF2\u5B58\u5728
user.update.failed=\u4FEE\u6539\u4E2A\u4EBA\u4FE1\u606F\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.delete.failed=\u5F53\u524D\u7528\u6237\u4E0D\u80FD\u5220\u9664
user.upload.avatar.failed=\u4E0A\u4F20\u56FE\u7247\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
user.not.login=\u8BF7\u767B\u5F55\u540E\u91CD\u8BD5
user.access.denied=\u7528\u6237\u62D2\u7EDD\u8BBF\u95EE
##Role
role.add.manager.failed=\u4E0D\u5141\u8BB8\u8BBE\u7F6E\u7BA1\u7406\u5458\u89D2\u8272\u6807\u8BC6
role.add.failed.name.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728
role.add.failed.key.exists=\u65B0\u589E\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728
role.update.failed.name.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u540D\u79F0\u5DF2\u5B58\u5728
role.update.failed.key.exists=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u89D2\u8272\u6743\u9650\u5DF2\u5B58\u5728
role.update.failed=\u4FEE\u6539\u89D2\u8272[{}]\u5931\u8D25\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458
##Import
import.failed.file.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u8BF7\u5148\u4E0A\u4F20\u6587\u4EF6\uFF01
import.failed.data.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u5BFC\u5165\u6570\u636E\u4E3A\u7A7A\uFF01
import.failed.device.name.null=\u5BFC\u5165\u5931\u8D25\uFF0C\u6A21\u677F\u91CC\u8BBE\u5907\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A\uFF01
import.success=\u5BFC\u5165\u6210\u529F
import.fail=\u5bfc\u5165\u5931\u8d25
##General
success=\u6210\u529F
fail=\u5931\u8D25
query.success=\u67E5\u8BE2\u6210\u529F
operate.success=\u64CD\u4F5C\u6210\u529F
operate.fail=\u64cd\u4f5c\u5931\u8d25
create.success=\u521B\u5EFA\u6210\u529F
create.failed=\u521B\u5EFA\u5931\u8D25
save.success=\u4FDD\u5B58\u6210\u529F
save.failed=\u4FDD\u5B58\u5931\u8D25
authorization.success=\u6388\u6743\u6210\u529F
delete.success=\u5220\u9664\u6210\u529f
delete.fail=\u5220\u9664\u5931\u8d25
bind.success=\u7ed1\u5b9a\u6210\u529f
bind.fail=\u7ed1\u5b9a\u5931\u8d25
unbind.success=\u89e3\u7ed1\u6210\u529f
unbind.fail=\u89e3\u7ed1\u5931\u8d25
captcha.fail=\u9a8c\u8bc1\u7801\u9519\u8bef
import.fail.[{}]=\u5bfc\u5165\u5931\u8d25\uff1a[{}]
only.allow.tenant.config=\u53ea\u5141\u8bb8\u79df\u6237\u914d\u7f6e
password.fail=\u5bc6\u7801\u9519\u8bef
login.success=\u767b\u5f55\u6210\u529f
##Email
email.format.error=\u90AE\u7BB1\u683C\u5F0F\u9519\u8BEF
email.verification.code.send=\u90AE\u7BB1\u9A8C\u8BC1\u7801\u5DF2\u53D1\u9001
##Firmware
firmware.task.upgrade.failed.time.not.valid=\u9884\u5B9A\u5347\u7EA7\u65F6\u95F4\u5E94\u5927\u4E8E\u5F53\u524D\u65F6\u95F4
##Media
media.record.query.failed=\u8FDE\u63A5\u8D85\u65F6\u6216\u53D1\u751F\u9519\u8BEF\uFF0C\u672A\u83B7\u53D6\u5230\u6570\u636E
##Modbus
modbus.type.null=\u7C7B\u578B\u4E3A\u7A7A
modbus.crc.check.abnormal=crc\u6821\u9a8c\u5f02\u5e38
##Netty
netty.client.not.exists=\u5BA2\u6237\u7AEF\u4E0D\u5B58\u5728
##Runtime
runtime.message.id.null=\u6D88\u606Fid\u4E3A\u7A7A
##Wechat
wechat.verify.type.null=\u8BF7\u4F20\u5165\u9A8C\u8BC1\u65B9\u5F0F
wechat.bind.message.id.null=\u8BF7\u4F20\u5165\u7ED1\u5B9A\u4FE1\u606FID
wechat.please.config.open.platform=\u8bf7\u5148\u914d\u7f6e\u5fae\u4fe1\u5f00\u653e\u5e73\u53f0\u79fb\u52a8\u5e94\u7528\u4fe1\u606f
wechat.user.certificate.gain.fail=\u7528\u6237\u51ed\u8bc1\u83b7\u53d6\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\uff01
wechat.please.config.open.platform.mini=\u8bf7\u5148\u914d\u7f6e\u5fae\u4fe1\u516c\u4f17\u5e73\u53f0\u5c0f\u7a0b\u5e8f\u4fe1\u606f\uff01
wechat.user.phone.certificate.gain.fail=\u7528\u6237\u624b\u673a\u53f7\u51ed\u8bc1\u83b7\u53d6\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\uff01
wechat.gain.user.call.certificate.fail=\u83b7\u53d6\u7528\u6237\u8c03\u7528\u51ed\u636e\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\uff01
wechat.gain.user.phone.fail=\u83b7\u53d6\u7528\u6237\u624b\u673a\u53f7\u5931\u8d25\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\uff01
wechat.please.login=\u8bf7\u5148\u767b\u5f55\u540e\u91cd\u8bd5
wechat.please.enter.user.password=\u8bf7\u4f20\u5165\u7528\u6237\u5bc6\u7801
wechat.cancelBind.password.fail=\u5bc6\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165
wechat.please.enter.wechat.user.info=\u8bf7\u4f20\u5165\u5fae\u4fe1\u7528\u6237\u4fe1\u606f
wechat.please.enter.user.certificate=\u8bf7\u4f20\u5165\u7528\u6237\u51ed\u8bc1
wechat.gain.wechat.info.fail=\u83b7\u53d6\u5fae\u4fe1\u4fe1\u606f\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\uff01
wechat.your.wechat.already.bind.other.account=\u60a8\u7684\u5fae\u4fe1\u5df2\u7ed1\u5b9a\u5176\u4ed6\u8d26\u53f7\uff0c\u8bf7\u5148\u4f7f\u7528\u5fae\u4fe1\u767b\u5f55\u89e3\u7ed1\u540e\u91cd\u8bd5
wechat.this.wechat.already.bind.other.account=\u8be5\u5fae\u4fe1\u5df2\u7ed1\u5b9a\u5176\u4ed6\u8d26\u53f7\uff0c\u8bf7\u5148\u4f7f\u7528\u5fae\u4fe1\u767b\u5f55\u89e3\u7ed1\u540e\u91cd\u8bd5\uff01
wechat.please.config.open.platform.web.application.personal.bind.info=\u8bf7\u5148\u914d\u7f6e\u5fae\u4fe1\u5f00\u653e\u5e73\u53f0\u7f51\u7ad9\u5e94\u7528\u4e2a\u4eba\u4e2d\u5fc3\u7ed1\u5b9a\u4fe1\u606f
wechat.you.cancel.or.not.gain.authorization.info=\u60a8\u5df2\u53d6\u6d88\u6388\u6743\u6216\u672a\u83b7\u53d6\u5230\u6388\u6743\u4fe1\u606f
wechat.the.qr.code.has.expired=\u4e8c\u7ef4\u7801\u5df2\u5931\u6548\uff0c\u8bf7\u91cd\u65b0\u70b9\u51fb\u7ed1\u5b9a
wechat.your.account.already.bind.wechat=\u60a8\u7684\u8d26\u53f7\u5df2\u7ed1\u5b9a\u5fae\u4fe1\uff0c\u8bf7\u5148\u89e3\u7ed1
##AuthResource
auth.resource.product.query.success=\u67E5\u8BE2\u4EA7\u54C1\u5217\u8868\u6210\u529F
##Device
device.user.id.null=\u7528\u6237ID\u4E0D\u80FD\u4E3A\u7A7A
device.product.id.null=\u8BBE\u5907\u7F16\u53F7\u548C\u4EA7\u54C1ID\u4E0D\u80FD\u4E3A\u7A7A
device.dept.id.null=\u8BF7\u9009\u62E9\u5206\u914D\u673A\u6784
device.id.null=\u8BF7\u9009\u62E9\u8BBE\u5907
device.not.select=\u8bf7\u9009\u62e9\u8bbe\u5907
device.serialNumber.not.empty=\u8bbe\u5907\u7f16\u53f7\u4e0d\u80fd\u4e3a\u7a7a
device.delete.fail.please.delete.device.scene=\u8bbe\u5907\u7f16\u53f7\u4e3a[{}]\u7684\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u8bbe\u5907\u4e0b\u7684\u573a\u666f\u8054\u52a8
delete.fail.please.delete.scene.model=\u8bbe\u5907\u7f16\u53f7\u4e3a[{}]\u7684\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u8bbe\u5907\u4e0b\u7684\u573a\u666f\u7ba1\u7406
device.tenant.can.not.bind.exist.device=\u79df\u6237\u4e0d\u5141\u8bb8\u7ed1\u5b9a\u5df2\u5b58\u5728\u7684\u8bbe\u5907\uff0c\u8bbe\u5907\u7f16\u53f7\uff1a[{}]
now.user.belong.device.can.not.repeat.share=\u5f53\u524d\u7528\u6237\u5df2\u62e5\u6709\u8be5\u8bbe\u5907\uff0c\u65e0\u6cd5\u91cd\u590d\u5206\u914d\uff0c\u8bbe\u5907\u7f16\u53f7\uff1a[{}]
device.share.other.user.can.not.share=\u8be5\u8bbe\u5907\u5df2\u88ab\u5206\u914d\u5230\u5176\u4ed6\u7528\u6237\uff0c\u65e0\u6cd5\u91cd\u590d\u5206\u914d\uff0c\u8bbe\u5907\u7f16\u53f7\uff1a[{}]
device.not.exist.add.fail.please.check.product.id.is.correct=\u8bbe\u5907\u4e0d\u5b58\u5728\uff0c\u81ea\u52a8\u6dfb\u52a0\u8bbe\u5907\u65f6\u5931\u8d25\uff0c\u8bf7\u68c0\u67e5\u4ea7\u54c1\u7f16\u53f7\u662f\u5426\u6b63\u786e
device.add.success=\u6dfb\u52a0\u8bbe\u5907\u6210\u529f
device.assignment.fail.dept.not.exist=\u673a\u6784\u4e0d\u5b58\u5728\u6216\u672a\u7ed1\u5b9a\u7ba1\u7406\u5458\uff0c\u8bf7\u8c03\u6574\u540e\u91cd\u8bd5\uff01
device.assignment.fail.dept.admin.not.exist=\u673a\u6784\u7ba1\u7406\u5458\u4e0d\u5b58\u5728
device.assignment.success=\u5206\u914d\u8bbe\u5907\u6210\u529f
device.assignment.fail=\u5206\u914d\u8bbe\u5907\u5931\u8d25
device.recovery.fail.dept.not.exist=\u673a\u6784\u4e0d\u5b58\u5728\u6216\u672a\u7ed1\u5b9a\u7ba1\u7406\u5458\uff0c\u8bf7\u8c03\u6574\u540e\u91cd\u8bd5\uff01
device.recovery.fail.dept.admin.not.exist=\u673a\u6784\u7ba1\u7406\u5458\u4e0d\u5b58\u5728
device.recovery.success=\u56de\u6536\u8bbe\u5907\u6210\u529f
device.recovery.fail=\u56de\u6536\u8bbe\u5907\u5931\u8d25
device.not.exist=\u8bbe\u5907\u4e0d\u5b58\u5728
device.serialNumber.allow.generate.max.number=\u6700\u591a\u53ea\u80fd\u751f\u6210200\u4e2a\uff01
device.insert.fail.device.number.already.exist=\u8bbe\u5907\u7f16\u53f7\uff1a[{}] \u5df2\u7ecf\u5b58\u5728\uff0c\u65b0\u589e\u5931\u8d25
device.insert.fail.device.ip.already.exist=\u8be5\u4e3b\u673aip\u548c\u7aef\u53e3\u5df2\u7ecf\u5b58\u5728\uff0c\u8bbe\u5907\u7f16\u53f7\u4e3a\uff1a[{}]
device.get.mqtt.connection.param.fail=\u83b7\u53d6\u8bbe\u5907mqtt\u8fde\u63a5\u53c2\u6570\u5931\u8d25
device.get.authorization.fail.please.config=\u4ea7\u54c1\u5df2\u542f\u7528\u6388\u6743\uff0c\u83b7\u53d6\u8bbe\u5907\u6388\u6743\u7801\u5931\u8d25\uff0c\u8bf7\u5148\u914d\u7f6e\u6388\u6743\u7801
device.unsupported.authentication.method=\u4f20\u8f93\u534f\u8bae\u4e3aHTTP\uff0c\u8ba4\u8bc1\u65b9\u5f0f\u4ec5\u652f\u6301 Basic \u548c Digest\uff0c\u8bf7\u524d\u5f80\u4ea7\u54c1\u4fee\u6539\u534f\u8bae
device.not.found.by.serial.number=\u6570\u636e\u5e93\u4e2d\u4e0d\u5b58\u5728\u8be5\u8bbe\u5907
device.duplicate.by.serial.number=\u5df2\u5b58\u5728\u76f8\u540c\u8bbe\u5907\u7f16\u53f7\u7684\u6570\u636e
device.restore.success=\u8bbe\u5907\u8fd8\u539f\u6210\u529f
device.restore.fail=\u8bbe\u5907\u8fd8\u539f\u5931\u8d25
product.not.found.by.product.id=\u8bbe\u5907\u6240\u5c5e\u4ea7\u54c1\u5df2\u5220\u9664\uff0c\u8bf7\u5148\u5c06\u4ea7\u54c1\u6062\u590d
device.import.assignment.fail.product.information.is.empty=\u5bfc\u5165\u5931\u8d25\uff0c\u4ea7\u54c1\u4fe1\u606f\u4e3a\u7a7a
device.import.assignment.fail.serialNumber.already.exists=\u4ee5\u4e0b\u8bbe\u5907\u7f16\u53f7[{}]\u5df2\u5b58\u5728\uff0c\u8bf7\u4fee\u6539\u540e\u91cd\u8bd5
device.import.assignment.fail.dept.not.exists=\u673a\u6784\u4e0d\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\u673a\u6784\uff01
device.import.assignment.fail.dept.admin.not.exists=\u673a\u6784\u7ba1\u7406\u5458\u4fe1\u606f\u4e0d\u5b58\u5728\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\u673a\u6784\uff01
device.import.serialNumber.not.comply.national.standard.protocol=\u8bbe\u5907\u7f16\u53f7[{}]\u4e0d\u7b26\u5408\u56fd\u6807\u534f\u8bae\u683c\u5f0f\u8981\u6c42
##DeviceJob
job.add.failed.cron.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E
job.add.failed.rmi.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528
job.add.failed.ldap.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528
job.add.failed.http.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528
job.add.failed.string.error=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4
job.add.failed.string.not.valid=\u65B0\u589E\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185
job.add.failed.product.not.modbus.config=\u65b0\u589e\u4efb\u52a1[{}]\u5931\u8d25\uff0c\u8bf7\u5148\u53bb\u4ea7\u54c1\u8fdb\u884cmodbus\u914d\u7f6e
job.update.failed.cron.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0CCron\u8868\u8FBE\u5F0F\u4E0D\u6B63\u786E
job.update.failed.rmi.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'rmi'\u8C03\u7528
job.update.failed.ldap.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'ldap(s)'\u8C03\u7528
job.update.failed.http.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5141\u8BB8'http(s)'\u8C03\u7528
job.update.failed.string.error=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u5B58\u5728\u8FDD\u89C4
job.update.failed.string.not.valid=\u4FEE\u6539\u4EFB\u52A1[{}]\u5931\u8D25\uFF0C\u76EE\u6807\u5B57\u7B26\u4E32\u4E0D\u5728\u767D\u540D\u5355\u5185
job.update.failed.product.not.modbus.config=\u66f4\u65b0\u4efb\u52a1[{}]\u5931\u8d25\uff0c\u8bf7\u5148\u53bb\u4ea7\u54c1\u8fdb\u884cmodbus\u914d\u7f6e
job.not.exists=\u4EFB\u52A1\u4E0D\u5B58\u5728\u6216\u5DF2\u8FC7\u671F
##DeviceUser
device.user.delete.failed.user.not.valid=\u8BBE\u5907\u6240\u6709\u8005\u4E0D\u80FD\u5220\u9664
##GoviewProject
goview.project.data.save.failed.id.null=\u6CA1\u6709\u8BE5\u9879\u76EEID
goview.project.data.execute.sql.failed=\u8BF7\u7F16\u5199sql\u8BED\u53E5
##ThingsModel
things.model.identifier.repeat=\u4EA7\u54C1\u4E0B\u7684\u6807\u8BC6\u7B26\u4E0D\u80FD\u91CD\u590D
things.model.import.failed.identifier.repeat=[{}]\u6761\u6570\u636E\u672A\u5BFC\u5165\uFF0C\u6807\u8BC6\u7B26\u91CD\u590D
things.model.update.fail.quote.the.scene.variable.formula.please.delete=\u5f53\u524d\u7269\u6a21\u578b\u88ab\u5f15\u7528\u5230\u573a\u666f\u8fd0\u7b97\u578b\u53d8\u91cf\u7684\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u4fee\u6539\uff0c\u8bf7\u5148\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u4fee\u6539\u64cd\u4f5c\uff01
things.model.delete.fail.quote.the.scene.variable.formula.please.delete=\u5f53\u524d\u7269\u6a21\u578b\u88ab\u5f15\u7528\u5230\u573a\u666f\u8fd0\u7b97\u578b\u53d8\u91cf\u7684\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u5220\u9664\uff0c\u8bf7\u5148\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u5220\u9664\u64cd\u4f5c\uff01
things.model.import.data.exception=\u5bfc\u5165\u6570\u636e\u5f02\u5e38
things.model.register.address.repeat=\u540c\u4e00\u4e2a\u91c7\u96c6\u70b9\u6a21\u677f\u4e0b,\u5bc4\u5b58\u5668\u5730\u5740\u91cd\u590d,\u8bf7\u68c0\u67e5\u5bfc\u5165\u53d8\u91cf\u5bc4\u5b58\u5668\u5730\u5740
##MQTT
mqtt.unauthorized=mqtt\u8D26\u53F7\u548C\u5BC6\u7801\u4E0E\u8BA4\u8BC1\u670D\u52A1\u5668\u914D\u7F6E\u4E0D\u5339\u914D
##Oauth
oauth.response.type.not.valid=response_type\u53C2\u6570\u503C\u53EA\u5141\u8BB8code\u548Ctoken
oauth.grant.type.null=\u672A\u77E5\u6388\u6743\u7C7B\u578B
oauth.grant.type.implicit.not.support=Token\u63A5\u53E3\u4E0D\u652F\u6301implicit\u6388\u6743\u6A21\u5F0F
oauth.access.token.null=\u8BBF\u95EE\u4EE4\u724C\u4E0D\u80FD\u4E3A\u7A7A
obtain.basic.authorization.failed=client_id\u6216client_secret\u672A\u6B63\u786E\u4F20\u9012
##Record
record.app.null=app\u4E0D\u80FD\u4E3A\u7A7A
record.stream.null=stream\u4E0D\u80FD\u4E3A\u7A7A
record.time.not.valid=\u9519\u8BEF\u7684\u5F00\u59CB\u65F6\u95F4\u6216\u7ED3\u675F\u65F6\u95F4
record.file.null=\u672A\u627E\u5230\u89C6\u9891\u6587\u4EF6
##ErrorCodeConstants
app.not.found=App \u4E0D\u5B58\u5728
app.is.disable=App \u5DF2\u7ECF\u88AB\u7981\u7528
app.exist.order.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u652F\u4ED8\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664
app.exist.refund.cant.delete=\u652F\u4ED8\u5E94\u7528\u5B58\u5728\u9000\u6B3E\u8BA2\u5355\uFF0C\u65E0\u6CD5\u5220\u9664
channel.not.found=\u652F\u4ED8\u6E20\u9053\u7684\u914D\u7F6E\u4E0D\u5B58\u5728
channel.is.disable=\u652F\u4ED8\u6E20\u9053\u5DF2\u7ECF\u7981\u7528
channel.exists.same.channel.error=\u5DF2\u5B58\u5728\u76F8\u540C\u7684\u6E20\u9053
order.not.found=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5B58\u5728
order.status.is.not.waiting=\u652F\u4ED8\u8BA2\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8
order.status.is.success=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u5237\u65B0\u9875\u9762
order.is.expired=\u652F\u4ED8\u8BA2\u5355\u5DF2\u7ECF\u8FC7\u671F
order.submit.channel.error=\u53D1\u8D77\u652F\u4ED8\u62A5\u9519\uFF0C\u9519\u8BEF\u7801\uFF1A{}\uFF0C\u9519\u8BEF\u63D0\u793A\uFF1A{}
order.refund.fail.status.error=\u652F\u4ED8\u8BA2\u5355\u9000\u6B3E\u5931\u8D25\uFF0C\u539F\u56E0\uFF1A\u72B6\u6001\u4E0D\u662F\u5DF2\u652F\u4ED8\u6216\u5DF2\u9000\u6B3E
order.extension.not.found=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5B58\u5728
order.extension.status.is.not.waiting=\u652F\u4ED8\u4EA4\u6613\u62D3\u5C55\u5355\u4E0D\u5904\u4E8E\u5F85\u652F\u4ED8
order.extension.is.paid=\u8BA2\u5355\u5DF2\u652F\u4ED8\uFF0C\u8BF7\u7B49\u5F85\u652F\u4ED8\u7ED3\u679C
refund.price.exceed=\u9000\u6B3E\u91D1\u989D\u8D85\u8FC7\u8BA2\u5355\u53EF\u9000\u6B3E\u91D1\u989D
refund.has.refunding=\u5DF2\u7ECF\u6709\u9000\u6B3E\u5728\u5904\u7406\u4E2D
refund.exists=\u5DF2\u7ECF\u5B58\u5728\u9000\u6B3E\u5355
refund.not.found=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5B58\u5728
refund.statue.is.not.waiting=\u652F\u4ED8\u9000\u6B3E\u5355\u4E0D\u5904\u4E8E\u5F85\u9000\u6B3E
demo.order.not.found=\u793A\u4F8B\u8BA2\u5355\u4E0D\u5B58\u5728
demo.order.update.paid.status.not.unpaid=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u8BA2\u5355\u4E0D\u662F\u3010\u672A\u652F\u4ED8\u3011\u72B6\u6001
demo.order.update.paid.fail.pay.order.id.error=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u7F16\u53F7\u4E0D\u5339\u914D
demo.order.update.paid.fail.pay.order.status.not.success=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u72B6\u6001\u4E0D\u662F\u3010\u652F\u4ED8\u6210\u529F\u3011\u72B6\u6001
demo.order.update.paid.fail.pay.price.not.match=\u793A\u4F8B\u8BA2\u5355\u66F4\u65B0\u652F\u4ED8\u72B6\u6001\u5931\u8D25\uFF0C\u652F\u4ED8\u5355\u91D1\u989D\u4E0D\u5339\u914D
demo.order.refund.fail.not.paid=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u672A\u652F\u4ED8
demo.order.refund.fail.refunded=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u793A\u4F8B\u8BA2\u5355\u5DF2\u9000\u6B3E
demo.order.refund.fail.refund.not.found=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u4E0D\u5B58\u5728
demo.order.refund.fail.refund.not.success=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u8BA2\u5355\u672A\u9000\u6B3E\u6210\u529F
demo.order.refund.fail.refund.order.id.error=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u7F16\u53F7\u4E0D\u5339\u914D
demo.order.refund.fail.refund.price.not.match=\u53D1\u8D77\u9000\u6B3E\u5931\u8D25\uFF0C\u9000\u6B3E\u5355\u91D1\u989D\u4E0D\u5339\u914D
device.order.control.no.permission=\u6682\u65e0\u6743\u9650\u64cd\u4f5c\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\u5206\u914d\u6307\u4ee4\u6743\u9650\uff01
##sysConfig
sysConfig.add.param.fail.name.exist=\u65b0\u589e\u53c2\u6570[{}]\u5931\u8d25\uff0c\u53c2\u6570\u952e\u540d\u5df2\u5b58\u5728
sysConfig.update.param.fail.name.exist=\u4fee\u6539\u53c2\u6570[{}]\u5931\u8d25\uff0c\u53c2\u6570\u952e\u540d\u5df2\u5b58\u5728
##sysRegister
sysRegister.fail.not.enable.register=\u5f53\u524d\u7cfb\u7edf\u6ca1\u6709\u5f00\u542f\u6ce8\u518c\u529f\u80fd\uff01
##ossDetail
ossDetail.fail.file.not.empty=\u4e0a\u4f20\u6587\u4ef6\u4e0d\u80fd\u4e3a\u7a7a
##notify
sms.send.fail.contact.admin=\u77ed\u4fe1\u53d1\u9001\u5931\u8d25\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01
captcha.has.sent.please.try.again.later=\u9a8c\u8bc1\u7801\u5df2\u53d1\u9001\uff0c\u8bf7\u7a0d\u540e\u91cd\u8bd5\uff01
not.find.enable.notify.template=\u67e5\u8be2\u4e0d\u5230\u542f\u7528\u7684\u901a\u77e5\u6a21\u677f
not.find.notify.channel=\u67e5\u8be2\u4e0d\u5230\u901a\u77e5\u6e20\u9053
only.can.config.alert.and.not.wechat.mini.notify=\u975e\u7ba1\u7406\u5458\u53ea\u5141\u8bb8\u6dfb\u52a0\u8bbe\u5907\u544a\u8b66\u4e1a\u52a1\u5e76\u4e14\u975e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u7684\u6a21\u677f\uff01
notify.can.not.not.alert.and.wechat.mini.status=\u975e\u7ba1\u7406\u5458\u53ea\u80fd\u66f4\u6539\u8bbe\u5907\u544a\u8b66\u4e1a\u52a1\u5e76\u4e14\u975e\u5fae\u4fe1\u5c0f\u7a0b\u5e8f\u7684\u6a21\u677f\u72b6\u6001\uff01
##dataCenter
please.select.device=\u8bf7\u9009\u62e9\u8bbe\u5907
please.incoming.serialNumber=\u8bf7\u4f20\u5165\u8bbe\u5907\u7f16\u53f7
##license
certificate.install.success=\u8bc1\u4e66\u5b89\u88c5\u6210\u529f
certificate.install.fail=\u8bc1\u4e66\u5b89\u88c5\u5931\u8d25:[{}]
certificate.incoming.success=\u8bc1\u4e66\u4e0a\u4f20\u6210\u529f
certificate.incoming.fail=\u8bc1\u4e66\u4e0a\u4f20\u5931\u8d25
certificate.upload.success=\u8bc1\u4e66\u4e0a\u4f20\u6210\u529f
certificate.upload.fail=\u8bc1\u4e66\u4e0a\u4f20\u5931\u8d25:[{}]
##sceneModel
please.incoming.scene.id=\u8bf7\u4f20\u5165\u573a\u666fid
please.incoming.device.config.number=\u8bf7\u4f20\u5165\u5173\u8054\u8bbe\u5907\u914d\u7f6e\u7684\u5e8f\u53f7
sceneModel.please.introduced.id=\u8bf7\u4f20\u5165\u573a\u666f\u7ba1\u7406id
sceneModel.current.variable.quote.operate.variable.formula.please.delete=\u5f53\u524d\u53d8\u91cf\u88ab\u5f15\u7528\u5230\u573a\u666f\u8fd0\u7b97\u578b\u53d8\u91cf\u7684\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u5220\u9664\uff0c\u8bf7\u5148\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u5220\u9664\u64cd\u4f5c\uff01
sceneModel.scene.already.bind.device=\u573a\u666f\u5df2\u7ed1\u5b9a\u8be5\u8bbe\u5907\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\uff01
sceneModel.update.fail.device.variable.has.quote.scene.variable.please.delete=\u5f53\u524d\u8bbe\u5907\u4e0b\u5b58\u5728\u53d8\u91cf\u88ab\u5f15\u7528\u5230\u8fd0\u7b97\u578b\u53d8\u91cf\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u4fee\u6539\uff0c\u8bf7\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u4fee\u6539\u64cd\u4f5c\uff01
sceneModel.delete.fail.device.variable.has.quote.scene.variable.please.delete=\u5f53\u524d\u8bbe\u5907\u4e0b\u5b58\u5728\u53d8\u91cf\u88ab\u5f15\u7528\u5230\u8fd0\u7b97\u578b\u53d8\u91cf\u8ba1\u7b97\u516c\u5f0f\u4e2d\uff0c\u65e0\u6cd5\u5220\u9664\uff0c\u8bf7\u5220\u9664\u5f15\u7528\u5173\u7cfb\u540e\u518d\u6267\u884c\u5220\u9664\u64cd\u4f5c\uff01
sceneModel.formula.cannot.empty=\u8ba1\u7b97\u516c\u5f0f\u4e0d\u80fd\u4e3a\u7a7a\uff01
sceneModel.variable.cannot.empty=\u53d8\u91cf\u4e0d\u80fd\u4e3a\u7a7a\uff01
sceneModel.formula.and.variable.number.inconsistent=\u8ba1\u7b97\u516c\u5f0f\u548c\u53d8\u91cf\u4e2a\u6570\u4e0d\u4e00\u81f4\uff0c\u8bf7\u68c0\u67e5\u540e\u91cd\u8bd5
sceneModel.update.fail.variable.name.exist=\u53d8\u91cf\u540d\u79f0\u5df2\u5b58\u5728\uff0c\u8bf7\u4fee\u6539\u540e\u91cd\u8bd5\uff01
sceneModel.device.not.belong.current.tenant=\u8bf7\u5148\u628a\u8bbe\u5907\u914d\u7f6e\u7684\u6240\u6709\u8bbe\u5907\u5206\u914d\u7ed9\u5f53\u524d\u573a\u666f\u914d\u7f6e\u7684\u6240\u5c5e\u673a\u6784\uff0c\u624d\u53ef\u8fdb\u884c\u64cd\u4f5c\uff01
##oauthClientDetail
add.fail.same.client.can.config.one=\u540c\u4e00\u4e2a\u6388\u6743\u5e73\u53f0\u53ea\u80fd\u914d\u7f6e\u4e00\u6761\u4fe1\u606f\uff0c\u8bf7\u52ff\u91cd\u590d\u914d\u7f6e
client.id.is.exist=\u5ba2\u6237\u7aefid\uff1a[{}]\u5df2\u5b58\u5728\u6216\u5df2\u88ab\u5176\u4ed6\u79df\u6237\u4f7f\u7528
oauthClientDetail.client.not.exist=oauth2 \u5ba2\u6237\u7aef\u4e0d\u5b58\u5728
oauthClientDetail.client.disabled=oauth2 \u5ba2\u6237\u7aef\u5df2\u7981\u7528
oauthClientDetail.invalid.client.set=\u65e0\u6548 client_secret
oauthClientDetail.invalid.redirects=\u65e0\u6548 redirect_uri\uff1a[{}]
##category
delete.fail.please.delete.category.product=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u5206\u7c7b\u4e0b\u7684\u4ea7\u54c1
##goviewProjectData
only.allow.select.operate=\u53ea\u5141\u8bb8select\u64cd\u4f5c\uff0c\u7981\u6b62update\u3001delete\u3001insert\u64cd\u4f5c
##newsCategory
newsCategory.delete.fail.please.delete.category.info=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u5206\u7c7b\u4e0b\u7684\u65b0\u95fb\u8d44\u8baf
##product
delete.fail.please.delete.firmware=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u4ea7\u54c1\u4e0b\u7684\u56fa\u4ef6
delete.fail.please.delete.product.device=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u5220\u9664\u5bf9\u5e94\u4ea7\u54c1\u4e0b\u7684\u8bbe\u5907
delete.fail.please.delete.product.scene=\u5220\u9664\u5931\u8d25\uff0c\u8bf7\u5148\u4fee\u6539\u6216\u5220\u9664\u5bf9\u5e94\u4ea7\u54c1\u4e0b\u7684\u573a\u666f\u8054\u52a8\uff1a[{}]
product.status.update.fail.value.fail=\u72b6\u6001\u66f4\u65b0\u5931\u8d25,\u72b6\u6001\u503c\u6709\u8bef
product.status.update.fail=\u72b6\u6001\u66f4\u65b0\u5931\u8d25
restore.product.fail=\u5f53\u524d\u4ea7\u54c1\u672a\u67e5\u8be2\u5230
product.name.is.not.empty=\u8bf7\u8f93\u5165\u4ea7\u54c1\u540d\u79f0
product.import.categoryId.is.fail=\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u4ea7\u54c1\u5206\u7c7b\u7f16\u53f7categoryid
##socialLogin
bind.account.not.exist=\u7ed1\u5b9a\u8d26\u6237\u4e0d\u5b58\u5728
socialLogin.verify.has.expired=\u9a8c\u8bc1\u7801\u5df2\u5931\u6548\uff0c\u8bf7\u91cd\u65b0\u83b7\u53d6
socialLogin.platform.type.fail=\u9519\u8bef\u5e73\u53f0\u7c7b\u578b
user.account.and.bind.account.not.match=\u7528\u6237\u8d26\u6237\u548c\u7ed1\u5b9a\u8d26\u6237\u4e0d\u5339\u914d
socialLogin.user.not.exist=\u7528\u6237\u4e0d\u5b58\u5728
socialLogin.bind.end.user.cannot.login.web=\u8bf7\u52ff\u7ed1\u5b9a\u7ec8\u7aef\u7528\u6237\uff0c\u7ed1\u5b9a\u7ec8\u7aef\u7528\u6237\u540e\u4e0d\u53ef\u767b\u5f55web\u7aef
socialLogin.account.already.bind.other.wechat.please.unbind=\u8be5\u8d26\u53f7\u5df2\u7ecf\u7ed1\u5b9a\u5176\u4ed6\u5fae\u4fe1\uff0c\u8bf7\u5148\u89e3\u7ed1\u540e\u91cd\u8bd5\uff01
socialLogin.register.fail.please.check.role.exist=\u6ce8\u518c\u5931\u8d25,\u8bf7\u8054\u7cfb\u7ba1\u7406\u4eba\u5458\u68c0\u67e5\u673a\u6784\u89d2\u8272\u662f\u5426\u5b58\u5728
socialLogin.web.not.allow.end.user.login=web\u7aef\u4e0d\u5141\u8bb8\u7ec8\u7aef\u7528\u6237\u767b\u5f55
socialLogin.register.fail.please.check.invitationCode.exist=\u9080\u8bf7\u7801\u9519\u8bef\uff0c\u8bf7\u8054\u7cfb\u673a\u6784\u7ba1\u7406\u5458\u6838\u5bf9
The.organization.to.which.your.account.belongs.has.been.suspended.Please.contact.the.administrator=\u4f60\u7684\u8d26\u53f7\u6240\u5c5e\u673a\u6784\u5df2\u88ab\u505c\u7528\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01
default.institution.has.been.deactivated.contact.administrator=\u9ed8\u8ba4\u673a\u6784\u5df2\u88ab\u505c\u7528\uff0c\u8bf7\u8054\u7cfb\u7ba1\u7406\u5458\uff01
##alert
alert.push.fail.device.not.exist=\u544a\u8b66\u63a8\u9001\uff0c\u8bbe\u5907\u4e0d\u5b58\u5728\uff1a[{}]
##modbus
not.modbus.protocol.please.config.collect.protocol=\u975emodbus\u534f\u8bae\u8bf7\u5148\u914d\u7f6e\u4e3b\u52a8\u91c7\u96c6\u534f\u8bae
modbus.point.not.config=\u672a\u914d\u7f6emodbus\u70b9\u4f4d
##ota
firmwareTask.add.fail.FirmwareTask.exist=\u4efb\u52a1\uff1a[{}]\u5df2\u5b58\u5728
firmware.version.not.exist=\u56fa\u4ef6\u7248\u672c\u4e0d\u5b58\u5728%21
##mqttMessage
mqtt.service.send.device.not.exist=\u670d\u52a1\u4e0b\u53d1\u7684\u8bbe\u5907\uff1a[{}]\u4e0d\u5b58\u5728
mqtt.disconnect.occur.fail=\u65ad\u5f00mqtt\u8fde\u63a5\u53d1\u751f\u9519\u8bef\uff1a[{}]
##genTable
genTable.template.rendering.fail=\u5bfc\u5165\u5931\u8d25\uff1a[{}]
genTable.data.sync.fail.original.table.not.exist=\u540c\u6b65\u6570\u636e\u5931\u8d25\uff0c\u539f\u8868\u7ed3\u6784\u4e0d\u5b58\u5728
genTable.tree.code.field.cannot.empty=\u6811\u7f16\u7801\u5b57\u6bb5\u4e0d\u80fd\u4e3a\u7a7a
genTable.tree.parent.code.field.cannot.empty=\u6811\u7236\u7f16\u7801\u5b57\u6bb5\u4e0d\u80fd\u4e3a\u7a7a
genTable.tree.name.field.cannot.empty=\u6811\u540d\u79f0\u5b57\u6bb5\u4e0d\u80fd\u4e3a\u7a7a
genTable.relate.child.table.name.cannot.empty=\u5173\u8054\u5b50\u8868\u7684\u8868\u540d\u4e0d\u80fd\u4e3a\u7a7a
genTable.child.table.relate.foreign.key.name.cannot.empty=\u5b50\u8868\u5173\u8054\u7684\u5916\u952e\u540d\u4e0d\u80fd\u4e3a\u7a7a
##oauthCode
oauthCode.code.not.exist=code \u4e0d\u5b58\u5728
##protocol
protocol.input.content.is.empty=\u8f93\u5165\u5185\u5bb9\u4e3a\u7a7a
protocol.data.parse.error=\u6570\u636e\u89e3\u6790\u51fa\u9519[{}]
protocol.data.parse.exception=\u6570\u636e\u89e3\u6790\u5f02\u5e38[{}]
protocol.instruction.number.exception=\u6307\u4ee4\u7f16\u53f7\u5f02\u5e38\uff1a[{}]
##modbusJob
modbusJob.add.fail.please.bind.gateway=\u8bf7\u5148\u7ed1\u5b9a\u7f51\u5173
thingsModel.array.or.object.no.need.update=\u6682\u65e0\u9700\u8981\u66f4\u65b0\u7684\u6570\u7ec4\u3001\u5bf9\u8c61\u7c7b\u7269\u6a21\u578b
sync.fail.please.try.again=\u540c\u6b65\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\uff01
sync.success=\u540c\u6b65\u6210\u529f
## scada
scada.product.id.is.null=\u4ea7\u54c1id\u4e3a\u7a7a
scada.scene.id.is.null=\u573a\u666fid\u4e3a\u7a7a
scada.guid.cannot.empty=guid\u4e0d\u80fd\u4e3a\u7a7a
scada.base64.change.image.exception=\u7ec4\u6001base64\u8f6c\u56fe\u7247\u5f02\u5e38:[{}]
scada.please.select.device=\u8bf7\u9009\u62e9\u8bbe\u5907
scada.please.enter.password=\u8bf7\u8f93\u5165\u5bc6\u7801\uff01
scada.please.login=\u672a\u767b\u5f55\uff0c\u8bf7\u767b\u5f55\u540e\u91cd\u8bd5
scada.password.fail.please.reload.enter=\u5bc6\u7801\u9519\u8bef\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165\uff01
scada.product.has.relate.please.select.again=\u8be5\u4ea7\u54c1\u5df2\u7ecf\u5173\u8054\u7ec4\u6001\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\uff01
scada.scene.has.relate.please.select.again=\u8be5\u573a\u666f\u5df2\u7ecf\u5173\u8054\u7ec4\u6001\uff0c\u8bf7\u91cd\u65b0\u9009\u62e9\uff01
scada.not.allow.view.other.tenant.config=\u4e0d\u5141\u8bb8\u67e5\u770b\u5176\u4ed6\u79df\u6237\u7684\u7ec4\u6001\uff01
scada.upload.gallery.file.fail=\u4e0a\u4f20\u56fe\u5e93\u6587\u4ef6\u5f02\u5e38\uff0c[{}]
scada.upload.fail=\u4e0a\u4f20\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5\uff01
scada.invalid.profile=\u65e0\u6548\u7684\u914d\u7f6e\u6587\u4ef6
scada.import.success.need.replace.variable=\u5bfc\u5165\u6210\u529f\uff0c\u5f53\u524d\u9875\u9762\u9700\u8981\u91cd\u65b0\u66ff\u6362\u7ed1\u5b9a\u7ec4\u4ef6\u7684\u53d8\u91cf\uff01
## speaker
speaker.product.has.relate=\u8be5\u4ea7\u54c1\u5df2\u5173\u8054\uff0c\u8bf7\u52ff\u91cd\u590d\u5173\u8054
speaker.product.relate.add.fail=\u65b0\u589e\u5931\u8d25
speaker.not.found.product.relate=\u672a\u67e5\u8be2\u5230\u4ea7\u54c1\u5173\u8054\u4fe1\u606f
##file
file.content.is.empty=\u6587\u4ef6\u5185\u5bb9\u4e3a\u7a7a
file.is.invalid=\u65e0\u6548\u7684\u6587\u4ef6
## workOrder
workOrder.please.select.user=\u8bf7\u6307\u5b9a\u8054\u7cfb\u4eba
workOrder.please.fill.result.info=\u8bf7\u586b\u5199\u7ed3\u5355\u4fe1\u606f
## subGateway
subGateway.subDeviceAddress.is.repeat=\u5b58\u5728\u76f8\u540c\u7684\u5b50\u8bbe\u5907\u5730\u5740\uff0c\u8bf7\u4fee\u6539\u540e\u91cd\u8bd5\uff01