Commit cc9c50f7 LN

提示信息增加国际化处理。获取库位号的提示自动加入警告消息列表

1 个父辈 8c19f16b
...@@ -2,21 +2,15 @@ package com.neotel.smfcore.common.init; ...@@ -2,21 +2,15 @@ package com.neotel.smfcore.common.init;
import com.neotel.smfcore.common.utils.PermissionInitUtil; import com.neotel.smfcore.common.utils.PermissionInitUtil;
import com.neotel.smfcore.common.utils.Constants; import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.UserCodeUtil;
import com.neotel.smfcore.core.inList.util.InListCache; import com.neotel.smfcore.core.inList.util.InListCache;
import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import com.neotel.smfcore.core.order.util.OrderFileWatch; import com.neotel.smfcore.core.order.util.OrderFileWatch;
import com.neotel.smfcore.core.system.service.manager.IDataLogManager;
import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.manager.IMenuManager; import com.neotel.smfcore.security.service.manager.IMenuManager;
import com.neotel.smfcore.security.service.manager.IRoleManager; import com.neotel.smfcore.security.service.manager.IRoleManager;
import com.neotel.smfcore.security.service.manager.IUserManager; import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.manager.impl.GroupManagerImpl;
import com.neotel.smfcore.security.service.manager.impl.MenuManagerImpl;
import com.neotel.smfcore.security.service.manager.impl.RoleManagerImpl;
import com.neotel.smfcore.security.service.manager.impl.UserManagerImpl;
import com.neotel.smfcore.security.service.po.Group;
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;
...@@ -28,9 +22,7 @@ import org.springframework.data.mongodb.core.query.Query; ...@@ -28,9 +22,7 @@ import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.jws.soap.SOAPBinding;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit;
@Slf4j @Slf4j
@Component @Component
...@@ -57,7 +49,8 @@ public class DataInitManager { ...@@ -57,7 +49,8 @@ public class DataInitManager {
@Autowired @Autowired
private InListCache inListCache; private InListCache inListCache;
@Autowired
private IMessageManager messageManager;
/** /**
* 当前版本 * 当前版本
*/ */
...@@ -120,6 +113,9 @@ public class DataInitManager { ...@@ -120,6 +113,9 @@ public class DataInitManager {
allPermissionSet= annotationUtil.initPermission(); allPermissionSet= annotationUtil.initPermission();
inListCache.loadMap(); inListCache.loadMap();
Message message=Message.newMsg(MessageType.INFO ,"server", "", "", "smfcore.messages.serverStart","服务器启动",null);
messageManager.save(message);
} catch (Exception exception) { } catch (Exception exception) {
log.error("初始化环境出错..." + exception.toString()); log.error("初始化环境出错..." + exception.toString());
} }
...@@ -254,7 +250,8 @@ public class DataInitManager { ...@@ -254,7 +250,8 @@ public class DataInitManager {
//日志管理:物料日志 //日志管理:物料日志
Menu pMenuLog = Menu.CreatePMenu("日志管理", 30, "log", 2, "log"); Menu pMenuLog = Menu.CreatePMenu("日志管理", 30, "log", 2, "log");
Menu menuLog = new Menu(new ArrayList<Menu>(), 1, "taskLog", "物料日志", 1, "taskLog", "neolight/taskLog/index", "", 0, "education"); Menu menuLog = new Menu(new ArrayList<Menu>(), 1, "taskLog", "物料日志", 1, "taskLog", "neolight/taskLog/index", "", 0, "education");
menus.addAll(createMenus(pMenuLog, menuLog)); Menu msgLog = new Menu(new ArrayList<Menu>(), 1, "message", "消息查询", 1, "message", "neolight/message/index", "", 0, "messagefind");
menus.addAll(createMenus(pMenuLog, menuLog,msgLog));
//报表:出入库、库存 //报表:出入库、库存
Menu pMenuReport = Menu.CreatePMenu("报表", 30, "report", 2, "inOutData"); Menu pMenuReport = Menu.CreatePMenu("报表", 30, "report", 2, "inOutData");
......
...@@ -12,12 +12,13 @@ import com.neotel.smfcore.common.utils.Constants; ...@@ -12,12 +12,13 @@ import com.neotel.smfcore.common.utils.Constants;
import com.neotel.smfcore.common.utils.ReelLockPosUtil; import com.neotel.smfcore.common.utils.ReelLockPosUtil;
import com.neotel.smfcore.core.barcode.service.po.Barcode; import com.neotel.smfcore.core.barcode.service.po.Barcode;
import com.neotel.smfcore.core.barcode.utils.CodeResolve; import com.neotel.smfcore.core.barcode.utils.CodeResolve;
import com.neotel.smfcore.core.storage.service.dao.IStoragePosDao; import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
import com.neotel.smfcore.core.system.service.dao.IAlarmInfoDao; import com.neotel.smfcore.core.system.service.dao.IAlarmInfoDao;
import com.neotel.smfcore.core.system.service.po.AlarmInfo; import com.neotel.smfcore.core.system.service.po.AlarmInfo;
import com.neotel.smfcore.core.system.service.po.DataLog; import com.neotel.smfcore.core.system.service.po.DataLog;
import com.neotel.smfcore.core.system.util.DevicesStatusUtil;
import com.neotel.smfcore.core.system.util.TaskService; import com.neotel.smfcore.core.system.util.TaskService;
import com.neotel.smfcore.security.annotation.AnonymousAccess; import com.neotel.smfcore.security.annotation.AnonymousAccess;
import com.neotel.smfcore.core.storage.enums.DeviceType; import com.neotel.smfcore.core.storage.enums.DeviceType;
...@@ -117,7 +118,7 @@ public class DeviceController { ...@@ -117,7 +118,7 @@ public class DeviceController {
if (dataCahche.getCache(Constants.CACHE_StopOut)) { if (dataCahche.getCache(Constants.CACHE_StopOut)) {
lineMsg = "系统更新中,暂停出入库"; lineMsg = "系统更新中,暂停出入库";
DataCache.lineMsg=lineMsg; DeviceMessageUtil.updateLineMsg(lineMsg,code,cids,"" ,"smfcore.linemsg.update",null);
resultMap.put("result", "100"); resultMap.put("result", "100");
resultMap.put("msg", lineMsg); resultMap.put("msg", lineMsg);
return resultMap; return resultMap;
...@@ -250,7 +251,8 @@ public class DeviceController { ...@@ -250,7 +251,8 @@ public class DeviceController {
if (reelLocInfo == null) { if (reelLocInfo == null) {
errorMsg = "[" + barcode.getBarcode() + "]库位["+reelLocInfo.getLockPosName()+"]已被锁定,暂停入库"; errorMsg = "[" + barcode.getBarcode() + "]库位["+reelLocInfo.getLockPosName()+"]已被锁定,暂停入库";
lineMsg = errorMsg; lineMsg = errorMsg;
DataCache.lineMsg=lineMsg;
DeviceMessageUtil.updateLineMsg(lineMsg,code,cids, reelLocInfo.getLockPosName(),"smfcore.linemsg.posLock",new String[]{barcode.getBarcode(),reelLocInfo.getLockPosName()});
resultMap.put("result", "99"); resultMap.put("result", "99");
resultMap.put("msg", errorMsg); resultMap.put("msg", errorMsg);
return resultMap; return resultMap;
...@@ -295,7 +297,8 @@ public class DeviceController { ...@@ -295,7 +297,8 @@ public class DeviceController {
alarmInfo.setAlarmMsg(msg); alarmInfo.setAlarmMsg(msg);
alarmInfoDao.save(alarmInfo); alarmInfoDao.save(alarmInfo);
lineMsg = errorMsg; lineMsg = errorMsg;
DataCache.lineMsg=errorMsg;
DeviceMessageUtil.updateLineMsg(lineMsg,code,cids,"","",null );
} else { } else {
lineMsg = okMsg; lineMsg = okMsg;
} }
......
...@@ -76,10 +76,7 @@ public class DataCache { ...@@ -76,10 +76,7 @@ public class DataCache {
* 出库方式 * 出库方式
*/ */
private static Settings settings; private static Settings settings;
/**
* 流水线提示消息,只保存最后一条
*/
public static String lineMsg="";
@PostConstruct @PostConstruct
......
...@@ -17,6 +17,7 @@ import com.neotel.smfcore.core.device.util.DataCache; ...@@ -17,6 +17,7 @@ import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.kanban.rest.bean.dto.*; import com.neotel.smfcore.core.kanban.rest.bean.dto.*;
import com.neotel.smfcore.core.kanban.rest.bean.mapstruct.BoxTaskMapper; import com.neotel.smfcore.core.kanban.rest.bean.mapstruct.BoxTaskMapper;
import com.neotel.smfcore.core.kanban.rest.bean.query.BoxTaskQueryCriter; import com.neotel.smfcore.core.kanban.rest.bean.query.BoxTaskQueryCriter;
import com.neotel.smfcore.core.message.util.DeviceMessageUtil;
import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager; import com.neotel.smfcore.core.storage.service.manager.IStoragePosManager;
import com.neotel.smfcore.core.storage.service.po.Storage; import com.neotel.smfcore.core.storage.service.po.Storage;
import com.neotel.smfcore.core.storage.service.po.StoragePos; import com.neotel.smfcore.core.storage.service.po.StoragePos;
...@@ -79,7 +80,7 @@ public class BoxKanbanController { ...@@ -79,7 +80,7 @@ public class BoxKanbanController {
public BoxKanbanDto info(HttpServletRequest servletRequest) { public BoxKanbanDto info(HttpServletRequest servletRequest) {
List<DataLog> allTasks=taskService.getAllTasks(); List<DataLog> allTasks=taskService.getAllTasks();
BoxKanbanDto boxKanbanDto = getKanBan(allTasks); BoxKanbanDto boxKanbanDto = getKanBan(allTasks,servletRequest.getLocale());
String userId = SecurityUtils.getCurrentUserId(); String userId = SecurityUtils.getCurrentUserId();
User user = userManager.get(userId); User user = userManager.get(userId);
...@@ -387,7 +388,7 @@ public class BoxKanbanController { ...@@ -387,7 +388,7 @@ public class BoxKanbanController {
throw new ValidateException("smfcore.posNotExist", "仓位不存在"); throw new ValidateException("smfcore.posNotExist", "仓位不存在");
} }
private BoxKanbanDto getKanBan(List<DataLog> allTasks) { private BoxKanbanDto getKanBan(List<DataLog> allTasks,Locale local) {
int allCount = allTasks.size(); int allCount = allTasks.size();
int abnormal = 0; int abnormal = 0;
...@@ -411,7 +412,11 @@ public class BoxKanbanController { ...@@ -411,7 +412,11 @@ public class BoxKanbanController {
allcount++; allcount++;
} }
// DataCache.lineMsg="系统更新中,暂停出入库"; // DataCache.lineMsg="系统更新中,暂停出入库";
BoxKanbanDto kanbanDto = new BoxKanbanDto(allCount, normal, abnormal,waitCount, new ArrayList<>(),DataCache.lineMsg); String lineMsg=null;
if(DeviceMessageUtil.lastLineMsg!=null){
lineMsg=DeviceMessageUtil.lastLineMsg.getShowMsg(local);
}
BoxKanbanDto kanbanDto = new BoxKanbanDto(allCount, normal, abnormal,waitCount, new ArrayList<>(), lineMsg);
return kanbanDto; return kanbanDto;
} }
...@@ -446,7 +451,7 @@ public class BoxKanbanController { ...@@ -446,7 +451,7 @@ public class BoxKanbanController {
if (bean.timeOut()) { if (bean.timeOut()) {
boxDto.setOnLine(false); boxDto.setOnLine(false);
for (BoxStatusBean boxStatus : bean.getBoxStatus().values()) { for (BoxStatusBean boxStatus : bean.getBoxStatus().values()) {
boxDto.setMsg(bean.getShowMsg(locale)); // boxDto.setMsg(bean.getShowMsg(locale));
boxDto.setBarcode(bean.getCode()); boxDto.setBarcode(bean.getCode());
boxDto.setPosName(bean.getPosId()); boxDto.setPosName(bean.getPosId());
break; break;
......
package com.neotel.smfcore.core.language.util; package com.neotel.smfcore.core.language.util;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.support.ResourceBundleMessageSource; import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*; import java.util.*;
@Service @Service
@Slf4j
public class MyMessageSource extends ResourceBundleMessageSource { public class MyMessageSource extends ResourceBundleMessageSource {
private final String baseName="messages"; private final String baseName = "messages";
public Map<String,String> getMessageMap(Locale locale){
Map<String,String> messageMap=new HashMap<>(); public Map<String, String> getMessageMap(Locale locale) {
ResourceBundle resourceBundle=getResourceBundle(baseName,locale ); Map<String, String> messageMap = new HashMap<>();
if(resourceBundle!=null){ ResourceBundle resourceBundle = getResourceBundle(baseName, locale);
Set<String> keySet= resourceBundle.keySet(); if (resourceBundle != null) {
Set<String> keySet = resourceBundle.keySet();
try {
//Map<String,Object> lookup
Field field1 = resourceBundle.getClass().getDeclaredField("lookup");
field1.setAccessible(true);
Map<String, Object> lookup = (Map<String, Object>) field1.get(resourceBundle);
keySet = lookup.keySet();
} catch (Exception ex) {
log.error("MyMessageSource["+locale.toString()+"]出錯:"+ex);
}
for (String key : for (String key :
keySet) { keySet) {
String value= resourceBundle.getString(key); String value = resourceBundle.getString(key);
if(!value.isEmpty()){ if (!value.isEmpty()) {
messageMap.put(key,value); messageMap.put(key, value);
} }
} }
} }
......
...@@ -93,10 +93,7 @@ public class MessageManagerImpl implements IMessageManager { ...@@ -93,10 +93,7 @@ public class MessageManagerImpl implements IMessageManager {
map.put(type, typeV); map.put(type, typeV);
map.put(createDate, DateUtil.toDateTimeString(obj.getCreateDate())); map.put(createDate, DateUtil.toDateTimeString(obj.getCreateDate()));
String msgV=obj.getMsg(); String msgV=obj.getShowMsg(locale);
if(ObjectUtil.isNotEmpty(obj.getMsgCode())){
msgV=MessageUtils.getText(obj.getMsgCode(),obj.getMsgParams(),locale,obj.getMsg());
}
map.put(msg, msgV); map.put(msg, msgV);
list.add(map); list.add(map);
} }
......
package com.neotel.smfcore.core.message.service.po; package com.neotel.smfcore.core.message.service.po;
import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.common.base.BasePo; import com.neotel.smfcore.common.base.BasePo;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.enums.MessageType; import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.service.bean.DataContent; import com.neotel.smfcore.core.message.service.bean.DataContent;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
...@@ -12,6 +14,7 @@ import java.io.Serializable; ...@@ -12,6 +14,7 @@ import java.io.Serializable;
import java.sql.Date; import java.sql.Date;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
@Data @Data
@Document @Document
...@@ -70,4 +73,13 @@ public class Message extends BasePo implements Serializable { ...@@ -70,4 +73,13 @@ public class Message extends BasePo implements Serializable {
dataList.add(new DataContent(key,value)); dataList.add(new DataContent(key,value));
} }
public String getShowMsg(Locale locale){
if(ObjectUtil.isNotEmpty(msgCode)){
return MessageUtils.getText(msgCode,msgParams,locale,msg);
}
return msg;
}
} }
...@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.message.util; ...@@ -2,6 +2,7 @@ package com.neotel.smfcore.core.message.util;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.neotel.smfcore.core.device.util.DataCache; import com.neotel.smfcore.core.device.util.DataCache;
import com.neotel.smfcore.core.language.util.MessageUtils;
import com.neotel.smfcore.core.message.enums.MessageType; import com.neotel.smfcore.core.message.enums.MessageType;
import com.neotel.smfcore.core.message.service.manager.IMessageManager; import com.neotel.smfcore.core.message.service.manager.IMessageManager;
import com.neotel.smfcore.core.message.service.po.Message; import com.neotel.smfcore.core.message.service.po.Message;
...@@ -31,11 +32,11 @@ public class DeviceMessageUtil { ...@@ -31,11 +32,11 @@ public class DeviceMessageUtil {
/** /**
* 流水线提示消息,只保存最后一条 * 流水线提示消息,只保存最后一条
*/ */
public static String lineMsg=""; public static Message lastLineMsg=null;
public static void updateLineMsg(String lineMsg, String code, String cids,String posName) { public static void updateLineMsg(String lineMsg, String code, String cids,String posName,String msgCode,String[] msgParams) {
lineMsg = lineMsg; // lineMsg = lineMsg;
Message message = Message.newMsg(MessageType.WARNING, "server", "", "", "", lineMsg, null); Message message = Message.newMsg(MessageType.WARNING, "server", "", "", msgCode, lineMsg, msgParams);
if (ObjectUtil.isNotEmpty(code)) { if (ObjectUtil.isNotEmpty(code)) {
message.addData("code", code); message.addData("code", code);
} }
...@@ -45,14 +46,21 @@ public class DeviceMessageUtil { ...@@ -45,14 +46,21 @@ public class DeviceMessageUtil {
if (ObjectUtil.isNotEmpty(posName)) { if (ObjectUtil.isNotEmpty(posName)) {
message.addData("posName", posName); message.addData("posName", posName);
} }
messageManager.save(message); message= messageManager.save(message);
lastLineMsg=message;
} }
public static void addErrorMessage(String cid, String moudle, String msgCode, String msg, String[] msgParam) { public static void addErrorMessage(String cid, String moudle, String msgCode, String msg, String[] msgParam) {
Storage storage = dataCache.getStorage(cid); Storage storage = dataCache.getStorage(cid);
if (storage != null) { if (storage != null) {
Message message=Message.newMsg(MessageType.ERROR ,storage.getName(), storage.getId(), moudle, msgCode,msg,msgParam); String code=msgCode;
if(ObjectUtil.isNotEmpty(msgCode)){
if(!msgCode.startsWith(MessageUtils.smfcore)){
code=MessageUtils.smfcore+"."+msgCode;
}
}
Message message=Message.newMsg(MessageType.ERROR ,storage.getName(), storage.getId(), moudle, code,msg,msgParam);
messageManager.save(message); messageManager.save(message);
} }
} }
......
...@@ -223,3 +223,5 @@ smfcorre.message.error=\u9519\u8BEF ...@@ -223,3 +223,5 @@ smfcorre.message.error=\u9519\u8BEF
smfcore.messages.serverStart=\u670D\u52A1\u5668\u542F\u52A8 smfcore.messages.serverStart=\u670D\u52A1\u5668\u542F\u52A8
smfcore.message=\u6D88\u606F\u67E5\u8BE2 smfcore.message=\u6D88\u606F\u67E5\u8BE2
smfcore.inSuddenStop=\u6536\u5230\u6025\u505C\u4FE1\u53F7\uFF0C\u62A5\u8B66\u6025\u505C smfcore.inSuddenStop=\u6536\u5230\u6025\u505C\u4FE1\u53F7\uFF0C\u62A5\u8B66\u6025\u505C
smfcore.linemsg.update=\u7CFB\u7EDF\u66F4\u65B0\u4E2D,\u6682\u505C\u51FA\u5165\u5E93
smfcore.linemsg.posLock=[{0}]\u5E93\u4F4D[{1}]\u5DF2\u88AB\u9501\u5B9A,\u6682\u505C\u5165\u5E93
\ No newline at end of file \ No newline at end of file
...@@ -223,4 +223,6 @@ smfcorre.message.error=Error ...@@ -223,4 +223,6 @@ smfcorre.message.error=Error
smfcore.messages.serverStart=Server start-up smfcore.messages.serverStart=Server start-up
smfcore.message=Message Search smfcore.message=Message Search
smfcore.inSuddenStop=Emergency stop signal received\uFF0Calarm emergency stop smfcore.inSuddenStop=Emergency stop signal received\uFF0Calarm emergency stop
smfcore.linemsg.update=System update in progress, suspend the inlet and outlet
smfcore.linemsg.posLock=The [{0}] storage space [{1}] has been locked, suspend storage
...@@ -223,4 +223,6 @@ smfcorre.message.error=\u30A8\u30E9\u30FC ...@@ -223,4 +223,6 @@ smfcorre.message.error=\u30A8\u30E9\u30FC
smfcore.messages.serverStart=\u30B5\u30FC\u30D0\u30FC\u306E\u8D77\u52D5 smfcore.messages.serverStart=\u30B5\u30FC\u30D0\u30FC\u306E\u8D77\u52D5
smfcore.message=\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u304A\u554F\u3044\u5408\u308F\u305B smfcore.message=\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u304A\u554F\u3044\u5408\u308F\u305B
smfcore.inSuddenStop=\u7DCA\u6025\u505C\u6B62\u4FE1\u53F7\u3092\u53D7\u4FE1\u3057\u3001\u7DCA\u6025\u505C\u6B62\u3092\u8B66\u544A\u3057\u307E\u3059 smfcore.inSuddenStop=\u7DCA\u6025\u505C\u6B62\u4FE1\u53F7\u3092\u53D7\u4FE1\u3057\u3001\u7DCA\u6025\u505C\u6B62\u3092\u8B66\u544A\u3057\u307E\u3059
smfcore.linemsg.update=\u30B7\u30B9\u30C6\u30E0\u66F4\u65B0\u4E2D\u3001\u30A2\u30AF\u30BB\u30B9\u505C\u6B62\u4E2D
smfcore.linemsg.posLock=[{0}] \u30B9\u30C8\u30EC\u30FC\u30B8\u30B9\u30DA\u30FC\u30B9[{1}]\u304C\u30ED\u30C3\u30AF\u3055\u308C\u3066\u3044\u308B\u3001\u30B9\u30C8\u30EC\u30FC\u30B8\u304C\u505C\u6B62\u3057\u3066\u3044\u308B
...@@ -223,3 +223,5 @@ smfcorre.message.error=\u9519\u8BEF ...@@ -223,3 +223,5 @@ smfcorre.message.error=\u9519\u8BEF
smfcore.messages.serverStart=\u670D\u52A1\u5668\u542F\u52A8 smfcore.messages.serverStart=\u670D\u52A1\u5668\u542F\u52A8
smfcore.message=\u6D88\u606F\u67E5\u8BE2 smfcore.message=\u6D88\u606F\u67E5\u8BE2
smfcore.inSuddenStop=\u6536\u5230\u6025\u505C\u4FE1\u53F7\uFF0C\u62A5\u8B66\u6025\u505C smfcore.inSuddenStop=\u6536\u5230\u6025\u505C\u4FE1\u53F7\uFF0C\u62A5\u8B66\u6025\u505C
smfcore.linemsg.update=\u7CFB\u7EDF\u66F4\u65B0\u4E2D,\u6682\u505C\u51FA\u5165\u5E93
smfcore.linemsg.posLock=[{0}]\u5E93\u4F4D[{1}]\u5DF2\u88AB\u9501\u5B9A,\u6682\u505C\u5165\u5E93
...@@ -223,3 +223,5 @@ smfcorre.message.error=\u932F\u8AA4 ...@@ -223,3 +223,5 @@ smfcorre.message.error=\u932F\u8AA4
smfcore.messages.serverStart=\u670D\u52D9\u5668\u555F\u52D5 smfcore.messages.serverStart=\u670D\u52D9\u5668\u555F\u52D5
smfcore.message=\u6D88\u606F\u67E5\u8A62 smfcore.message=\u6D88\u606F\u67E5\u8A62
smfcore.inSuddenStop=\u6536\u5230\u6025\u505C\u4FE1\u865F\uFF0C\u5831\u8B66\u6025\u505C smfcore.inSuddenStop=\u6536\u5230\u6025\u505C\u4FE1\u865F\uFF0C\u5831\u8B66\u6025\u505C
smfcore.linemsg.update=\u7CFB\u7D71\u66F4\u65B0\u4E2D\uFF0C\u66AB\u505C\u51FA\u5165\u5EAB
smfcore.linemsg.posLock=[{0}]\u5EAB\u4F4D[{1}]\u5DF2\u88AB\u9396\u5B9A\uFF0C\u66AB\u505C\u5165\u5EAB
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!