Commit d7e023dd LN

国际化修改

1 个父辈 60e107a5
package com.neotel.smfcore.core.language.util; package com.neotel.smfcore.core.language.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.MessageSource; import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -13,6 +14,7 @@ import java.util.Locale; ...@@ -13,6 +14,7 @@ import java.util.Locale;
* Created by sunke on 2021/7/30. * Created by sunke on 2021/7/30.
*/ */
@Component @Component
@Slf4j
public class MessageUtils { public class MessageUtils {
private static MessageSource messageSource; private static MessageSource messageSource;
...@@ -33,6 +35,7 @@ public class MessageUtils { ...@@ -33,6 +35,7 @@ public class MessageUtils {
return messageSource.getMessage(msgKey,params, locale); return messageSource.getMessage(msgKey,params, locale);
} }
}catch (Exception ex){ }catch (Exception ex){
log.error("获取资源["+msgKey+"]["+defaultMsg+"]["+locale.getLanguage()+"]出错:"+ex.toString());
if(defaultMsg != null){ if(defaultMsg != null){
return defaultMsg; return defaultMsg;
} }
......
...@@ -43,6 +43,7 @@ import org.springframework.security.access.prepost.PreAuthorize; ...@@ -43,6 +43,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -68,16 +69,17 @@ public class MenuController { ...@@ -68,16 +69,17 @@ public class MenuController {
@GetMapping(value = "/build") @GetMapping(value = "/build")
@ApiOperation("获取前端所需菜单") @ApiOperation("获取前端所需菜单")
@AnonymousAccess @AnonymousAccess
public ResponseEntity<Object> buildMenus() { public ResponseEntity<Object> buildMenus(HttpServletRequest servletRequest) {
String userId = "1"; String userId = "1";
try { try {
userId = SecurityUtils.getCurrentUserId(); userId = SecurityUtils.getCurrentUserId();
} catch (Exception ex) { } catch (Exception ex) {
log.error("获取当前用户出错:" + ex); log.error("获取当前用户出错:" + ex);
} }
String language= servletRequest.getLocale().getLanguage();
List<Menu> menuList = menuManager.findByUserId(userId); List<Menu> menuList = menuManager.findByUserId(userId);
List<MenuDto> menuDtoList = menuMapper.toDto(menuManager.buildTree(menuList)); List<MenuDto> menuDtoList = menuMapper.toDto(menuManager.buildTree(menuList));
List<MenuVo> vos = menuManager.buildMenus(menuDtoList); List<MenuVo> vos = menuManager.buildMenus(menuDtoList,language);
return new ResponseEntity<>(vos, HttpStatus.OK); return new ResponseEntity<>(vos, HttpStatus.OK);
} }
......
package com.neotel.smfcore.security.rest.bean.dto; package com.neotel.smfcore.security.rest.bean.dto;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.security.service.po.Menu; import com.neotel.smfcore.security.service.po.Menu;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Getter; import lombok.Getter;
...@@ -77,4 +78,11 @@ public class MenuDto implements Serializable { ...@@ -77,4 +78,11 @@ public class MenuDto implements Serializable {
public String getPermission(){return permission;} public String getPermission(){return permission;}
public String GetMsgKey() {
String titleKey= (ObjectUtil.isNotEmpty(getTitleKey())? getTitleKey():getPath());
if(!titleKey.startsWith("smfcore.")){
titleKey="smfcore."+titleKey.trim();
}
return titleKey;
}
} }
...@@ -39,7 +39,7 @@ public interface IMenuManager extends IBaseManager<Menu> { ...@@ -39,7 +39,7 @@ public interface IMenuManager extends IBaseManager<Menu> {
* @param menuDtos / * @param menuDtos /
* @return / * @return /
*/ */
List<MenuVo> buildMenus(List<MenuDto> menuDtos); List<MenuVo> buildMenus(List<MenuDto> menuDtos,String language);
/** /**
* 懒加载菜单数据 * 懒加载菜单数据
......
...@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.bean.PageData; ...@@ -6,6 +6,7 @@ import com.neotel.smfcore.common.bean.PageData;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil; import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.common.utils.StringUtils; import com.neotel.smfcore.common.utils.StringUtils;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.security.rest.bean.dto.MenuDto; import com.neotel.smfcore.security.rest.bean.dto.MenuDto;
import com.neotel.smfcore.security.rest.bean.vo.MenuMetaVo; import com.neotel.smfcore.security.rest.bean.vo.MenuMetaVo;
import com.neotel.smfcore.security.rest.bean.vo.MenuVo; import com.neotel.smfcore.security.rest.bean.vo.MenuVo;
...@@ -16,6 +17,8 @@ import com.neotel.smfcore.security.service.manager.IUserManager; ...@@ -16,6 +17,8 @@ import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Menu; import com.neotel.smfcore.security.service.po.Menu;
import com.neotel.smfcore.security.service.po.Role; import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User; import com.neotel.smfcore.security.service.po.User;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.util.StringUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
...@@ -29,6 +32,7 @@ import java.util.*; ...@@ -29,6 +32,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@Slf4j
public class MenuManagerImpl implements IMenuManager { public class MenuManagerImpl implements IMenuManager {
@Autowired @Autowired
...@@ -113,13 +117,18 @@ public class MenuManagerImpl implements IMenuManager { ...@@ -113,13 +117,18 @@ public class MenuManagerImpl implements IMenuManager {
} }
@Override @Override
public List<MenuVo> buildMenus(List<MenuDto> menuDtos) { public List<MenuVo> buildMenus(List<MenuDto> menuDtos,String language) {
List<MenuVo> list=new LinkedList<>() ; List<MenuVo> list=new LinkedList<>() ;
menuDtos.forEach(menuDto -> { menuDtos.forEach(menuDto -> {
if(menuDto!=null && menuDto.getType()<=1){ if(menuDto!=null && menuDto.getType()<=1){
List<MenuDto> menuDtoList=menuDto.getChildren(); List<MenuDto> menuDtoList=menuDto.getChildren();
MenuVo menuVo=new MenuVo(); MenuVo menuVo=new MenuVo();
menuVo.setName(ObjectUtil.isNotEmpty(menuDto.getComponentName())?menuDto.getComponentName():menuDto.getTitle()); String oldName=ObjectUtil.isNotEmpty(menuDto.getComponentName())?menuDto.getComponentName():menuDto.getTitle();
String titleKey=menuDto.GetMsgKey();
String title= MessageUtils.getText(titleKey, new Locale(language),oldName);
// log.info(titleKey+"="+title);
menuVo.setName(title);
boolean pidIsNull=(menuDto.getPid()==null)||(StringUtils.isBlank(menuDto.getPid())||menuDto.getPid().equals("0")); boolean pidIsNull=(menuDto.getPid()==null)||(StringUtils.isBlank(menuDto.getPid())||menuDto.getPid().equals("0"));
// 一级目录需要加斜杠,不然会报警告 // 一级目录需要加斜杠,不然会报警告
menuVo.setPath(pidIsNull?"/"+menuDto.getPath():menuDto.getPath()); menuVo.setPath(pidIsNull?"/"+menuDto.getPath():menuDto.getPath());
...@@ -134,11 +143,11 @@ public class MenuManagerImpl implements IMenuManager { ...@@ -134,11 +143,11 @@ public class MenuManagerImpl implements IMenuManager {
menuVo.setComponent(menuDto.getComponent()); menuVo.setComponent(menuDto.getComponent());
} }
} }
menuVo.setMeta(new MenuMetaVo(menuDto.getTitle(), menuDto.getIcon(),!menuDto.getCache())); menuVo.setMeta(new MenuMetaVo(title, menuDto.getIcon(),!menuDto.getCache()));
if(CollectionUtil.isNotEmpty(menuDtoList)){ if(CollectionUtil.isNotEmpty(menuDtoList)){
menuVo.setAlwaysShow(true); menuVo.setAlwaysShow(true);
menuVo.setRedirect("noredirect"); menuVo.setRedirect("noredirect");
menuVo.setChildren(buildMenus(menuDtoList)); menuVo.setChildren(buildMenus(menuDtoList,language));
}else if (pidIsNull) { }else if (pidIsNull) {
MenuVo menuVo1=new MenuVo(); MenuVo menuVo1=new MenuVo();
menuVo1.setMeta(menuVo.getMeta()); menuVo1.setMeta(menuVo.getMeta());
...@@ -256,6 +265,9 @@ public class MenuManagerImpl implements IMenuManager { ...@@ -256,6 +265,9 @@ public class MenuManagerImpl implements IMenuManager {
if(menu.getPath()==null){ if(menu.getPath()==null){
menu.setPath(""); menu.setPath("");
} }
if( menu.getTitleKey()==null){
menu.setTitleKey(menu.getPath());
}
Criteria c=Criteria.where("path").is(menu.getPath()); Criteria c=Criteria.where("path").is(menu.getPath());
String logName="新增菜单:"; String logName="新增菜单:";
if(menu.getId()!=null){ if(menu.getId()!=null){
......
...@@ -54,12 +54,30 @@ smfcore.ok=ok ...@@ -54,12 +54,30 @@ smfcore.ok=ok
smfcore.shelfNotExist={0}\u5BF9\u5E94\u7684\u6599\u67B6\u4E0D\u5B58\u5728 smfcore.shelfNotExist={0}\u5BF9\u5E94\u7684\u6599\u67B6\u4E0D\u5B58\u5728
smfcore.inputError=\u5165\u5E93\u51FA\u9519:{0} smfcore.inputError=\u5165\u5E93\u51FA\u9519:{0}
smfcore.checkoutError=\u51FA\u5E93\u51FA\u9519:{0} smfcore.checkoutError=\u51FA\u5E93\u51FA\u9519:{0}
smfcore.notask=No task in this order smfcore.notask=\u8BA2\u5355\u65E0\u4EFB\u52A1
smfcore.taskCount=total task is :{0} smfcore.taskCount=\u4EFB\u52A1\u603B\u6570 :{0}
smfcore.noconnecttion=no connecttion smfcore.noconnecttion=\u672A\u8FDE\u63A5
smfcore.loadMaterialFailed=loading material failed:{0} smfcore.loadMaterialFailed=\u8BBE\u5907\u52A0\u8F7D\u5931\u8D25:{0}
smfcore.checkNg=checking material is ng:{0} smfcore.checkNg=\u8BBE\u5907\u9A8C\u8BC1\u5931\u8D25:{0}
smfcore.loadMaterialFinished=loading material is finished: {0} smfcore.loadMaterialFinished=\u8BBE\u5907\u52A0\u8F7D\u5B8C\u6210: {0}
smfcore.lockMaterial=\u9501\u5B9A\u7269\u6599
smfcore.lightGroup=\u6599\u67B6\u5206\u7EC4
smfcore.order=\u5DE5\u5355\u7BA1\u7406
smfcore.workOrder=\u5DE5\u5355
smfcore.singleOuput=\u67E5\u627E\u51FA\u5E93
smfcore.system=\u8BBE\u7F6E
smfcore.bunker=\u6599\u4ED3\u7BA1\u7406
smfcore.storagePos=\u5E93\u4F4D\u7BA1\u7406
smfcore.menu=\u83DC\u5355\u7BA1\u7406
smfcore.materiel =\u7269\u6599\u7BA1\u7406
smfcore.componentParts=\u5143\u5668\u4EF6
smfcore.barcode=\u6761\u5F62\u7801
smfcore.log=\u65E5\u5FD7\u7BA1\u7406
smfcore.taskLog=\u7269\u6599\u65E5\u5FD7
smfcore.user=\u7528\u6237\u7BA1\u7406
smfcore.peoples=\u7528\u6237\u7BA1\u7406
smfcore.role=\u89D2\u8272\u7BA1\u7406
......
...@@ -60,3 +60,20 @@ smfcore.noconnecttion=No connecttion ...@@ -60,3 +60,20 @@ smfcore.noconnecttion=No connecttion
smfcore.loadMaterialFailed=Loading material failed:{0} smfcore.loadMaterialFailed=Loading material failed:{0}
smfcore.checkNg=checking material is ng:{0} smfcore.checkNg=checking material is ng:{0}
smfcore.loadMaterialFinished=Loading material finished: {0} smfcore.loadMaterialFinished=Loading material finished: {0}
smfcore.lockMaterial=Lock Material
smfcore.lightGroup=Neo Light Grouping
smfcore.order=Work Order Management
smfcore.workOrder=Work Order
smfcore.singleOuput=Check to Retrieve
smfcore.system=Set
smfcore.bunker=SMD BOX Management
smfcore.storagePos=Position Management
smfcore.menu=Menu Management
smfcore.materiel =Material Management
smfcore.componentParts=Component
smfcore.barcode=Barcode
smfcore.log=Log Management
smfcore.taskLog=Material Log
smfcore.user=User Management
smfcore.peoples=User Management
smfcore.role=Role Management
...@@ -60,3 +60,21 @@ smfcore.noconnecttion=\u672A\u8FDE\u63A5 ...@@ -60,3 +60,21 @@ smfcore.noconnecttion=\u672A\u8FDE\u63A5
smfcore.loadMaterialFailed=\u8BBE\u5907\u52A0\u8F7D\u5931\u8D25:{0} smfcore.loadMaterialFailed=\u8BBE\u5907\u52A0\u8F7D\u5931\u8D25:{0}
smfcore.checkNg=\u8BBE\u5907\u9A8C\u8BC1\u5931\u8D25:{0} smfcore.checkNg=\u8BBE\u5907\u9A8C\u8BC1\u5931\u8D25:{0}
smfcore.loadMaterialFinished=\u8BBE\u5907\u52A0\u8F7D\u5B8C\u6210: {0} smfcore.loadMaterialFinished=\u8BBE\u5907\u52A0\u8F7D\u5B8C\u6210: {0}
smfcore.lockMaterial=\u9501\u5B9A\u7269\u6599
smfcore.lightGroup=\u6599\u67B6\u5206\u7EC4
smfcore.order=\u5DE5\u5355\u7BA1\u7406
smfcore.workOrder=\u5DE5\u5355
smfcore.singleOuput=\u67E5\u627E\u51FA\u5E93
smfcore.system=\u8BBE\u7F6E
smfcore.bunker=\u6599\u4ED3\u7BA1\u7406
smfcore.storagePos=\u5E93\u4F4D\u7BA1\u7406
smfcore.menu=\u83DC\u5355\u7BA1\u7406
smfcore.materiel =\u7269\u6599\u7BA1\u7406
smfcore.componentParts=\u5143\u5668\u4EF6
smfcore.barcode=\u6761\u5F62\u7801
smfcore.log=\u65E5\u5FD7\u7BA1\u7406
smfcore.taskLog=\u7269\u6599\u65E5\u5FD7
smfcore.user=\u7528\u6237\u7BA1\u7406
smfcore.peoples=\u7528\u6237\u7BA1\u7406
smfcore.role=\u89D2\u8272\u7BA1\u7406
smfcode.valueCanotNull={0}\u4E0D\u80FD\u7232\u7A7A
smfcode.feleFormatError=\u6587\u4EF6\u683C\u5F0F\u932F\u8AA4\uFF01, \u50C5\u652F\u6301{0}\u683C\u5F0F
smfcode.valueAlreadyExist={0}[{1}]\u5DF2\u5B58\u5728
smfcode.valueNotExist={0}[{1}]\u4E0D\u5B58\u5728
smfcode.fileToLong=\u6587\u4EF6\u8D85\u51FA\u898F\u5B9A\u5927\u5C0F
smfcode.fileError=\u6587\u4EF6\u89E3\u6790\u5931\u6557
smfcode.valueNotFind=\u672A\u627E\u5230{0}[{1}]
smfcode.humidityValueError=\u6EAB\u5EA6\u7BC4\u570D\u6578\u64DA\u932F\u8AA4
smfcode.humidityShowValueError=\u6EAB\u5EA6\u986F\u793A\u7BC4\u570D\u6578\u64DA\u932F\u8AA4
smfcode.temperatureValueError=\u6FD5\u5EA6\u7BC4\u570D\u6578\u64DA\u932F\u8AA4
smfcode.temperatureShowValueError=\u6FD5\u5EA6\u986F\u793A\u7BC4\u570D\u6578\u64DA\u932F\u8AA4
smfcode.notActivated=\u8CEC\u865F\u672A\u6FC0\u6D3B
smfcode.userInfoError=\u7528\u6236\u4FE1\u606F\u4E0D\u5B8C\u6574
smfcode.noaccess=\u7121\u6B0A\u9650\u4FEE\u6539\u6B64\u89D2\u8272\u7684\u83DC\u55AE
smfcode.notSelRole=\u8ACB\u8981\u4FEE\u6539\u7684\u9078\u64C7\u89D2\u8272
smfcode.posIsused=\u6599\u5009[{0}]\u7684\u5EAB\u4F4D[{1}}]\u6709\u6599[{2}],\u522A\u9664\u5931\u6557
smfcode.thePosIsused= \u5EAB\u4F4D[{0}]\u6709\u6599[{1}],\u4E0D\u80FD\u522A\u9664
smfcode.groupWithStorage=\u7D44[{0}]\u5DF2\u548C\u8A2D\u5099\u95DC\u806F
smfcode.groupWithUser=\u7D44[{0}]\u5DF2\u548C\u7528\u6236\u95DC\u806F
smfcode.canotDelSelf=\u522A\u9664\u7528\u6236\uFF1A\u4E0D\u80FD\u522A\u9664\u81EA\u5DF1
smfcode.canotDelUser=\u522A\u9664\u7528\u6236\uFF1A\u6B64\u7528\u6236\u4E0D\u80FD\u522A\u9664
smfcode.oldPwdError=\u4FEE\u6539\u5931\u6557\uFF0C\u820A\u5BC6\u78BC\u932F\u8AA4
smfcode.newPwdError=\u65B0\u5BC6\u78BC\u4E0D\u80FD\u8207\u820A\u5BC6\u78BC\u76F8\u540C
smfcode.pwdError=\u4FEE\u6539\u90F5\u7BB1\u5931\u6557\uFF0C\u5BC6\u78BC\u932F\u8AA4
smfcode.hasNoAccess=\u7121\u6B0A\u9650\u4FEE\u6539\u6B64\u7528\u6236\u4FE1\u606F
smfcode.noAccessUpdate=\u6C92\u6709\u522A\u9664\u83DC\u55AE\u7684\u6B0A\u9650
smfcode.roleCannotDel=\u89D2\u8272[{0}]\u6709[{1}]\u500B\u7528\u6236\u95DC\u806F\u6539\u89D2\u8272,\u4E0D\u80FD\u522A\u9664
smfcore.notFindPos=\u672A\u627E\u5230\u9396\u5B9A\u5EAB\u4F4D
smfcore.error.barcode.empty=\u672A\u6383\u5230\u689D\u78BC
smfcore.error.barcode.many=\u627E\u5230\u591A\u500B\u6709\u6548\u689D\u78BC,\u7121\u6CD5\u5165\u5EAB
smfcore.error.barcode.expired=\u7269\u6599\u5DF2\u904E\u671F,\u7121\u6CD5\u5165\u5EAB.
smfcore.allBoxView.noReel=\u5EAB\u4F4D\u4E2D\u7121\u7269\u6599
smfcode.error.barcode.many=\u627E\u5230\u591A\u500B\u6709\u6548\u7684\u689D\u78BC
smfcode.error.barcode.noValidCode=\u7121\u6548\u7684\u689D\u78BC
smfcore.error.barcode.noValidCode={0}\u4E0D\u662F\u6709\u6548\u7684\u689D\u78BC
smfcode.error.barcode.executing=\u689D\u78BC[{0}}]\u4EFB\u52D9\u6B63\u5728\u57F7\u884C
smfcode.error.pos.notExist=\u5EAB\u4F4D[{0}]\u4E0D\u5B58\u5728,\u7121\u6CD5\u5165\u5EAB
smfcode.error.pos.wrong=\u5EAB\u4F4D[{0}]\u8207\u6599\u5009[{1}}]\u4E0D\u5339\u914D,\u7121\u6CD5\u5165\u5EAB
smfcode.error.pos.hasReel=\u5EAB\u4F4D[{0}]\u4E2D\u5DF2\u6709\u7269\u6599,\u7121\u6CD5\u5165\u5EAB
smfcode.error.pos.sizeNotMatch=\u6599\u76E4\u5C3A\u5BF8[{0}}]\u8207\u5EAB\u4F4D{1}\u5C3A\u5BF8[{2}]\u4E0D\u7B26,\u7121\u6CD5\u5165\u5EAB
smfcode.error.storage.offline=\u6599\u5009[{0}]\u96E2\u7DDA
smfcode.error.barcode.invalid=\u689D\u78BC\u7121\u6548
smfcode.error.barcode.wrongSize=\u5C3A\u5BF8[{0}]\u4E0D\u7B26
smfcode.error.barcode.wrongQty=\u689D\u78BC[{0}]\u5C0D\u61C9\u7684\u6578\u91CF<=0\u7232: {1}
smfcode.error.barcode.taskNotEnd=\u6599\u76E4[{0}]\u7684\u64CD\u4F5C\u672A\u5B8C\u6210,\u7121\u6CD5\u57F7\u884C\u5165\u5EAB\u64CD\u4F5C
smfcode.error.columnNotExist=\u5FC5\u9808\u5305\u542B[{0}\u5217
smfcore.storage.error.notExist=\u672A\u627E\u5230\u6599\u5009{0}
smfcode.error.barcode.inQueue=\u4E8C\u7DAD\u78BC[{0}]\u5DF2\u5728\u64CD\u4F5C\u968A\u5217\u4E2D\uFF0C\u64CD\u4F5C\u5931\u6557
smfcode.error.pos.inQueue=\u4F4D\u7F6E:[{0}}]\u5DF2\u5728\u64CD\u4F5C\u968A\u5217\u4E2D,\u64CD\u4F5C\u5931\u6557
smfcode.columnNotExist=\u5FC5\u9808\u5305\u542B[{0}\u5217
smfcore.conotUpdate=\u7528\u6236\u540Dadmin\u4E0D\u80FD\u4FEE\u6539
smfcore.unfinished=\u689D\u78BC[{0}]\u7684\u4EFB\u52D9\u9084\u672A\u7D50\u675F
smfcore.ok=ok
smfcore.shelfNotExist={0}\u5C0D\u61C9\u7684\u6599\u67B6\u4E0D\u5B58\u5728
smfcore.inputError=\u5165\u5EAB\u51FA\u932F:{0}
smfcore.checkoutError=\u51FA\u5EAB\u51FA\u932F:{0}
smfcore.notask=\u8A02\u55AE\u7121\u4EFB\u52D9
smfcore.taskCount=\u4EFB\u52D9\u7E3D\u6578 :{0}
smfcore.noconnecttion=\u672A\u9023\u63A5
smfcore.loadMaterialFailed=\u8A2D\u5099\u52A0\u8F09\u5931\u6557:{0}
smfcore.checkNg=\u8A2D\u5099\u9A57\u8B49\u5931\u6557:{0}
smfcore.loadMaterialFinished=\u8A2D\u5099\u52A0\u8F09\u5B8C\u6210: {0}
smfcore.lockMaterial=\u9396\u5B9A\u7269\u6599
smfcore.lightGroup=\u6599\u67B6\u5206\u7D44
smfcore.order=\u5DE5\u55AE\u7BA1\u7406
smfcore.workOrder=\u5DE5\u55AE
smfcore.singleOuput=\u67E5\u627E\u51FA\u5EAB
smfcore.system=\u8A2D\u7F6E
smfcore.bunker=\u6599\u5009\u7BA1\u7406
smfcore.storagePos=\u5EAB\u4F4D\u7BA1\u7406
smfcore.menu=\u83DC\u55AE\u7BA1\u7406
smfcore.materiel =\u7269\u6599\u7BA1\u7406
smfcore.componentParts=\u5143\u5668\u4EF6
smfcore.barcode=\u689D\u5F62\u78BC
smfcore.log=\u65E5\u5FD7\u7BA1\u7406
smfcore.taskLog=\u7269\u6599\u65E5\u5FD7
smfcore.user=\u7528\u6236\u7BA1\u7406
smfcore.peoples=\u7528\u6236\u7BA1\u7406
smfcore.role=\u89D2\u8272\u7BA1\u7406
\ No newline at end of file \ No newline at end of file
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!