diff --git a/src/main/java/com/aida/seller/common/aop/InternalOnlyAspect.java b/src/main/java/com/aida/seller/common/aop/InternalOnlyAspect.java index 01e8054..18fa3de 100644 --- a/src/main/java/com/aida/seller/common/aop/InternalOnlyAspect.java +++ b/src/main/java/com/aida/seller/common/aop/InternalOnlyAspect.java @@ -30,7 +30,7 @@ public class InternalOnlyAspect { public Object validateInternalCall(ProceedingJoinPoint joinPoint) throws Throwable { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (attributes == null) { - throw new BusinessException("禁止外部直接访问此接口"); + throw new BusinessException("forbidden.external.access"); } HttpServletRequest request = attributes.getRequest(); @@ -38,7 +38,7 @@ public class InternalOnlyAspect { if (!CommonConstants.INTERNAL_CALL_VALUE.equals(internalCall)) { log.warn("Unauthorized external access attempt to internal-only endpoint: {}", ((MethodSignature) joinPoint.getSignature()).getMethod().getName()); - throw new BusinessException("禁止外部直接访问此接口"); + throw new BusinessException("forbidden.external.access"); } return joinPoint.proceed(); diff --git a/src/main/java/com/aida/seller/common/exception/BusinessException.java b/src/main/java/com/aida/seller/common/exception/BusinessException.java index e8d645d..59924a4 100644 --- a/src/main/java/com/aida/seller/common/exception/BusinessException.java +++ b/src/main/java/com/aida/seller/common/exception/BusinessException.java @@ -1,9 +1,17 @@ package com.aida.seller.common.exception; +import com.aida.seller.common.context.UserContext; +import com.aida.seller.model.vo.AuthPrincipalVo; import com.aida.seller.common.result.ResultEnum; import lombok.Data; import lombok.extern.slf4j.Slf4j; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.PropertyResourceBundle; +import java.util.ResourceBundle; + /** * @author: dwjian * @description: 业务异常 @@ -12,31 +20,64 @@ import lombok.extern.slf4j.Slf4j; @Slf4j public class BusinessException extends RuntimeException { + private static final long serialVersionUID = 1L; + private Integer code; private String msg; public BusinessException(ResultEnum resultEnum) { this.code = resultEnum.getCode(); - this.msg = resultEnum.getMsg(); + this.msg = getMessageFromResource(resultEnum.getMsg(), getUserLocale()); } public BusinessException(String msg) { this.code = ResultEnum.FAIL.getCode(); - this.msg = msg; + this.msg = getMessageFromResource(msg, getUserLocale()); } public BusinessException(String msg, Integer code) { this.code = code; - this.msg = msg; + this.msg = getMessageFromResource(msg, getUserLocale()); } public BusinessException(Throwable cause) { this.code = ResultEnum.FAIL.getCode(); - this.msg = cause.getMessage(); + this.msg = getMessageFromResource(cause.getMessage(), getUserLocale()); } public BusinessException(ResultEnum resultEnum, String customMsg) { this.code = resultEnum.getCode(); - this.msg = customMsg; + this.msg = getMessageFromResource(customMsg, getUserLocale()); + } + + private static String getUserLocale() { + try { + AuthPrincipalVo userInfo = UserContext.getUserHolder(); + if (userInfo == null) return "en"; + String lang = userInfo.getLanguage(); + if (lang == null) return "en"; + if ("CHINESE_SIMPLIFIED".equalsIgnoreCase(lang)) return "zh"; + if ("ENGLISH".equalsIgnoreCase(lang)) return "en"; + return "en"; + } catch (Exception e) { + return "en"; + } + } + + public static String getMessageFromResource(String msg, String locale) { + if (msg == null) return null; + try (InputStream is = BusinessException.class.getClassLoader() + .getResourceAsStream("messages_" + locale + ".properties")) { + if (is != null) { + ResourceBundle bundle = new PropertyResourceBundle( + new InputStreamReader(is, StandardCharsets.UTF_8)); + if (bundle.containsKey(msg)) { + return bundle.getString(msg); + } + } + } catch (Exception e) { + log.warn("Failed to load messages_{}.properties: {}", locale, e.getMessage()); + } + return msg; } } diff --git a/src/main/java/com/aida/seller/module/designer/service/DesignerServiceImpl.java b/src/main/java/com/aida/seller/module/designer/service/DesignerServiceImpl.java index 324adb3..f1cf8bc 100644 --- a/src/main/java/com/aida/seller/module/designer/service/DesignerServiceImpl.java +++ b/src/main/java/com/aida/seller/module/designer/service/DesignerServiceImpl.java @@ -71,7 +71,7 @@ public class DesignerServiceImpl extends ServiceImpl maxFileSize * 1024 * 1024) { - throw new BusinessException("文件大小超出限制: " + maxFileSize + " MB"); + throw new BusinessException("file.size.exceed.limit"); } try { // 计算文件MD5(可选,用于文件完整性校验) @@ -78,7 +78,7 @@ public class FileUploadController { return Response.success(minioUtil.processMinioResource(filePath, CommonConstants.MINIO_PATH_TIMEOUT)); } catch (IOException e) { log.error("文件上传失败: {}", e.getMessage(), e); - throw new BusinessException("文件上传失败"); + throw new BusinessException("file.upload.fail"); } } diff --git a/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java b/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java index c59f0c7..6f0f12b 100644 --- a/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java +++ b/src/main/java/com/aida/seller/module/listing/service/ListingServiceImpl.java @@ -65,7 +65,7 @@ public class ListingServiceImpl extends ServiceImpl purchasedListingIds = getPurchasedListingIds(dto.getListingIds(), dto.getBuyerId()); @@ -230,13 +230,13 @@ public class OrderServiceImpl extends ServiceImpl !purchasedListingIds.contains(id)) .collect(Collectors.toList()); if (CollectionUtils.isEmpty(unpurchasedListingIds)) { - throw new BusinessException("所有商品均已购买,无需重复下单"); + throw new BusinessException("all.products.already.purchased"); } dto.setListingIds(unpurchasedListingIds); List listings = listingMapper.selectBatchIds(dto.getListingIds()); if (CollectionUtils.isEmpty(listings)) { - throw new BusinessException("未找到对应的商品"); + throw new BusinessException("product.not.found"); } Map> listingsBySeller = listings.stream() @@ -334,13 +334,13 @@ public class OrderServiceImpl extends ServiceImpl getAssetsPage(AssetsDTO dto) { if (dto.getBuyerId() == null) { - throw new BusinessException("买家ID不能为空"); + throw new BusinessException("buyer.id.cannot.be.empty"); } long page = dto.getPage(); long size = dto.getSize(); @@ -425,7 +425,7 @@ public class OrderServiceImpl extends ServiceImpl orderIds, Long paymentId) { if (CollectionUtils.isEmpty(orderIds)) { - throw new BusinessException("订单ID列表不能为空"); + throw new BusinessException("order.id.list.cannot.be.empty"); } LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.in(OrderInfoEntity::getId, orderIds) diff --git a/src/main/resources/messages_en.properties b/src/main/resources/messages_en.properties new file mode 100644 index 0000000..953e62d --- /dev/null +++ b/src/main/resources/messages_en.properties @@ -0,0 +1,323 @@ +# 不易报异常 +system.error=System error. +unknown.authentication.operation.type=Unknown authentication operation type. +failed.to.send.mail=Failed to send mail. +unknown.login.type=Unknown login type. +error.login.type=Error login type. +get.moodBoards.data.is.mismatch=Get moodBoards data is mismatch. +get.printBoards.data.is.mismatch=Get printBoards data is mismatch. +get.sketchBoards.data.is.mismatch=Get sketchBoards data is mismatch. +modelPoint.not.found=ModelPoint not found. +collection.not.found=Collection not found. +design.not.found=Design not found. +designItem.not.found=DesignItem not found. +userLikeGroup.not.found=UserLikeGroup not found. +old.elements.not.found=Old elements not found. +new.designItemDetails.not.found=New designItemDetails not found. +save.workspace.failed=Save workspace failed. +save.design.failed=Save design failed. +update.workspace.failed=Update workspace failed. +enumeration.class.not.found=Enumeration class not found. +history.detail.not.found=History detail not found. +designItemDetails.not.found=DesignItemDetails not found. +designPythonOutfit.not.found=DesignPythonOutfit not found. +unknown.parameter.level1Type=Unknown parameter level1Type. +collectionElement.not.found=collectionElement not found. +select1.file.does.not.exist=Select1 file does not exist. +select2.file.does.not.exist=Select2 file does not exist. +save.collectionElement.failed=Save collectionElement failed. +collectionElements.not.found=CollectionElements not found. +batch.save.libraryList.failed=Batch save libraryList failed. +panTones.not.found=tcx value not found. +save.designItem.failed=Save designItem failed. +unknown.type=Unknown type. +unknown.operateType=Unknown operateType. +unknown.level1TypeEnum=Unknown level1TypeEnum. +the.id.value.is.out.of.range=The id value is out of range. +library.not.found=Library not found. +wrong.clothes.type=Wrong clothes type. +sysFile.not.found=SysFile not found. +libraryList.not.found=LibraryList not found. +groupDetails.not.found=GroupDetails not found. +history.not.found=History not found. +unknown.parameter.level2Type=Unknown parameter level2Type. +MARKETING_SKETCH.type.have.been.removed=MARKETING_SKETCH type have been removed. +unknown.modelType=Unknown modelType. +save.library.failed=Save library failed. +get.file.failed=Get file failed. +the.path.is.error=The path is error. +batch.save.colorElements.failed=Batch save colorElements failed. +initSysFile.ioException=InitSysFile ioException. +save.sysFile.failed=Save sysFile failed. +save.pythonTAllInfo.failed=Save pythonTAllInfo failed. +save.collection.failed=Save collection failed. +save.designItemDetail.failed=Save designItemDetail failed. +save.classification.failed=Save classification failed. +update.classification.failed=Update classification failed. +please.input.the.prompt=Please input the prompt. +please.choose.an.image=Please choose an image. +please.input.the.caption.and.choose.an.image=Please input the caption and choose an image. +please.input.the.caption.or.choose.an.image=Please input the caption or choose an image. +duplicate.likes.are.not.allowed=Duplicate likes are not allowed. +layer.information.not.found=Layer information not found. +singleOverall.cannot.be.empty=singleOverall cannot be empty. +colorBoards.cannot.be.empty=colorBoards cannot be empty. +systemScale.cannot.be.empty=systemScale cannot be empty. +modelType.cannot.be.empty=modelType cannot be empty. +modelSex.cannot.be.empty=modelSex cannot be empty. +templateId.cannot.be.empty=templateId cannot be empty. +processId.cannot.be.empty=processId cannot be empty. +timeZone.cannot.be.empty=TimeZone cannot be empty. +userId.cannot.be.empty=userId cannot be empty. +email.cannot.be.empty=email cannot be empty. +operationType.cannot.be.empty=operationType cannot be empty. +password.cannot.be.empty=Password cannot be empty. +emailVerifyCode.cannot.be.empty=emailVerifyCode cannot be empty. +loginType.cannot.be.empty=loginType cannot be empty. +userName.cannot.be.empty=userName cannot be empty. +sketchBoards.designType.cannot.be.empty=sketchBoards designType cannot be empty. +moodBoards.designType.cannot.be.empty=moodBoards designType cannot be empty. +printBoards.designType.cannot.be.empty=printBoards designType cannot be empty. +unknown.parameter.singleOverall=unknown parameter singleOverall. +unknown.parameter.switchCategory=unknown parameter switchCategory. +collectionId.cannot.be.empty=collectionId cannot be empty. +designPythonOutfitId.cannot.be.empty=designPythonOutfitId cannot be empty. +designItemId.cannot.be.empty=designItemId cannot be empty. +designId.cannot.be.empty=designId cannot be empty. +groupDetailId.cannot.be.empty=groupDetailId cannot be empty. +validStartTime.cannot.be.empty=validStartTime cannot be empty. +validEndTime.cannot.be.empty=validEndTime cannot be empty. +user_id.cannot.be.empty=user_id cannot be empty. +session_id.cannot.be.empty=session_id cannot be empty. +rgbValue.cannot.be.empty=rgbValue cannot be empty. +file.cannot.be.empty=file cannot be empty. +file.type.unsupported=Unsupported file type. +file.size.exceed.limit=File size exceeds the limit. +select1Id.cannot.be.empty=select1Id cannot be empty. +select2Id.cannot.be.empty=select2Id cannot be empty. +isPin.cannot.be.empty=isPin cannot be empty. +designType.cannot.be.empty=designType cannot be empty. +priority.cannot.be.empty=priority cannot be empty. +clothes.cannot.be.empty=clothes cannot be empty. +isPreview.cannot.be.empty=isPreview cannot be empty. +h.cannot.be.empty=h cannot be empty. +s.cannot.be.empty=s cannot be empty. +v.cannot.be.empty=v cannot be empty. +userGroupId.cannot.be.empty=userGroupId cannot be empty. +userGroupName.cannot.be.empty=userGroupName cannot be empty. +libraryId.cannot.be.empty=libraryId cannot be empty. +shoulderLeft.cannot.be.empty=shoulderLeft cannot be empty. +shoulderRight.cannot.be.empty=shoulderRight cannot be empty. +waistbandLeft.cannot.be.empty=waistbandLeft cannot be empty. +waistbandRight.cannot.be.empty=waistbandRight cannot be empty. +handLeft.cannot.be.empty=handLeft cannot be empty. +handRight.cannot.be.empty=handRight cannot be empty. +id.cannot.be.empty=id cannot be empty. +url.cannot.be.empty=url cannot be empty. +type.cannot.be.empty=type cannot be empty. +color.cannot.be.empty=color cannot be empty. +generateDetailId.cannot.be.empty=generateDetailId cannot be empty. +level1Type.cannot.be.empty=level1Type cannot be empty. +regionNum.cannot.be.empty=regionNum cannot be empty. +phone.cannot.be.empty=phone cannot be empty. +printId.cannot.be.empty=printId cannot be empty. +path.cannot.be.empty=path cannot be empty. +classificationName.cannot.be.empty=classificationName cannot be empty. +level2Type.cannot.be.empty=level2Type cannot be empty. +generateItem.does.not.exist=generateItem does not exist. +level1Type.does.not.match=level1Type does not match. +the.image.does.not.exist.please.reselect=the image does not exist, please reselect. +design.item.does.not.exist=design item does not exist. +layers.does.not.exists=layers does not exists. +unknown.generate.type=unknown generate type. +the.workspace.lastIndex.not.found=The workspace lastIndex not found. +gender.cannot.be.empty=gender cannot be empty. +image.synthesis.failed=image synthesis failed. +priority.cannot.be.repeated=priority cannot be repeated. +model.not.found=model not found. +libraryIdList.cannot.be.empty=libraryIdList cannot be empty. +the.value.range.of.seed=The value range of seed is 0-99999 +image.modify.failed=Image modification failed, please try again later. +slogan.style.cannot.be.empty=Slogan style text cannot be empty. +slogan.image.cannot.be.empty=Slogan image cannot be empty. +questionnaire.filled.out=You have filled out the current questionnaire. +user.has.no.account=The current user has no account. +you.cannot.follow.yourself=You cannot follow yourself. +you.have.already.followed.this.user=You have already followed this user. +subscription.success=Subscription Success. +unsubscribe.success=Unsubscribe Success. +you.have.not.followed.the.current.user=You have not followed the current user. +remaining.modifications=Remaining modifications are 0. +you.have.participated.in.the.event=You have participated in the event. +only.original.works.can.participate.in.the.event=Sorry, only original works can participate in the event. +remaining.credits.insufficient=Your remaining credits are insufficient for this generation. Please recharge. +you.haven't.subscribed.to.any.products.yet=You haven't subscribed to any products yet. +generate.result.below.standard=The quality of the generated images currently falls below standard. Please consider adjusting your prompt and trying again. +partial.design.failed=Partial design failed. Please try again later. +email.count.limit=Rate limit reached. Retry in 1 hour. +model.path.cannot.be.empty=Model path cannot be empty. +this.promotion.code.has.expired=This promotion code has expired. +this.promotion.code.is.invalid=This promotion code is invalid. +one.time.limit.per.customer=This code has already been redeemed. Promo codes are limited to one-time use per customer. +element.already.exists=This element already exists in the public library. +have.no.permission=Sorry, you don't have permission. +permit.bulk.creation=The system permits bulk account creation exclusively when no sub-accounts exist. +school.account.login=School account detected. Please log in through the Academic portal. +enterprise.account.login=Enterprise account detected. Please log in through the Enterprise portal. +white.bg.add.fail=Failed to apply white background to the transparent image. +message.confirm.fail=Message confirmation failed. Switching to manual confirmation. +unknown.designPictureType=unknown designPictureType. +base64.data.empty=Invalid parameter: Image base64 data is empty. +edited.account.information.cannot.be.blank=The edited account information cannot be blank! +oldEmail.cannot.be.empty=oldEmail cannot be empty! +oldUserName.cannot.be.empty=oldUserName cannot be empty! +oldUserName.does.not.exist=oldUserName does not exist! +oldAccount.does.not.exist=oldAccount does not exist! +the.Google.has.been.bound=Cannot link: Google account already in use. +Unable.to.obtain.WeChat.account.information=Unable to obtain WeChat account information. Binding failed. +title.has.been.used=The title of the published work has been used. +source.image.does.not.exist=The source image does not exist. +email.has.been.registered=The email has already been registered. +unknown.subscription.type=Unknown subscription type. +unknown.product.type=Unknown product type. +unknown.Promotion.Code=Unknown Promotion Code. +file.upload.fail=File upload failed. +project.id.cannot.be.empty=Project id cannot be empty. +failed.to.obtain.system.sketch.recommendation=Failed to obtain system sketch recommendation. +pose.transformation.error=Pose transformation failed. +order.creation.failed=Order creation failed. +order.deduction.failed=Order deduction failed. +order.query.failed=Order query failed. +do.not.have.the.permission.to.delete.this.comment=You do not have the permission to delete this comment. +unknow.affiliate=Unknown affiliate id. +unknown.operationType=Unknown operationType. +unknown.mode=unknown mode +unknown.subscription.plan=unknown subscription plan +unknown.subscription.status=Unknown subscription status. +subscription.has.expired=Switch failed. The subscription has expired. +unknown.administrator.user=Operation failed. Unknown administrator user. +no.permission.manage.subscription=Switch failed. You do not have permission to manage this subscription. +unknown.organization=Unknown organization. +valid.subscription.period=The plan is still within its valid period. Please delete it after it expires. +users.currently.using.this.plan=There are users currently using this plan, so it cannot be deleted. +deletion.failed.please.try.again.later=Deletion failed. Please try again later. +subscription.plan.has.been.deleted=This subscription plan has been deleted. +subscription.plan.does.not.exist=The subscription plan does not exist. +ID.cannot.be.empty.and.must.be.greater.than.0=ID cannot be empty and must be greater than 0. +invalid.time.format=Invalid time format. Please use the yyyy-MM-dd HH:mm:ss format. +the.start.time.cannot.be.later.than.the.end.time=The start time cannot be later than the end time. +page.size.limit=The number of items per page must be between 1 and 100. +page.num.limit=The page number must be greater than 0. +end.time.must.be.later.than.the.start.time=The subscription end time must be later than the start time. +please.specify.the.organizationId=Please specify the organizationId. +switch.failed.sub-account.not.under.your.active.subscription=Switch failed. Sub-account not under your active subscription. +Sub-accounts.cannot.be.admins=Sub-accounts in a subscription cannot be designated as admins. +only.subscription.plans.with.a.PENDING.status.can.have.their.start.time.modified=Only subscription plans with a PENDING status can have their start time modified. +end.time.cannot.be.earlier.than.or.equal.to.start.time=End time cannot be earlier than or equal to start time. +end.time.cannot.be.earlier.than.or.equal.to.the.current.time=End time cannot be earlier than or equal to the current time. +the.subscription.end.date.can.be.extended.only.not.reduced=The subscription end date can be extended only, not reduced. +total.sub-account.quota.cannot.be.lower.than.existing.sub-accounts=Total sub-account quota cannot be lower than existing sub-accounts. +the.credit.limit.set.cannot.be.lower.than.the.amount.of.credits.already.used=The credit limit set cannot be lower than the amount of credits already used. +administrator.user.is.already.bound.to.different.organization=This administrator user is already bound to a subscription plan of a different organization. +required.partialDesign='partialDesign' (base64 or path) is required when updating an individual outfit. +account.not.found=Account not found. +verification.code.expired=Verification code has expired. Please request a new code to proceed. +verification.code.error=Verification code entered is incorrect. Please check and try again. +unknown.message=Unknown message. +forbidden.external.access=Forbidden: external access is not allowed for this endpoint. +failed.to.send.mail=Failed to send email. +remote.service.error=Remote service business error. +designer.already.applied=This user has already submitted an application or is already入驻. +designer.application.not.found=Application record not found. +current.status.not.support.review=Current status does not support review operation. +designer.record.not.found=Designer record not found. +designer.not.found=Designer not found. +product.id.list.cannot.be.empty=Product ID list cannot be empty. +buyer.id.cannot.be.empty=Buyer ID cannot be empty. +buyer.account.cannot.be.empty=Buyer account cannot be empty. +all.products.already.purchased=All products have already been purchased, no need to place a duplicate order. +product.not.found=Product not found. +order.info.cannot.be.empty=Order information cannot be empty. +order.status.cannot.be.empty=Order status cannot be empty. +order.id.list.cannot.be.empty=Order ID list cannot be empty. +order.not.found.or.no.permission=Order not found or no permission to modify. +design.for.only.male.or.female=designFor can only be male/female. +product.title.cannot.be.empty=Product title cannot be empty. +product.description.cannot.be.empty=Product description cannot be empty. +product.price.cannot.be.empty=Product price cannot be empty. +product.gender.cannot.be.empty=Product gender cannot be empty. +product.gender.must.be.male.or.female=Product gender can only be male/female. +product.category.cannot.be.empty=Product category cannot be empty. +product.category.must.be.valid=Product category can only be outwear/trousers/blouse/dress/skirt/others/tops/bottoms. +design.for.only.female.male.or.all=designFor can only be female/male/all. +product.not.purchased.yet=This product has not been purchased yet and cannot be viewed. +category.required=category [] is required. +category.imageUrl.cannot.be.empty= category imageUrl cannot be null or empty. + +# 可能会报异常 +userName.does.not.exist=Username or password is incorrect. Please check your entry and try again. +password.error=Username or password is incorrect. Please check your entry and try again. +email.error=Email is incorrect, please enter the correct bound email. +email.does.not.exist=Email address does not exist in our records. Please check and try again. +the.verification.code.has.expired=Verification code has expired. Please request a new code to proceed. +verification.code.error=Verification code entered is incorrect. Please check and try again. +the.number.of.PIN.top.or.bottom.or.outerwear.sketchBoard.cannot.be.more.than.8=You cannot have more than 8 PIN tops, bottoms, or outerwear in the sketchBoard. Please adjust accordingly. +hsv.value.cannot.exceed.the.maximum.of.8=hsv value cannot exceed the maximum of 8. +the.workspaceName.already.exists=A workspace with this name already exists. Please enter a different name. +unable.to.delete.the.workspace.you.are.currently.using=The workspace you are currently using cannot be deleted. Please select another workspace before trying to delete. +classificationName.already.exists=The label name you've entered already exists. Please enter a different label name to avoid duplication. +account.expired=Your subscription has expired, and your account has been reset to a visitor account. Please log in again from the [Individual] entry. If you have any questions, please contact us at info@code-create.com.hk +relate.to.any.subscription=Your administrator account is not currently linked to any subscription. If you have any questions, please contact us at info@code-create.com.hk + +# Warnings +the.classification.you.deleted.has.associated.library=The label you are attempting to delete is associated with existing data. Are you sure you wish to proceed with deletion? +the.model.has.been.referenced.by.the.workspace=This model is currently in use by a workspace. Deleting it might affect the workspace. Confirm deletion only if you are sure. +balance.insufficient.for.trial=Want to continue using it immediately? Please consider upgrading to our subscription plan to get more quota. +balance.insufficient.for.paying=You have reached your usage limit for this month. + +# Errors +system.busy=System is currently busy. Please wait a moment and try again. +user.expired=Your user session has expired. Please contact an administrator to renew your usage rights. +attributeRetrieval.interface.exception=We encountered an error retrieving attribute data. (Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +design.interface.exception=We encountered an error with the design interface. (Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +processMannequins.interface.exception=We encountered an error uploading mannequins. (Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +processSketchBoards.interface.exception=We encountered an error uploading sketchBoard. (Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +designProcess.interface.exception=There's been an issue loading the progress bar. (Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +generate.interface.exception=We are currently experiencing a high volume of generating requests. (Please try again later. If the problem continues, reach out to us at help@aida.com.hk for support.) +generate.interface.error=We encountered an error with the generate interface. (Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +chat-bot.interface.exception=We encountered an error with the chat robot interface.(Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +compose-layer.interface.exception=We encountered issues while flattening the layers.(Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +cloth-classification.interface.exception=We encountered some issues while obtaining clothing categories.(Please try again later. If this issue persists, please contact us at help@aida.com.hk.) +sr.interface.error=We encountered an error with the super resolution. (Please try again later. If this issue persists, please contact us at help@aida.com.hk.) + +# 多语言返回 +OVERALL=Overall +TOPS=Tops +BOTTOMS=Bottoms +OUTWEAR=Outwear +OTHERS=Others +BLOUSE=Blouse +DRESS=Dress +TROUSERS=Trousers +SKIRT=Skirt +FEMALE=Women's Fashion +MALE=Men's Fashion +SLOGAN=Slogan +LOGO=Logo +PATTERN=Pattern +EMBROIDERY=Embroidery +BEADING=Beading +PEARL=Pearl +RIVET=Rivet +BUTTON=Button +BELT=Belt +CORSAGE=Corsage +ZIPPER=Zipper +POCKET=Pocket +THICK=Thick Lines +MEDIUM=Medium Lines +THIN=Thin lines +GENERATE=Generate Sketch +EXTRACT=Extract Sketch +CHILD=Child +ADULT=Adult diff --git a/src/main/resources/messages_zh.properties b/src/main/resources/messages_zh.properties new file mode 100644 index 0000000..791ecdc --- /dev/null +++ b/src/main/resources/messages_zh.properties @@ -0,0 +1,320 @@ +# 不易报异常 +system.error=系统错误。 +unknown.authentication.operation.type=未知的身份验证操作类型。 +failed.to.send.mail=邮件发送失败。 +unknown.login.type=未知的登录类型。 +error.login.type=错误的登录类型。 +get.moodBoards.data.is.mismatch=获取心情板数据不匹配。 +get.printBoards.data.is.mismatch=获取印花板数据不匹配。 +get.sketchBoards.data.is.mismatch=获取草图板数据不匹配。 +modelPoint.not.found=未找到ModelPoint。 +collection.not.found=未找到Collection。 +design.not.found=未找到Design。 +designItem.not.found=未找到DesignItem。 +userLikeGroup.not.found=未找到UserLikeGroup。 +old.elements.not.found=未找到旧元素。 +new.designItemDetails.not.found=未找到新的DesignItemDetails。 +save.workspace.failed=保存工作区失败。 +save.design.failed=保存设计失败。 +update.workspace.failed=更新工作区失败。 +enumeration.class.not.found=未找到枚举类。 +history.detail.not.found=未找到历史详情。 +designItemDetails.not.found=未找到DesignItemDetails。 +designPythonOutfit.not.found=未找到DesignPythonOutfit。 +unknown.parameter.level1Type=未知的参数level1Type。 +collectionElement.not.found=未找到collectionElement。 +select1.file.does.not.exist=选择的文件不存在。 +select2.file.does.not.exist=选择的文件不存在。 +save.collectionElement.failed=保存collectionElement失败。 +collectionElements.not.found=未找到CollectionElements。 +batch.save.libraryList.failed=批量保存libraryList失败。 +panTones.not.found=未找到tcx value。 +save.designItem.failed=保存DesignItem失败。 +unknown.type=未知类型。 +unknown.operateType=未知操作类型。 +unknown.level1TypeEnum=未知的level1TypeEnum。 +the.id.value.is.out.of.range=ID值超出范围。 +library.not.found=未找到Library。 +wrong.clothes.type=错误的服装类型。 +sysFile.not.found=未找到SysFile。 +libraryList.not.found=未找到LibraryList。 +groupDetails.not.found=未找到GroupDetails。 +history.not.found=未找到History。 +unknown.parameter.level2Type=未知的参数level2Type。 +MARKETING_SKETCH.type.have.been.removed=MARKETING_SKETCH类型已移除。 +unknown.modelType=未知的modelType。 +save.library.failed=保存Library失败。 +get.file.failed=获取文件失败。 +the.path.is.error=路径错误。 +batch.save.colorElements.failed=批量保存colorElements失败。 +initSysFile.ioException=初始化SysFile时发生IOException。 +save.sysFile.failed=保存SysFile失败。 +save.pythonTAllInfo.failed=保存PythonTAllInfo失败。 +save.collection.failed=保存Collection失败。 +save.designItemDetail.failed=保存DesignItemDetail失败。 +save.classification.failed=保存Classification失败。 +update.classification.failed=更新Classification失败。 +please.input.the.prompt=请输入标题。 +please.choose.an.image=请选择图片。 +please.input.the.caption.and.choose.an.image=请输入标题并选择图片。 +please.input.the.caption.or.choose.an.image=请输入标题或选择图片。 +duplicate.likes.are.not.allowed=不允许重复点赞。 +layer.information.not.found=未找到图层信息。 +singleOverall.cannot.be.empty=singleOverall不能为空。 +colorBoards.cannot.be.empty=colorBoards不能为空。 +systemScale.cannot.be.empty=systemScale不能为空。 +modelType.cannot.be.empty=modelType不能为空。 +modelSex.cannot.be.empty=modelSex不能为空。 +templateId.cannot.be.empty=templateId不能为空。 +processId.cannot.be.empty=processId不能为空。 +timeZone.cannot.be.empty=TimeZone不能为空。 +userId.cannot.be.empty=userId不能为空。 +email.cannot.be.empty=email不能为空。 +operationType.cannot.be.empty=operationType不能为空。 +password.cannot.be.empty=密码不能为空。 +emailVerifyCode.cannot.be.empty=emailVerifyCode不能为空。 +loginType.cannot.be.empty=loginType不能为空。 +userName.cannot.be.empty=用户名不能为空。 +sketchBoards.designType.cannot.be.empty=sketchBoards designType不能为空。 +moodBoards.designType.cannot.be.empty=moodBoards designType不能为空。 +printBoards.designType.cannot.be.empty=printBoards designType不能为空。 +unknown.parameter.singleOverall=未知参数singleOverall。 +unknown.parameter.switchCategory=未知参数switchCategory。 +collectionId.cannot.be.empty=collectionId不能为空。 +designPythonOutfitId.cannot.be.empty=designPythonOutfitId不能为空。 +designItemId.cannot.be.empty=designItemId不能为空。 +designId.cannot.be.empty=designId不能为空。 +groupDetailId.cannot.be.empty=groupDetailId不能为空。 +validStartTime.cannot.be.empty=validStartTime不能为空。 +validEndTime.cannot.be.empty=validEndTime不能为空。 +user_id.cannot.be.empty=user_id不能为空。 +session_id.cannot.be.empty=session_id不能为空。 +rgbValue.cannot.be.empty=rgbValue不能为空。 +file.cannot.be.empty=文件不能为空。 +file.type.unsupported=不支持的文件类型。 +file.size.exceed.limit=文件大小超出限制。 +select1Id.cannot.be.empty=select1Id不能为空。 +select2Id.cannot.be.empty=select2Id不能为空。 +isPin.cannot.be.empty=isPin不能为空。 +designType.cannot.be.empty=designType不能为空。 +priority.cannot.be.empty=priority不能为空。 +clothes.cannot.be.empty=clothes不能为空。 +isPreview.cannot.be.empty=isPreview不能为空。 +h.cannot.be.empty=h不能为空。 +s.cannot.be.empty=s不能为空。 +v.cannot.be.empty=v不能为空。 +userGroupId.cannot.be.empty=userGroupId不能为空。 +userGroupName.cannot.be.empty=userGroupName不能为空。 +libraryId.cannot.be.empty=libraryId不能为空。 +shoulderLeft.cannot.be.empty=shoulderLeft不能为空。 +shoulderRight.cannot.be.empty=shoulderRight不能为空。 +waistbandLeft.cannot.be.empty=waistbandLeft不能为空。 +waistbandRight.cannot.be.empty=waistbandRight不能为空。 +handLeft.cannot.be.empty=handLeft不能为空。 +handRight.cannot.be.empty=handRight不能为空。 +id.cannot.be.empty=id不能为空。 +url.cannot.be.empty=url不能为空。 +type.cannot.be.empty=type不能为空。 +color.cannot.be.empty=颜色不能为空。 +generateDetailId.cannot.be.empty=generateDetailId不能为空。 +level1Type.cannot.be.empty=level1Type不能为空。 +regionNum.cannot.be.empty=regionNum不能为空。 +phone.cannot.be.empty=手机号不能为空。 +printId.cannot.be.empty=printId不能为空。 +path.cannot.be.empty=路径不能为空。 +classificationName.cannot.be.empty=标签名不能为空。 +level2Type.cannot.be.empty=level2Type不能为空。 +generateItem.does.not.exist=generateItem不存在。 +level1Type.does.not.match=level1Type不匹配。 +the.image.does.not.exist.please.reselect=图片不存在,请重新选择。 +design.item.does.not.exist=设计项目不存在。 +layers.does.not.exists=图层不存在。 +unknown.generate.type=未知的生成类型。 +the.workspace.lastIndex.not.found=未找到工作区的lastIndex。 +gender.cannot.be.empty=性别不能为空。 +image.synthesis.failed=图像合成失败。 +priority.cannot.be.repeated=优先级不能重复。 +image.modify.failed=图片修改失败,请稍后重试。 +slogan.style.cannot.be.empty=标语风格文本不能为空。 +slogan.image.cannot.be.empty=标语图片不能为空。 +questionnaire.filled.out=您已填写过当前问卷。 +user.has.no.account=当前用户没有账号。 +you.cannot.follow.yourself=您不能关注您自己。 +you.have.already.followed.this.user=您已经关注当前用户。 +subscription.success=订阅成功。 +unsubscribe.success=取消订阅成功。 +you.have.not.followed.the.current.user=您还未关注当前用户。 +remaining.modifications=剩余修改次数为0。 +you.have.participated.in.the.event=您已经参与活动。 +only.original.works.can.participate.in.the.event=抱歉,只有原创作品能参与活动。 +remaining.credits.insufficient=您的剩余积分不够本次生成消耗,请充值。 +you.haven't.subscribed.to.any.products.yet=您还未订阅任何产品。 +generate.result.below.standard=当前生成的图像质量低于标准。请考虑调整您的提示词并再次尝试。 +partial.design.failed=局部设计失败,请稍后重试。 +email.count.limit=您的账号触发邮件发送频率限制,请一小时后重试。 +model.path.cannot.be.empty=模特路径不能为空。 +this.promotion.code.has.expired=该促销码已过期。 +this.promotion.code.is.invalid=该促销码无效。 +one.time.limit.per.customer=该码已兑换,每个促销码每位用户仅限使用一次。 +element.already.exists=元素已存在于公共库中。 +have.no.permission=您没有权限。 +permit.bulk.creation=系统仅当不存在任何子账号时,才允许批量创建账号。 +school.account.login=检测到学校账号,请从教育版入口登录。 +enterprise.account.login=检测到企业账号,请从企业版入口登录。 +white.bg.add.fail=透明图添加白色背景失败。 +message.confirm.fail=消息确认失败,转为手动确认消息。 +unknown.designPictureType=未知图片类型。 +base64.data.empty=参数错误:图片base64数据为空。 +edited.account.information.cannot.be.blank=请提供修改后的用户信息! +oldEmail.cannot.be.empty=旧邮箱不能为空! +oldUserName.cannot.be.empty=旧用户名不能为空! +oldUserName.does.not.exist=旧用户名不存在! +oldAccount.does.not.exist=旧账号不存在! +the.Google.has.been.bound=无法绑定:该 Google 账号已被使用。 +Unable.to.obtain.WeChat.account.information=无法获取微信账号信息,绑定失败。 +title.has.been.used=标题已被使用。 +source.image.does.not.exist=源图片不存在。 +email.has.been.registered=邮箱已被使用。 +unknown.subscription.type=未知订阅类型。 +unknown.product.type=未知商品类型。 +unknown.Promotion.Code=未知推广码。 +file.upload.fail=文件上传失败。 +project.id.cannot.be.empty=项目id不能为空。 +failed.to.obtain.system.sketch.recommendation=系统草图推荐获取失败。 +pose.transformation.error=图片转视频失败。 +order.creation.failed=订单创建失败。 +order.deduction.failed=订单金额扣除失败。 +order.query.failed=订单查询失败。 +do.not.have.the.permission.to.delete.this.comment=您没有权限删除此评论。 +unknow.affiliate=未知推广者id。 +unknown.operationType=未知操作类型。 +unknown.mode=未知模式。 +unknown.subscription.plan=未知订阅计划。 +unknown.subscription.status=未知订阅状态。 +subscription.has.expired=切换失败,订阅已过期。 +unknown.administrator.user=操作失败,未知管理员用户。 +no.permission.manage.subscription=切换失败,您没有权限管理该订阅。 +unknown.organization=未知组织。 +valid.subscription.period=计划仍在有效期内,请到期后再删除。 +users.currently.using.this.plan=存在用户正在使用此计划,无法删除。 +deletion.failed.please.try.again.later=删除失败,请稍后重试。 +subscription.plan.has.been.deleted=该订阅计划已被删除。 +subscription.plan.does.not.exist=订阅计划不存在。 +ID.cannot.be.empty.and.must.be.greater.than.0=ID不能为空且必须大于0。 +invalid.time.format=时间格式错误,请使用yyyy-MM-dd HH:mm:ss格式。 +the.start.time.cannot.be.later.than.the.end.time=开始时间不能晚于结束时间。 +page.size.limit=每页数量必须在1-100之间。 +page.num.limit=页码必须大于0。 +end.time.must.be.later.than.the.start.time=订阅结束时间必须晚于开始时间。 +please.specify.the.organizationId=请指定organizationId。 +switch.failed.sub-account.not.under.your.active.subscription=切换失败,该子账号不属于您当前管理的订阅计划。 +Sub-accounts.cannot.be.admins=在订阅中的子账号不能被指定为管理员。 +only.subscription.plans.with.a.PENDING.status.can.have.their.start.time.modified=只有PENDING状态的订阅计划可以修改订阅开始时间。 +end.time.cannot.be.earlier.than.or.equal.to.start.time=订阅结束时间不能早于或等于开始时间。 +end.time.cannot.be.earlier.than.or.equal.to.the.current.time=订阅结束时间不能早于或等于当前时间。 +the.subscription.end.date.can.be.extended.only.not.reduced=订阅的到期时间不能缩短,只能延长。 +total.sub-account.quota.cannot.be.lower.than.existing.sub-accounts=设置的子账号总数量不能低于现存已添加的子账号数量。 +the.credit.limit.set.cannot.be.lower.than.the.amount.of.credits.already.used=设置的积分上限不能低于已使用的积分量。 +administrator.user.is.already.bound.to.different.organization=该管理员用户已与其他组织的订阅计划绑定。 +required.partialDesign=修改单套搭配必须提供'partialDesign'(base64 或 path)。 +account.not.found=账号不存在。 +verification.code.expired=验证码已过期,请请求新的验证码继续。 +verification.code.error=输入的验证码不正确,请检查并重试。 +unknown.message=未知消息。 +forbidden.external.access=禁止外部直接访问此接口。 +failed.to.send.mail=邮件发送失败。 +remote.service.error=远程服务业务错误。 +designer.already.applied=该用户已提交过申请或已入驻。 +designer.application.not.found=申请记录不存在。 +current.status.not.support.review=当前状态不支持审核操作。 +designer.record.not.found=设计师记录不存在。 +designer.not.found=设计师不存在。 +product.id.list.cannot.be.empty=商品ID列表不能为空。 +buyer.id.cannot.be.empty=买家ID不能为空。 +buyer.account.cannot.be.empty=买家账号不能为空。 +all.products.already.purchased=所有商品均已购买,无需重复下单。 +product.not.found=未找到对应的商品。 +order.info.cannot.be.empty=订单信息为空。 +order.status.cannot.be.empty=订单状态不能为空。 +order.id.list.cannot.be.empty=订单ID列表不能为空。 +order.not.found.or.no.permission=订单不存在或无权修改。 +design.for.only.male.or.female=designFor 只能为 male/female。 +product.title.cannot.be.empty=商品标题不能为空。 +product.description.cannot.be.empty=商品描述不能为空。 +product.price.cannot.be.empty=商品价格不能为空。 +product.gender.cannot.be.empty=适用性别不能为空。 +product.gender.must.be.male.or.female=适用性别只能为 male/female。 +product.category.cannot.be.empty=商品分类不能为空。 +product.category.must.be.valid=商品分类只能为 outwear/trousers/blouse/dress/skirt/others/tops/bottoms。 +design.for.only.female.male.or.all=designFor 只能为 female/male/all。 +product.not.purchased.yet=该商品尚未被购买,无法查看。 +category.required=category [] is required。 +category.imageUrl.cannot.be.empty=category imageUrl cannot be null or empty。 + +# 可能会报异常 +userName.does.not.exist=用户名或密码不正确,请检查您的输入并重试。 +password.error=用户名或密码不正确,请检查您的输入并重试。 +email.error=电子邮件不正确,请输入正确的绑定电子邮件。 +email.does.not.exist=电子邮件地址在我们的记录中不存在,请检查并重试。 +the.verification.code.has.expired=验证码已过期,请请求新的验证码继续。 +verification.code.error=输入的验证码不正确,请检查并重试。 +the.number.of.PIN.top.or.bottom.or.outerwear.sketchBoard.cannot.be.more.than.8=在草图板中,PIN上装、下装或外套的数量不能超过8件,请进行相应调整。 +hsv.value.cannot.exceed.the.maximum.of.8=hsv值不能超过8的最大值。 +the.workspaceName.already.exists=具有此名称的工作区已存在,请输入不同的名称。 +unable.to.delete.the.workspace.you.are.currently.using=无法删除当前正在使用的工作区,在尝试删除之前,请选择另一个工作区。 +classificationName.already.exists=您输入的标签名已存在,请输入不同的标签名以避免重复。 +account.expired=您的订阅已过期,账号已被重置为访客身份,请从【个人账号】入口重新登录,如有疑问,请联系 info@code-create.com.hk。 +relate.to.any.subscription=您的管理员账号暂未关联任何订阅,如有疑问,请联系我们 info@code-create.com.hk。 + +# Warnings +the.classification.you.deleted.has.associated.library=您正在尝试删除的标签与现有数据相关联,您确定要继续删除吗? +the.model.has.been.referenced.by.the.workspace=此模型当前正在工作区中使用,删除它可能会影响工作区,仅在确信后再确认删除。 +balance.insufficient.for.trial=想要立即继续使用?请考虑升级到我们的订阅计划,以获得更多额度。 +balance.insufficient.for.paying=您已达到本月的使用额度限制。 + +# Errors +system.busy=系统当前繁忙,请稍候再试。 +user.expired=您的用户会话已过期,请联系管理员更新您的使用权限。 +attributeRetrieval.interface.exception=检索属性数据时发生错误。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +design.interface.exception=设计接口出现错误。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +processMannequins.interface.exception=上传模特时出现错误。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +processSketchBoards.interface.exception=上传草图板时出现错误。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +designProcess.interface.exception=加载进度条时出现问题。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +generate.interface.exception=我们当前正经历大量生成请求。(请稍后再试。如果问题继续,请联系我们的help@aida.com.hk寻求支持。) +generate.interface.error=生成接口出现错误。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +chat-bot.interface.exception=聊天机器人接口出现错误。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +compose-layer.interface.exception=图层合并时出现问题。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +cloth-classification.interface.exception=获取服装类别时出现问题。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) +sr.interface.error=超分接口出现错误。(请稍后再试。如果问题持续,请联系我们的help@aida.com.hk) + +# 多语言返回 +OVERALL=整体 +TOPS=上装 +BOTTOMS=下装 +OUTWEAR=外套 +OTHERS=其他 +BLOUSE=上衣 +DRESS=连衣裙 +TROUSERS=裤子 +SKIRT=短裙 +FEMALE=女装 +MALE=男装 +SLOGAN=标语 +LOGO=标志 +PATTERN=图案 +EMBROIDERY=刺绣 +BEADING=钉珠 +PEARL=珍珠 +RIVET=铆钉 +BUTTON=纽扣 +BELT=腰带 +CORSAGE=胸花 +ZIPPER=拉链 +POCKET=口袋 +THICK=粗线条 +MEDIUM=中线条 +THIN=细线条 +GENERATE=生成线稿 +EXTRACT=提取线稿 +CHILD=儿童 +ADULT=成人