Bladeren bron

feat:多语言处理

PIWALIN 1 week geleden
bovenliggende
commit
b5bd59fe38

+ 17 - 3
src/locales/en.json

@@ -511,8 +511,8 @@
     "singleSpecification": "Single Specification",
     "multipleSpecifications": "Multiple Specifications",
     "shelfStatus": "Shelf Status",
-    "putOnShelf":"Put On Shelf",
-    "removeFromShelf": "Remove From Shelf",
+    "putOnShelf":"On Shelf",
+    "removeFromShelf": "Off Shelf",
     "stockStatus": "Stock Status",
     "inStock": "In Stock",
     "outOfStock": "Out of Stock",
@@ -569,6 +569,20 @@
     "priceGreaterThanZero": "The product price must be greater than 0!",
     "linePriceGreaterThanZero": "The product line price must be greater than or equal to 0!",
     "weightGreaterThanZero": "The product weight must be greater than or equal to 0!",
-    "stockGreaterThanZero": "The product stock must be greater than or equal to 0!"
+    "stockGreaterThanZero": "The product stock must be greater than or equal to 0!",
+    "onlyImage": "Only image files are allowed!",
+    "sizeLimit": "The image size must not exceed 20MB!",
+    "submitProductInfo": "Please submit the basic product information first",
+    "skuLength": "The SKU code length must be greater than 1, please check carefully!",
+    "inventory": "The product inventory must be greater than or equal to 0, please check carefully!",
+    "priceList": "The product price must be greater than or equal to 0, please check carefully!",
+    "deleteConfirm": "Are you sure you want to delete the product \"{name}\"?",
+    "statusChangeConfirm": "Are you sure you want to {text} \"{name}\"?",
+    "statusChangeSuccess": "{text} successful",
+    "removeSkuConfirm": "Are you sure you want to delete this specification value?",
+    "removeSkuRowConfirm": "Are you sure you want to delete this specification?",
+    "deleteGoods": "Are you sure you want to delete the item \"{name}\"?",
+    "confirmGoods": "Are you sure you want to {text} \"{name}\"?",  
+    "success": "{text} successfully" 
   }
 }

+ 563 - 5
src/locales/ru.json

@@ -1,11 +1,569 @@
 {
     "lang":"русский язык",
-
     "nav.setLayout": "Set Layout",
     "nav.logout": "Logout",
+    "盼达点餐管理系统": "Система управления заказами Panda",
     
-    "welcome": "Welcome",
-    "greeting": "Hello, {name}!",
-    "盼达点餐管理系统": "Система управления заказами Panda"
-    
+    "nav": {
+      "setLayout": "Настройки макета",
+      "logout": "Выйти из системы",
+      "confirmLogoutMessage": "Вы уверены, что хотите выйти из системы?",
+      "prompt": "Подсказка",
+      "confirm": "Подтвердить",
+      "cancel": "Отмена"
+    },
+
+    "login": {
+      "welcomeMessage": "Добро пожаловать в {systemName}, ваш маленький помощник по маркетингу для карт лояльности, карт с балансом и карт для посещений!",
+      "usernamePlaceholder": "Логин",
+      "passwordPlaceholder": "Пароль",
+      "captchaPlaceholder": "Введите код с картинки",
+      "rememberPassword": "Запомнить пароль",
+      "loginNow": "Войти сейчас",
+      "loggingIn": "Вход в систему...",
+      "copyrightMessage": "Copyright © {startYear}-{endYear} <a class=\"link\" href=\"{url}\">{url}</a> Все права защищены.",
+      "usernameRequired": "Пожалуйста, введите ваш логин",
+      "passwordRequired": "Пожалуйста, введите ваш пароль",
+      "captchaRequired": "Пожалуйста, введите код с картинки"
+    },
+
+    "operational": {
+      "overview": "Обзор операционной деятельности",
+      "totalTransactionAmount": "Общая сумма транзакций (Юани)",
+      "commonFunctions": "Основные функции",
+      "orderManagement": "Управление заказами",
+      "goodsManagement": "Управление товарами",
+      "reportStatistics": "Статистика отчетов",
+      "lastSevenDaysOrderCount": "Количество заказов за последние семь дней",
+      "orderStatistics": "Статистика заказов",
+      "incomeComparisonAmount": "Сравнение доходов",
+      "income": "Доход",
+      "startTimePlaceholder": "Время начала",
+      "endTimePlaceholder": "Время окончания",
+      "reset": "Сбросить",
+      "query": "Запрос",
+      "lastThreeDays": "Последние 3 дня",
+      "lastSevenDays": "Последние 7 дней",
+      "lastFifteenDays": "Последние 15 дней",
+      "lastThirtyDays": "Последние 30 дней",
+      "dataOverview": "Обзор данных",
+      "orderCount": "Количество заказов (шт.)",
+      "transactionAmount": "Сумма транзакций (Юани)",
+      "totalPayAmount": "Общая сумма платежей (Юани)",
+      "totalOrderCount": "Общее количество заказов (шт.)",
+      "totalPayUserCount": "Общее количество пользователей, совершивших оплату",
+      "operationTrend": "Тренд операционной деятельности",
+      "dataRanking": "Рейтинг данных",
+      "goodsSalesRanking": "Рейтинг продаж товаров",
+      "userConsumptionRanking": "Рейтинг потребительских расходов пользователей",
+      "id": "ID",
+      "goodsName": "Название товара",
+      "salesVolume": "Объем продаж",
+      "salesAmount": "Сумма продаж (Юани)",
+      "userName": "Имя пользователя",
+      "memberNumber": "Номер участника",
+      "consumptionAmount": "Сумма потребительских расходов (Юани)",
+      "chart1Title": "Количество заказов за последние семь дней",
+      "chart1Header": "Статистика заказов",
+      "chart2Title": "Сравнение доходов",
+      "chart2Header": "Доход",
+      "lastSevenDaysOrderCount": "Количество заказов за последние семь дней",
+      "orderStatistics": "Статистика заказов",
+      "incomeTrendChart": "График доходов",
+      "memberStatistics": "Статистика участников"
+    },
+
+    "operational.overview": "Обзор операционной деятельности",
+    "today.revenue": "Сегодняшний доход",
+    "welcome": "Добро пожаловать",
+    "greeting": "Привет, {name}!",
+
+    "orderList":{
+        "orderNumber": "Номер заказа",
+        "pleaseEnterOrderNumber": "Пожалуйста, введите номер заказа",
+        "tableCode": "Код стола",
+        "pleaseEnterTableCode": "Пожалуйста, введите код стола",
+        "orderStatus": "Статус заказа",
+        "pleaseSelectOrderStatus": "Пожалуйста, выберите статус заказа",
+        "paymentStatus": "Статус оплаты",
+        "orderTime": "Время заказа",
+        "startTime": "Время начала",
+        "endTime": "Время окончания",
+        "query": "Запрос",
+        "export": "Экспорт",
+        "reset": "Сбросить",
+        "orderID": "ID заказа",
+        "storeName": "Название магазина",
+        "totalAmount": "Общая сумма",
+        "paymentAmount": "Сумма оплаты",
+        "staffName": "Сотрудник",
+        "updateTime": "Время обновления",
+        "operation": "Операция",
+        "modify": "Изменить",
+        "viewDetails": "Посмотреть детали",
+        "totalOrderAmount": "Общая сумма заказа",
+        "pleaseEnterTotalOrderAmount": "Пожалуйста, введите общую сумму заказа",
+        "discountAmount": "Сумма скидки",
+        "pleaseEnterDiscountAmount": "Пожалуйста, введите сумму скидки",
+        "orderRemark": "Комментарий к заказу",
+        "pleaseEnterOrderRemark": "Пожалуйста, введите комментарий к заказу",
+        "confirm": "Подтвердить",
+        "cancel": "Отмена",
+        "verifyOrder": "Подтвердить заказ",
+        "verificationCode": "Код подтверждения",
+        "pleaseEnterVerificationCode": "Пожалуйста, введите код подтверждения заказа, который можно получить в деталях заказа на клиентской стороне",
+        "confirmVerification": "Подтвердить подтверждение",
+        "fillLogisticsInfo": "Заполнить информацию о логистике",
+        "logisticsCompany": "Логистическая компания",
+        "pleaseEnterLogisticsCompany": "Пожалуйста, введите логистическую компанию",
+        "logisticsTrackingNumber": "Номер отслеживания логистики",
+        "pleaseEnterLogisticsTrackingNumber": "Пожалуйста, введите номер отслеживания",
+        "submitLogisticsInfo": "Отправить информацию о логистике",
+        "orderRefund": "Возврат заказа",
+        "paymentMethod": "Метод оплаты",
+        "actualPaymentAmount": "Фактическая сумма оплаты",
+        "actualPaymentAmountForOrder": "Фактическая сумма оплаты за заказ",
+        "refundAmount": "Сумма возврата",
+        "pleaseEnterRefundAmount": "Пожалуйста, введите сумму возврата",
+        "tipUnitYuan": "( Подсказка: единица — юань )",
+        "refundRemark": "Комментарий к возврату",
+        "pleaseEnterRefundRemark": "Пожалуйста, введите комментарий к возврату",
+        "totalAmountRequired": "Общая сумма не может быть пустой",
+        "verifyCodeRequired": "Код подтверждения не может быть пустым",
+        "expressCompanyRequired": "Логистическая компания не может быть пустой",
+        "expressNoRequired": "Номер отслеживания не может быть пустым",
+        "refundAmountRequired": "Сумма возврата не может быть пустой",
+        "correctRefundAmount": "Пожалуйста, введите правильную сумму возврата",
+        "enable": "Включить",
+        "disable": "Отключить",
+        "confirmChangeOrderStatus": "Вы уверены, что хотите {action} заказ с номером «{orderSn}»?",
+        "statusChangeSuccess": "{action} успешно",
+        "verifySuccess": "Подтверждение успешно!",
+        "modifySuccess": "Изменение успешно!",
+        "modifyError": "Ошибка при изменении",
+        "modifyOrder": "Изменить заказ",
+        "requestProcessing": "Запрос в обработке...",
+        "submitExpressSuccess": "Информация о логистике успешно отправлена!",
+        "refundAmountExceed": "Сумма возврата не может быть больше общей суммы заказа!",
+        "submitRefundSuccess": "Возврат успешно отправлен!",
+        "confirmDeleteOrder": "Вы уверены, что хотите удалить элемент с номером заказа «{orderSn}»?",
+        "deleteSuccess": "Удаление успешно",
+        "printSendSuccess": "Печать и отправка успешны!",
+        "printSendFail": "Ошибка при печати и отправке!",
+
+        "detail":{
+          "basicInfo": "Основная информация",
+          "orderNumber": "Номер заказа",
+          "totalAmount": "Общая сумма",
+          "orderStatus": "Статус заказа",
+          "orderTime": "Время заказа",
+          "tableCodeForOrder": "Код стола для заказа",
+          "remarkInfo": "Информация о примечаниях",
+          "paymentInfo": "Информация об оплате",
+          "paymentAmount": "Сумма оплаты",
+          "paymentStatus": "Статус оплаты",
+          "deductionAmount": "Сумма скидки",
+          "paymentMethod": "Метод оплаты",
+          "paymentTime": "Время оплаты",
+          "usedCoupon": "Использованный купон",
+          "goodsInfo": "Информация о товаре",
+          "goodsID": "ID товара",
+          "image": "Изображение",
+          "name": "Название",
+          "specification": "Спецификация",
+          "price": "Цена",
+          "discountAmountForGoods": "Сумма скидки на товар",
+          "quantity": "Количество"
+        }
+      },
+
+      "currency":{
+        "currency": "Валюта",
+        "pleaseEnterCurrencyNameOrSymbol": "Пожалуйста, введите название или символ валюты",
+        "search": "Поиск",
+        "reset": "Сбросить",
+        "addNewCurrency": "Добавить новую валюту",
+        "ID": "ID",
+        "currencyName": "Название валюты",
+        "currencySymbol": "Символ валюты",
+        "createTime": "Время создания",
+        "operation": "Операция",
+        "modify": "Изменить",
+        "pleaseEnterCurrencyName": "Пожалуйста, введите название валюты",
+        "pleaseEnterCurrencySymbol": "Пожалуйста, введите символ валюты",
+        "confirm": "Подтвердить",
+        "cancel": "Отмена",
+        "currencyNameRequired": "Название валюты не может быть пустым",
+        "currencySymbolRequired": "Символ валюты не может быть пустым",
+        "enable": "Включить",
+        "disable": "Отключить",
+        "confirmChangeStatus": "Вы уверены, что хотите {action} магазин «{name}»?",
+        "statusChangeSuccess": "{action} успешно",
+        "modifySuccess": "Изменение прошло успешно",
+        "addSuccess": "Добавление прошло успешно",
+        "editCurrency": "Редактировать валюту"
+      },
+      
+      "merchant": {
+        "merchantNumber": "Номер торговца",
+        "pleaseEnterMerchantNumber": "Пожалуйста, введите номер торговца",
+        "merchantName": "Название торговца",
+        "pleaseEnterMerchantName": "Пожалуйста, введите название торговца",
+        "status": "Статус",
+        "enabledKey": "A",
+        "enabled": "Включено",
+        "disabledKey": "N",
+        "disabled": "Отключено",
+        "search": "Поиск",
+        "reset": "Сбросить",
+        "addNewMerchant": "Добавить нового торговца",
+        "ID": "ID",
+        "contactPerson": "Контактное лицо",
+        "phoneNumber": "Номер телефона",
+        "address": "Адрес",
+        "createTime": "Время создания",
+        "operation": "Операция",
+        "modify": "Изменить",
+        "delete": "Удалить",
+        "pleaseEnterMerchantNumberTip": "Пожалуйста, введите номер торговца (5-30 символов), если не введен, будет сгенерирован автоматически",
+        "merchantType": "Тип торговца",
+        "pleaseSelectMerchantType": "Пожалуйста, выберите тип торговца",
+        "selectSuitableIndustryTip": "Подсказка: выберите подходящую отрасль",
+        "merchantLogo": "Логотип торговца",
+        "clickToModifyLogoTip": "Подсказка: кликните на изображение для изменения",
+        "pleaseEnterContactPersonName": "Пожалуйста, введите имя контактного лица",
+        "contactPhone": "Телефон для связи",
+        "pleaseEnterContactPhone": "Пожалуйста, введите телефон для связи",
+        "contactAddress": "Адрес для связи",
+        "pleaseEnterContactAddress": "Пожалуйста, введите адрес для связи",
+        "wxMiniAppId": "AppId мини-программы WeChat",
+        "pleaseEnterWxMiniAppIdTip": "Пожалуйста, введите AppId мини-программы WeChat (30-50 символов)",
+        "wxMiniAppSecret": "AppSecret мини-программы WeChat",
+        "pleaseEnterWxMiniAppSecretTip": "Пожалуйста, введите AppSecret мини-программы WeChat (30-50 символов)",
+        "wxOfficialAppId": "AppId официального аккаунта WeChat",
+        "wxOfficialAppSecret": "AppSecret официального аккаунта WeChat",
+        "remarkInfo": "Примечания",
+        "pleaseEnterContent": "Пожалуйста, введите содержание",
+        "enabledLabel": "A",
+        "disabledLabel": "N",
+        "confirm": "Подтвердить",
+        "cancel": "Отмена",
+        "merchantNumberRequired": "Номер торговца не может быть пустым",
+        "merchantNumberLengthRange": "Длина номера торговца должна быть от 5 до 30 символов",
+        "merchantNameRequired": "Название торговца не может быть пустым",
+        "merchantNameLengthRange": "Длина названия торговца должна быть от 2 до 50 символов",
+        "enable": "Включить",
+        "disable": "Отключить",
+        "confirmChangeStatus": "Вы уверены, что хотите {action} торговца «{name}»?",
+        "statusChangeSuccess": "{action} успешно",
+        "addNewMerchant": "Добавить нового торговца",
+        "modifySuccess": "Изменения успешно сохранены",
+        "addSuccess": "Успешно добавлено",
+        "editMerchant": "Редактировать торговца",
+        "confirmDelete": "Вы уверены, что хотите удалить элемент данных «{name}»?",
+        "deleteSuccess": "Удаление прошло успешно"
+      },
+
+      "storeList": {
+        "list": {
+          "storeName": "Название магазина",
+          "pleaseEnterStoreName": "Пожалуйста, введите название магазина",
+          "status": "Статус",
+          "enabledKey": "A",
+          "enabled": "Включено",
+          "disabledKey": "N",
+          "disabled": "Отключено",
+          "search": "Поиск",
+          "reset": "Сбросить",
+          "addNewStore": "Добавить новый магазин",
+          "ID": "ID",
+          "belongingMerchant": "Принадлежащий торговец",
+          "contactPerson": "Контактное лицо",
+          "phoneNumber": "Номер телефона",
+          "address": "Адрес",
+          "createTime": "Время создания",
+          "operation": "Операция",
+          "modify": "Изменить",
+          "delete": "Удалить",
+          "pleaseEnterStoreName": "Пожалуйста, введите название магазина",
+          "merchantLogo": "Логотип торговца",
+          "clickToModifyTip": "Подсказка: кликните на изображение для изменения",
+          "pleaseSelectBelongingMerchant": "Пожалуйста, выберите принадлежащего торговца",
+          "selectCurrency": "Выберите валюту",
+          "pleaseSelectCurrency": "Пожалуйста, выберите валюту",
+          "contactPersonName": "Имя контактного лица",
+          "pleaseEnterContactPersonName": "Пожалуйста, введите имя контактного лица",
+          "contactPersonPhone": "Телефон контактного лица",
+          "pleaseEnterContactPersonPhone": "Пожалуйста, введите телефон контактного лица",
+          "storeDetailedAddress": "Подробный адрес магазина",
+          "pleaseEnterStoreDetailedAddress": "Пожалуйста, введите подробный адрес магазина",
+          "businessHours": "Часы работы",
+          "pleaseEnterBusinessHours": "Пожалуйста, введите часы работы магазина",
+          "remarkInfo": "Примечания",
+          "pleaseEnterRemarkInfo": "Пожалуйста, введите содержание примечаний",
+          "enabledLabel": "A",
+          "disabledLabel": "N",
+          "confirm": "Подтвердить",
+          "cancel": "Отмена",
+          "storeNameRequired": "Название магазина не может быть пустым",
+          "storeNameLengthRange": "Длина названия магазина должна быть от 2 до 30 символов",
+          "belongingMerchantRequired": "Принадлежащий торговец не может быть пустым",
+          "contactPersonNameRequired": "Имя контактного лица не может быть пустым",
+          "contactPersonNameLengthRange": "Длина имени контактного лица должна быть от 2 до 30 символов",
+          "contactPersonPhoneRequired": "Телефон контактного лица не может быть пустым",
+          "contactPersonPhoneLengthRange": "Длина телефона контактного лица должна быть от 6 до 30 символов",
+          "currencyRequired": "Валюта не может быть пустой",
+          "enabled": "Включить",
+          "disabled": "Отключить",
+          "confirmChangeStatus": "Вы уверены, что хотите {action} магазин «{storeName}»?",
+          "statusChangeSuccess": "{action} успешно",
+          "addNewStore": "Добавить новый магазин",
+          "modifySuccess": "Изменения успешно сохранены",
+          "addSuccess": "Магазин успешно добавлен",
+          "editStore": "Редактировать магазин",
+          "confirmDelete": "Вы уверены, что хотите удалить элемент данных «{name}»?",
+          "deleteSuccess": "Удаление прошло успешно"
+        },
+        "info": {}
+      },
+
+      "tableManagement": {
+          "tableCode": "Код стола",
+          "pleaseEnterTableCode": "Пожалуйста, введите код стола",
+          "status": "Статус",
+          "enabledKey": "A",
+          "enabled": "Включено",
+          "disabledKey": "N",
+          "disabled": "Отключено",
+          "search": "Поиск",
+          "reset": "Сброс",
+          "addNewTableCode": "Добавить новый код стола",
+          "ID": "ID",
+          "tableEncoding": "Код стола",
+          "belongingStore": "Принадлежащий магазин",
+          "publicOwnership": "Общая собственность",
+          "createTime": "Время создания",
+          "operation": "Операция",
+          "modify": "Изменить",
+          "delete": "Удалить",
+          "pleaseEnterTableEncoding": "Пожалуйста, введите код стола, например: A01",
+          "pleaseSelectBelongingStore": "Пожалуйста, выберите принадлежащий магазин",
+          "remarkInfo": "Информация о замечаниях",
+          "pleaseEnterRemarkInfo": "Пожалуйста, введите содержание информации о замечаниях",
+          "sort": "Сортировка",
+          "sortTip": "Подсказка: чем меньше число, тем выше в рейтинге",
+          "enabledLabel": "A",
+          "disabledLabel": "N",
+          "confirm": "Подтвердить",
+          "cancel": "Отмена",
+          "tableCodeRequired": "Код стола не может быть пустым",
+          "tableCodeLengthRange": "Длина кода стола должна быть от 2 до 30 символов",
+          "belongingStoreRequired": "Принадлежащий магазин не может быть пустым",
+          "enable": "Включить",
+          "disable": "Отключить",
+          "confirmChangeTableStatus": "Вы уверены, что хотите {action} код стола “{tableCode}”?",
+          "statusChangeSuccess": "{action} успешно",
+          "addNewTableCode": "Добавить новый код стола",
+          "modifySuccess": "Изменения успешны",
+          "addSuccess": "Добавление успешно",
+          "editTableCode": "Редактировать код стола",
+          "confirmDeleteTableCode": "Вы уверены, что хотите удалить элемент данных “{tableCode}”?",
+          "deleteSuccess": "Удаление успешно"
+      },
+
+      "employee": {
+          "employeeCategory": "Категория сотрудника",
+          "selectEmployeeCategory": "Пожалуйста, выберите категорию сотрудника",
+          "name": "Имя",
+          "inputName": "Пожалуйста, введите имя",
+          "mobilePhone": "Мобильный телефон",
+          "inputMobilePhone": "Пожалуйста, введите мобильный телефон",
+          "status": "Статус",
+          "enabled": "Включено",
+          "disabled": "Отключено",
+          "search": "Поиск",
+          "reset": "Сброс",
+          "addEmployee": "Добавить сотрудника",
+          "id": "ID",
+          "category": "Категория",
+          "associatedMemberId": "Связанный ID члена",
+          "belongingStore": "Принадлежащий магазин",
+          "none": "Нет",
+          "createTime": "Время создания",
+          "updateTime": "Время обновления",
+          "operation": "Операция",
+          "modify": "Изменить",
+          "delete": "Удалить",
+          "selectBelongingStore": "Пожалуйста, выберите принадлежащий магазин",
+          "allStores": "Все магазины",
+          "remark": "Информация о замечаниях",
+          "inputContent": "Пожалуйста, введите содержание",
+          "confirm": "Подтвердить",
+          "cancel": "Отмена",
+          "nameRequired": "Имя не может быть пустым",
+          "nameLengthLimit": "Длина имени должна быть от 2 до 30 символов",
+          "mobileRequired": "Мобильный телефон не может быть пустым",
+          "mobileLengthLimit": "Длина мобильного телефона должна быть 11 символов",
+          "storeIdRequired": "Пожалуйста, выберите принадлежащий магазин",
+          "confirmStatusChange": "Вы уверены, что хотите {status} \"{name}\"?",
+          "statusChangeSuccess": "{status} успешно",
+          "addSuccess": "Добавление успешно",
+          "modifySuccess": "Изменения успешны",
+          "editEmployeeInfo": "Редактировать информацию о сотруднике",
+          "confirmDelete": "Вы уверены, что хотите удалить элемент данных \"{name}\"?",
+          "deleteSuccess": "Удаление успешно"
+      },
+
+      "ImageUpload": {
+        "pleaseUpload": "Пожалуйста, загрузите",
+        "fileSizeNotExceed": "Размер не должен превышать",
+        "fileFormat": "Формат",
+        "ofFile": "файла",
+        "fileFormatError": "Неверный формат файла, пожалуйста, загрузите",
+        "imageFormatFile": "файл изображения!",
+        "fileSizeExceed": "Размер загружаемого изображения не должен превышать",
+        "mb": "МБ!",
+        "uploadingImage": "Загрузка изображения, пожалуйста, подождите...",
+        "fileNumberExceed": "Количество загружаемых файлов не может превышать",
+        "ge": "шт!",
+        "uploadImageFailed": "Не удалось загрузить изображение, пожалуйста, повторите попытку"
+      },
+      
+      "account": {
+        "basicInfo": "Основная информация",
+        "edit": "Редактировать",
+        "account": "Аккаунт",
+        "password": "Пароль",
+        "avatar": "Аватар",
+        "userInfo": "Информация о пользователе",
+        "save": "Сохранить",
+        "close": "Закрыть",
+        "pleaseInputPassword": "Пожалуйста, введите пароль",
+        "passwordFormat": "Пароль должен содержать минимум 6 символов или цифр",
+        "passwordChangeSuccess": "Пароль успешно изменен"
+      },
+
+      "goodList": {
+        "categoryName": "Название категории",
+        "pleaseEnterCategoryName": "Пожалуйста, введите название категории",
+        "belongingShop": "Принадлежащий магазин",
+        "publicCategory": "Публичная категория",
+        "categoryId": "ID категории",
+        "Name": "Название",
+        "image": "Изображение",
+        "creationTime": "Дата создания",
+        "updateTime": "Дата обновления",
+        "actions": "Действия",
+        "sortOrder": "Порядок сортировки",
+        "remarks": "Примечания",
+        "enable": "Включить",
+        "disable": "Отключить",
+        "tipOrder": "Подсказка: Чем меньше значение, тем выше в рейтинге",
+        "tipImage": "Подсказка: Нажмите на изображение для редактирования, рекомендуемый размер 128 x 128",
+        "publicAll": "Публичное все",
+        "enterRemarkContent": "Пожалуйста, введите содержание примечания",
+        "addProductCategory": "Добавить новую категорию товара",
+        "editProductCategory": "Редактировать категорию товара",
+        "confirmDelete": "Вы уверены, что хотите удалить?",
+        "onlyImageAllowed": "Можно загрузить только изображения!",
+        "imageSizeLimit": "Размер изображения не должен превышать 20 МБ!",
+        "addSuccess": "Добавлено успешно",
+        "modificationSuccess": "Изменено успешно",
+        "SaveSuccessful": "Сохранено успешно!",
+        "deleteSuccess": "Удалено успешно",
+        "confirm": "Подтвердить",
+        "cancel": "Отмена",
+        "modify": "Изменить",
+        "delete": "Удалить",
+        "status": "Статус",
+        "search": "Поиск",
+        "reset": "Сбросить",
+        "addNew": "Добавить новый",
+        "edit": "Редактировать",
+        "productName": "Название товара",
+        "productNamePlaceholder": "Пожалуйста, введите название товара",
+        "store": "Магазин",
+        "PublicGoods": "Публичные товары",
+        "productCategory": "Категория товара",
+        "selectCategory": "Пожалуйста, выберите категорию товара",
+        "productType": "Тип товара",
+        "selectProductType": "Пожалуйста, выберите тип товара",
+        "specificationType": "Тип спецификации",
+        "singleSpecification": "Одна спецификация",
+        "multipleSpecifications": "Несколько спецификаций",
+        "shelfStatus": "Статус на полке",
+        "putOnShelf": "Выставить на полку",
+        "removeFromShelf": "Снять с полки",
+        "stockStatus": "Статус наличия на складе",
+        "inStock": "Есть в наличии",
+        "outOfStock": "Нет в наличии",
+        "id": "ID",
+        "storeName": "Название магазина",
+        "mainImage": "Основное изображение",
+        "remainingStock": "Оставшийся запас",
+        "category": "Категория",
+        "price": "Цена",
+        "ProductStatus": "Статус товара",
+        "ProductImage": "Изображение товара",
+        "displaySorting": "Сортировка отображения",
+        "hintSmallerValueHigherRank": "Подсказка: Чем меньше значение, тем выше в рейтинге",
+        "basicInfo": "Основная информация",
+        "extendedInfo": "Дополнительная информация",
+        "productDescription": "Описание товара",
+        "ProductSpecifications": "Спецификации товара",
+        "InventoryQuantity": "Количество на складе",
+        "quantity": "Пожалуйста, введите количество на складе",
+        "commodityPrice": "Цена товара",
+        "goodsPrice": "Пожалуйста, введите цену товара",
+        "UnitYuan": "Единица: Юань",
+        "ProductWeight": "Вес товара",
+        "serviceDuration": "Продолжительность услуги",
+        "enterServiceDuration": "Пожалуйста, введите продолжительность услуги, единица: минута",
+        "serviceDurationTip": "Подсказка: Введите число, единица: минута",
+        "couponId": "ID купона",
+        "enterCouponId": "Пожалуйста, введите ID купонов для покупки, разделённые запятой, например: 1000,1001,1002",
+        "couponIdTip": "Подсказка: ID купонов для покупки, разделённые запятой",
+        "Batch": "Пакетная настройка",
+        "skuNo": "SKU код",
+        "randomGenerate": "Случайная генерация",
+        "linePrice": "Перечеркнутая цена",
+        "goodStock": "Запас товара",
+        "goodsWeight": "Вес товара",
+        "confirmSetting": "Подтвердить настройку",
+        "index": "Индекс",
+        "specifications": "Спецификации",
+        "skuCode": "SKU код",
+        "salesPrice": "Цена продажи (Юань)",
+        "originalPrice": "Перечеркнутая цена (Юань)",
+        "stock": "Запас товара",
+        "weight": "Вес (кг)",
+        "addSpec": "Добавить спецификацию",
+        "specName": "Название спецификации",
+        "specValue": "Значение спецификации",
+        "add": "Добавить",
+        "deleteSpec": "Удалить спецификацию",
+        "enterSpecName": "Пожалуйста, введите название спецификации",
+        "specNameRequired": "Название спецификации не может быть пустым",
+        "enterSpecValue": "Пожалуйста, введите значение спецификации",
+        "addSpecValue": "Добавить значение спецификации",
+        "specValueRequired": "Значение спецификации не может быть пустым",
+        "priceGreaterThanZero": "Цена товара должна быть больше 0!",
+        "linePriceGreaterThanZero": "Перечеркнутая цена товара должна быть больше или равна 0!",
+        "weightGreaterThanZero": "Вес товара должен быть больше или равен 0!",
+        "stockGreaterThanZero": "Запас товара должен быть больше или равен 0!",
+        "onlyImage": "Можно загружать только изображения!",
+        "sizeLimit": "Размер изображения не должен превышать 20 МБ!",
+        "submitProductInfo": "Пожалуйста, сначала отправьте основную информацию о товаре",
+        "skuLength": "Длина SKU кода товара должна быть больше 1, пожалуйста, внимательно проверьте!",
+        "inventory": "Запас товара должен быть больше или равен 0, пожалуйста, внимательно проверьте!",
+        "priceList": "Цена товара должна быть больше или равна 0, пожалуйста, внимательно проверьте!",
+        "deleteConfirm": "Вы уверены, что хотите удалить товар \"{name}\"?",
+        "statusChangeConfirm": "Вы уверены, что хотите изменить статус на {text} для \"{name}\"?",
+        "statusChangeSuccess": "{text} успешно",
+        "removeSkuConfirm": "Вы уверены, что хотите удалить это значение спецификации?",
+        "removeSkuRowConfirm": "Вы уверены, что хотите удалить эту спецификацию?",
+        "deleteGoods": "Вы уверены, что хотите удалить данные товара \"{name}\"?",
+        "confirmGoods": "Вы уверены, что хотите {text} товар \"{name}\"?",
+        "success": "{text} успешно"
+      }
   }

+ 591 - 1
src/locales/sr.json

@@ -1,3 +1,593 @@
 {
-  "盼达点餐管理系统": "Система управљања нараштанима Panda"
+  "lang": "Кинези",
+  "盼达点餐管理系统": "Система управљања нараштанима Panda",
+  "curency": "Renminbi",
+  "operational.overview": "Pregled operacija",
+  "today.revenue": "Dnevni prihod",
+  "welcome": "Dobrodošli",
+  "greeting": "Zdravo, {name}!",
+
+  "nav": {
+    "setLayout": "Postavke izgleda",
+    "logout": "Izloguj se",
+    "confirmLogoutMessage": "Da li ste sigurni da želite da se odjavite i izađete iz sistema?",
+    "prompt": "Obaveštenje",
+    "confirm": "Potvrdi",
+    "cancel": "Otkaži"
+  },
+
+  "login": {
+    "welcomeMessage": "Dobrodošli u {systemName}, vašeg malog pomoćnika za članove, uključujući kartice, prepaid kartice, kartice za posete i druge marketinške usluge!",
+    "usernamePlaceholder": "Korisničko ime",
+    "passwordPlaceholder": "Lozinka",
+    "captchaPlaceholder": "Unesite kod za verifikaciju",
+    "rememberPassword": "Zapamti lozinku",
+    "loginNow": "Prijavite se odmah",
+    "loggingIn": "Prijavljivanje...",
+    "copyrightMessage": "Copyright © {startYear}-{endYear} <a class=\"link\" href=\"{url}\">{url}</a> Sva prava zadržana.",
+    "usernameRequired": "Molimo unesite vaše korisničko ime",
+    "passwordRequired": "Molimo unesite vašu lozinku",
+    "captchaRequired": "Molimo unesite kod za verifikaciju"
+  },
+
+  "operational": {
+    "overview": "Pregled operacija",
+    "totalTransactionAmount": "Ukupna transakcijska suma (RMB)",
+    "commonFunctions": "Česte funkcije",
+    "orderManagement": "Upravljanje narudžbinama",
+    "goodsManagement": "Upravljanje robom",
+    "reportStatistics": "Statistika izveštaja",
+    "lastSevenDaysOrderCount": "Broj narudžbina u poslednjih 7 dana",
+    "orderStatistics": "Statistika narudžbina",
+    "incomeComparisonAmount": "Iznos poređenja prihoda",
+    "income": "Prihod",
+    "startTimePlaceholder": "Početno vreme",
+    "endTimePlaceholder": "Krajnje vreme",
+    "reset": "Resetuj",
+    "query": "Pretraga",
+    "lastThreeDays": "Poslednja 3 dana",
+    "lastSevenDays": "Poslednjih 7 dana",
+    "lastFifteenDays": "Poslednjih 15 dana",
+    "lastThirtyDays": "Poslednjih 30 dana",
+    "dataOverview": "Pregled podataka",
+    "orderCount": "Broj narudžbina",
+    "transactionAmount": "Transakcijska suma (RMB)",
+    "totalPayAmount": "Ukupna plaćena suma (RMB)",
+    "totalOrderCount": "Ukupni broj narudžbina",
+    "totalPayUserCount": "Ukupan broj korisnika koji su platili",
+    "operationTrend": "Trend operacija",
+    "dataRanking": "Rangiranje podataka",
+    "goodsSalesRanking": "Rangiranje prodaje proizvoda",
+    "userConsumptionRanking": "Rangiranje potrošnje korisnika",
+    "id": "ID",
+    "goodsName": "Naziv proizvoda",
+    "salesVolume": "Prodajna količina",
+    "salesAmount": "Iznos prodaje (RMB)",
+    "userName": "Korisničko ime",
+    "memberNumber": "Broj člana",
+    "consumptionAmount": "Iznos potrošnje (RMB)",
+    "chart1Title": "Broj narudžbina u poslednjih 7 dana",
+    "chart1Header": "Statistika narudžbina",
+    "chart2Title": "Izbor prihoda",
+    "chart2Header": "Prihod",
+    "lastSevenDaysOrderCount": "Broj narudžbina u poslednjih 7 dana",
+    "orderStatistics": "Statistika narudžbina",
+    "incomeTrendChart": "Grafikon trenda prihoda",
+    "memberStatistics": "Statistika članova"
+  },
+
+  "orderList":{
+     "orderNumber": "Broj narudžbine",
+      "pleaseEnterOrderNumber": "Unesite broj narudžbine",
+      "tableCode": "Kod stola",
+      "pleaseEnterTableCode": "Unesite kod stola",
+      "orderStatus": "Status narudžbine",
+      "pleaseSelectOrderStatus": "Molimo odaberite status narudžbine",
+      "paymentStatus": "Status plaćanja",
+      "orderTime": "Vreme narudžbine",
+      "startTime": "Početno vreme",
+      "endTime": "Završno vreme",
+      "query": "Pretraga",
+      "export": "Izvoz",
+      "reset": "Resetuj",
+      "orderID": "ID narudžbine",
+      "storeName": "Ime prodavnice",
+      "totalAmount": "Ukupni iznos",
+      "paymentAmount": "Iznos plaćanja",
+      "staffName": "Ime zaposlenog",
+      "updateTime": "Vreme ažuriranja",
+      "operation": "Operacija",
+      "modify": "Izmeni",
+      "viewDetails": "Pogledaj detalje",
+      "totalOrderAmount": "Ukupni iznos narudžbine",
+      "pleaseEnterTotalOrderAmount": "Unesite ukupni iznos narudžbine",
+      "discountAmount": "Iznos popusta",
+      "pleaseEnterDiscountAmount": "Unesite iznos popusta",
+      "orderRemark": "Napomena za narudžbinu",
+      "pleaseEnterOrderRemark": "Unesite napomenu za narudžbinu",
+      "confirm": "Potvrdi",
+      "cancel": "Otkaži",
+      "verifyOrder": "Verifikuj narudžbinu",
+      "verificationCode": "Kod verifikacije",
+      "pleaseEnterVerificationCode": "Unesite kod verifikacije narudžbine, dobijen iz detalja narudžbine sa korisničkog kraja",
+      "confirmVerification": "Potvrdi verifikaciju",
+      "fillLogisticsInfo": "Popunite informacije o logistici",
+      "logisticsCompany": "Logistička kompanija",
+      "pleaseEnterLogisticsCompany": "Unesite logističku kompaniju",
+      "logisticsTrackingNumber": "Broj praćenja pošiljke",
+      "pleaseEnterLogisticsTrackingNumber": "Unesite broj praćenja pošiljke",
+      "submitLogisticsInfo": "Pošaljite informacije o logistici",
+      "orderRefund": "Povrat novca za narudžbinu",
+      "paymentMethod": "Metoda plaćanja",
+      "actualPaymentAmount": "Stvarni iznos plaćanja",
+      "actualPaymentAmountForOrder": "Stvarni iznos plaćanja za narudžbinu",
+      "refundAmount": "Iznos povrata",
+      "pleaseEnterRefundAmount": "Unesite iznos povrata",
+      "tipUnitYuan": "(Napomena: Jedinica je u juanima)",
+      "refundRemark": "Napomena za povrat novca",
+      "pleaseEnterRefundRemark": "Unesite napomenu za povrat novca",
+      "totalAmountRequired": "Ukupni iznos je obavezan",
+      "verifyCodeRequired": "Kod verifikacije je obavezan",
+      "expressCompanyRequired": "Logistička kompanija je obavezna",
+      "expressNoRequired": "Broj pošiljke je obavezan",
+      "refundAmountRequired": "Iznos povrata je obavezan",
+      "correctRefundAmount": "Unesite ispravan iznos povrata",
+      "enable": "Omogući",
+      "disable": "Onemogući",
+      "confirmChangeOrderStatus": "Da li ste sigurni da želite da {action} narudžbinu sa brojem \"{orderSn}\"?",
+      "statusChangeSuccess": "{action} uspešno",
+      "verifySuccess": "Verifikacija uspešna!",
+      "modifySuccess": "Izmena uspešna!",
+      "modifyError": "Greška pri izmeni",
+      "modifyOrder": "Izmeni narudžbinu",
+      "requestProcessing": "Obrada zahteva...",
+      "submitExpressSuccess": "Uspešno poslata logistička informacija!",
+      "refundAmountExceed": "Iznos povrata ne može biti veći od ukupnog iznosa narudžbine!",
+      "submitRefundSuccess": "Uspešno poslat zahtev za povrat!",
+      "confirmDeleteOrder": "Da li ste sigurni da želite da obrišete podatke narudžbine sa brojem \"{orderSn}\"?",
+      "deleteSuccess": "Uspešno obrisano",
+      "printSendSuccess": "Uspešno poslata za štampanje!",
+      "printSendFail": "Greška pri slanju za štampanje!",
+
+      "detail": {
+        "basicInfo": "Osnovne informacije",
+        "orderNumber": "Broj narudžbine",
+        "totalAmount": "Ukupni iznos",
+        "orderStatus": "Status narudžbine",
+        "orderTime": "Vreme narudžbine",
+        "tableCodeForOrder": "Kod stola za narudžbinu",
+        "remarkInfo": "Informacije o napomenama",
+        "paymentInfo": "Informacije o plaćanju",
+        "paymentAmount": "Iznos plaćanja",
+        "paymentStatus": "Status plaćanja",
+        "deductionAmount": "Iznos popusta",
+        "paymentMethod": "Metoda plaćanja",
+        "paymentTime": "Vreme plaćanja",
+        "usedCoupon": "Korišćenje kupona",
+        "goodsInfo": "Informacije o proizvodima",
+        "goodsID": "ID proizvoda",
+        "image": "Slika",
+        "name": "Naziv",
+        "specification": "Specifikacija",
+        "price": "Cena",
+        "discountAmountForGoods": "Iznos popusta za proizvod",
+        "quantity": "Količina"
+      }
+
+  },
+
+  "currency": {
+    "currency": "Valuta",
+    "pleaseEnterCurrencyNameOrSymbol": "Unesite ime simbola/valute",
+    "search": "Pretraga",
+    "reset": "Resetuj",
+    "addNewCurrency": "Dodaj novu valutu",
+    "ID": "ID",
+    "currencyName": "Ime valute",
+    "currencySymbol": "Simbol valute",
+    "createTime": "Vreme kreiranja",
+    "operation": "Operacija",
+    "modify": "Izmeni",
+    "pleaseEnterCurrencyName": "Unesite ime valute",
+    "pleaseEnterCurrencySymbol": "Unesite simbol valute",
+    "confirm": "Potvrdi",
+    "cancel": "Otkaži",
+    "currencyNameRequired": "Ime valute ne može biti prazno",
+    "currencySymbolRequired": "Simbol valute ne može biti prazan",
+    "enable": "Omogući",
+    "disable": "Onemogući",
+    "confirmChangeStatus": "Da li ste sigurni da želite da {action} prodavnicu „{name}“?",
+    "statusChangeSuccess": "{action} uspešno",
+    "addNewCurrency": "Dodaj novu valutu",
+    "modifySuccess": "Izmena uspešna",
+    "addSuccess": "Dodavanje uspešno",
+    "editCurrency": "Izmeni valutu"
+  },
+
+  "merchant": {
+    "merchantNumber": "Broj trgovca",
+    "pleaseEnterMerchantNumber": "Unesite broj trgovca",
+    "merchantName": "Ime trgovca",
+    "pleaseEnterMerchantName": "Unesite ime trgovca",
+    "status": "Status",
+    "enabledKey": "A",
+    "enabled": "Omogući",
+    "disabledKey": "N",
+    "disabled": "Onemogući",
+    "search": "Pretraga",
+    "reset": "Resetuj",
+    "addNewMerchant": "Dodaj novog trgovca",
+    "ID": "ID",
+    "contactPerson": "Kontakt osoba",
+    "phoneNumber": "Broj telefona",
+    "address": "Adresa",
+    "createTime": "Vreme kreiranja",
+    "operation": "Operacija",
+    "modify": "Izmeni",
+    "delete": "Obriši",
+    "merchantNumber": "Broj trgovca",
+    "pleaseEnterMerchantNumberTip": "Unesite broj trgovca, 5 - 30 karaktera, ako nije uneto, sistem će automatski generisati",
+    "merchantType": "Tip trgovca",
+    "pleaseSelectMerchantType": "Izaberite tip trgovca",
+    "selectSuitableIndustryTip": "Napomena: izaberite odgovarajuću industriju",
+    "merchantName": "Ime trgovca",
+    "pleaseEnterMerchantName": "Unesite ime trgovca",
+    "merchantLogo": "Logo trgovca",
+    "clickToModifyLogoTip": "(Napomena: kliknite na sliku da biste izmenili)",
+    "contactPerson": "Kontakt osoba",
+    "pleaseEnterContactPersonName": "Unesite ime kontakt osobe",
+    "contactPhone": "Kontakt telefon",
+    "pleaseEnterContactPhone": "Unesite kontakt telefon",
+    "contactAddress": "Kontakt adresa",
+    "pleaseEnterContactAddress": "Unesite kontakt adresu",
+    "wxMiniAppId": "WeChat mini program appId",
+    "pleaseEnterWxMiniAppIdTip": "Unesite WeChat mini program appId, 30 - 50 karaktera",
+    "wxMiniAppSecret": "WeChat mini program appSecret",
+    "pleaseEnterWxMiniAppSecretTip": "Unesite WeChat mini program appSecret, 30 - 50 karaktera",
+    "wxOfficialAppId": "WeChat zvanični appId",
+    "wxOfficialAppSecret": "WeChat zvanični appSecret",
+    "remarkInfo": "Napomena",
+    "pleaseEnterContent": "Unesite sadržaj",
+    "status": "Status",
+    "enabledKey": "A",
+    "enabledLabel": "A",
+    "enabled": "Omogući",
+    "disabledKey": "N",
+    "disabledLabel": "N",
+    "disabled": "Onemogući",
+    "confirm": "Potvrdi",
+    "cancel": "Otkaži",
+    "merchantNumberRequired": "Broj trgovca ne može biti prazan",
+    "merchantNumberLengthRange": "Dužina broja trgovca mora biti između 5 i 30 karaktera",
+    "merchantNameRequired": "Ime trgovca ne može biti prazno",
+    "merchantNameLengthRange": "Dužina imena trgovca mora biti između 2 i 50 karaktera",
+    "enable": "Omogući",
+    "disable": "Onemogući",
+    "confirmChangeStatus": "Da li ste sigurni da želite {action} trgovca „{name}“?",
+    "statusChangeSuccess": "{action} uspešno",
+    "addNewMerchant": "Dodaj novog trgovca",
+    "modifySuccess": "Izmena uspešna",
+    "addSuccess": "Dodavanje uspešno",
+    "editMerchant": "Izmeni trgovca",
+    "confirmDelete": "Da li ste sigurni da želite da obrišete stavku „{name}“?",
+    "deleteSuccess": "Brisanje uspešno"
+  },
+
+  "storeList": {
+    "list": {
+      "storeName": "Ime prodavnice",
+      "pleaseEnterStoreName": "Unesite ime prodavnice",
+      "status": "Status",
+      "enabledKey": "A",
+      "enabled": "Omogući",
+      "disabledKey": "N",
+      "disabled": "Onemogući",
+      "search": "Pretraga",
+      "reset": "Resetuj",
+      "addNewStore": "Dodaj novu prodavnicu",
+      "ID": "ID",
+      "belongingMerchant": "Pripadajući trgovac",
+      "contactPerson": "Kontakt osoba",
+      "phoneNumber": "Broj telefona",
+      "address": "Adresa",
+      "createTime": "Vreme kreiranja",
+      "operation": "Operacija",
+      "modify": "Izmeni",
+      "delete": "Obriši",
+      "storeName": "Ime prodavnice",
+      "pleaseEnterStoreName": "Unesite ime prodavnice",
+      "merchantLogo": "Logo trgovca",
+      "clickToModifyTip": "(Napomena: kliknite na sliku da biste izmenili)",
+      "belongingMerchant": "Pripadajući trgovac",
+      "pleaseSelectBelongingMerchant": "Izaberite pripadajućeg trgovca",
+      "selectCurrency": "Izaberite valutu",
+      "pleaseSelectCurrency": "Izaberite valutu",
+      "contactPersonName": "Ime kontakt osobe",
+      "pleaseEnterContactPersonName": "Unesite ime kontakt osobe",
+      "contactPersonPhone": "Telefon kontakt osobe",
+      "pleaseEnterContactPersonPhone": "Unesite telefon kontakt osobe",
+      "storeDetailedAddress": "Detaljna adresa prodavnice",
+      "pleaseEnterStoreDetailedAddress": "Unesite detaljnu adresu prodavnice",
+      "businessHours": "Radno vreme",
+      "pleaseEnterBusinessHours": "Unesite radno vreme prodavnice",
+      "remarkInfo": "Napomena",
+      "pleaseEnterRemarkInfo": "Unesite sadržaj napomene",
+      "status": "Status",
+      "enabledKey": "A",
+      "enabledLabel": "A",
+      "enabled": "Omogući",
+      "disabledKey": "N",
+      "disabledLabel": "N",
+      "disabled": "Onemogući",
+      "confirm": "Potvrdi",
+      "cancel": "Otkaži",
+      "storeNameRequired": "Ime prodavnice ne može biti prazno",
+      "storeNameLengthRange": "Dužina imena prodavnice mora biti između 2 i 30 karaktera",
+      "belongingMerchantRequired": "Pripadajući trgovac ne može biti prazan",
+      "contactPersonNameRequired": "Ime kontakt osobe ne može biti prazno",
+      "contactPersonNameLengthRange": "Dužina imena kontakt osobe mora biti između 2 i 30 karaktera",
+      "contactPersonPhoneRequired": "Telefon kontakt osobe ne može biti prazan",
+      "contactPersonPhoneLengthRange": "Dužina telefona kontakt osobe mora biti između 6 i 30 karaktera",
+      "currencyRequired": "Valuta ne može biti prazna",
+      "enabled": "Omogući",
+      "disabled": "Onemogući",
+      "confirmChangeStatus": "Da li ste sigurni da želite {action} prodavnicu „{storeName}“?",
+      "statusChangeSuccess": "{action} uspešno",
+      "addNewStore": "Dodaj novu prodavnicu",
+      "modifySuccess": "Izmena uspešna",
+      "addSuccess": "Dodavanje uspešno",
+      "editStore": "Izmeni prodavnicu",
+      "confirmDelete": "Da li ste sigurni da želite da obrišete stavku „{name}“?",
+      "deleteSuccess": "Brisanje uspešno"
+    },
+    "info": {}
+  },
+
+  "tableManagement": {
+    "tableCode": "Kod stola",
+    "pleaseEnterTableCode": "Unesite kod stola",
+    "status": "Status",
+    "enabledKey": "A",
+    "enabled": "Omogući",
+    "disabledKey": "N",
+    "disabled": "Onemogući",
+    "search": "Pretraga",
+    "reset": "Resetuj",
+    "addNewTableCode": "Dodaj novi kod stola",
+    "ID": "ID",
+    "tableEncoding": "Kod stola",
+    "belongingStore": "Pripadajuća prodavnica",
+    "publicOwnership": "Javna svojina",
+    "createTime": "Vreme kreiranja",
+    "operation": "Operacija",
+    "modify": "Izmeni",
+    "delete": "Obriši",
+    "tableEncoding": "Kod stola",
+    "pleaseEnterTableEncoding": "Unesite kod stola, npr: A01",
+    "belongingStore": "Pripadajuća prodavnica",
+    "pleaseSelectBelongingStore": "Izaberite pripadajuću prodavnicu",
+    "remarkInfo": "Napomena",
+    "pleaseEnterRemarkInfo": "Unesite sadržaj napomene",
+    "sort": "Sortiranje",
+    "sortTip": "Napomena: što je manja vrednost, veća pozicija na listi",
+    "status": "Status",
+    "enabledKey": "A",
+    "enabledLabel": "A",
+    "enabled": "Omogući",
+    "disabledKey": "N",
+    "disabledLabel": "N",
+    "disabled": "Onemogući",
+    "confirm": "Potvrdi",
+    "cancel": "Otkaži",
+    "tableCodeRequired": "Kod stola ne može biti prazan",
+    "tableCodeLengthRange": "Dužina koda stola mora biti između 2 i 30 karaktera",
+    "belongingStoreRequired": "Pripadajuća prodavnica ne može biti prazna",
+    "enable": "Omogući",
+    "disable": "Onemogući",
+    "confirmChangeTableStatus": "Da li ste sigurni da želite da {action} kod stola „{tableCode}”?",
+    "statusChangeSuccess": "{action} uspešno",
+    "addNewTableCode": "Dodaj novi kod stola",
+    "modifySuccess": "Izmena uspešna",
+    "addSuccess": "Dodavanje uspešno",
+    "editTableCode": "Izmeni kod stola",
+    "confirmDeleteTableCode": "Da li ste sigurni da želite da obrišete stavku „{tableCode}”?",
+    "deleteSuccess": "Brisanje uspešno"
+  },
+
+  "employee": {
+    "employeeCategory": "Kategorija zaposlenog",
+    "selectEmployeeCategory": "Izaberite kategoriju zaposlenog",
+    "name": "Ime",
+    "inputName": "Unesite ime",
+    "mobilePhone": "Mobilni telefon",
+    "inputMobilePhone": "Unesite mobilni telefon",
+    "status": "Status",
+    "enabled": "Omogući",
+    "disabled": "Onemogući",
+    "search": "Pretraga",
+    "reset": "Resetuj",
+    "addEmployee": "Dodaj zaposlenog",
+    "id": "ID",
+    "category": "Kategorija",
+    "associatedMemberId": "Povezani član ID",
+    "belongingStore": "Pripadajuća prodavnica",
+    "none": "Nema",
+    "createTime": "Vreme kreiranja",
+    "updateTime": "Vreme ažuriranja",
+    "operation": "Operacija",
+    "modify": "Izmeni",
+    "delete": "Obriši",
+    "selectBelongingStore": "Izaberite pripadajuću prodavnicu",
+    "allStores": "Sve prodavnice",
+    "remark": "Napomena",
+    "inputContent": "Unesite sadržaj",
+    "confirm": "Potvrdi",
+    "cancel": "Otkaži",
+    "nameRequired": "Ime ne može biti prazno",
+    "nameLengthLimit": "Dužina imena mora biti između 2 i 30 karaktera",
+    "mobileRequired": "Mobilni telefon ne može biti prazan",
+    "mobileLengthLimit": "Dužina mobilnog telefona mora biti 11 karaktera",
+    "storeIdRequired": "Izaberite pripadajuću prodavnicu",
+    "confirmStatusChange": "Da li ste sigurni da želite da {status} \"{name}\"?",
+    "statusChangeSuccess": "{status} uspešno",
+    "addSuccess": "Dodavanje uspešno",
+    "modifySuccess": "Izmena uspešna",
+    "editEmployeeInfo": "Izmeni podatke o zaposlenom",
+    "confirmDelete": "Da li ste sigurni da želite da obrišete stavku \"{name}\"?",
+    "deleteSuccess": "Brisanje uspešno"
+  },
+
+  "ImageUpload": {
+    "pleaseUpload": "Molimo vas da otpremite",
+    "fileSizeNotExceed": "Veličina ne sme da prelazi",
+    "fileFormat": "Format treba da bude",
+    "ofFile": "fajl",
+    "fileFormatError": "Format fajla nije ispravan, molimo vas da otpremite",
+    "imageFormatFile": "sliku u formatu!",
+    "fileSizeExceed": "Veličina otpremljene slike ne sme da prelazi",
+    "mb": "MB!",
+    "uploadingImage": "Slika se otprema, molimo sačekajte...",
+    "fileNumberExceed": "Broj otpremljenih fajlova ne sme da prelazi",
+    "ge": "kom!",
+    "uploadImageFailed": "Otprema slike nije uspela, molimo pokušajte ponovo"
+  },
+
+  "account": {
+    "basicInfo": "Osnovne informacije",
+    "edit": "Izmeni",
+    "account": "Nalog",
+    "password": "Lozinka",
+    "avatar": "Avatar",
+    "userInfo": "Korisničke informacije",
+    "save": "Spasi",
+    "close": "Zatvori",
+    "pleaseInputPassword": "Unesite lozinku",
+    "passwordFormat": "Lozinka mora sadržati najmanje 6 slova ili brojeva",
+    "passwordChangeSuccess": "Lozinka je uspešno promenjena"
+  },
+
+  "goodList": {
+    "categoryName": "Naziv kategorije",
+    "pleaseEnterCategoryName": "Unesite naziv kategorije",
+    "belongingShop": "Pripadajuća prodavnica",
+    "publicCategory": "Javna kategorija",
+    "categoryId": "ID kategorije",
+    "Name": "Naziv",
+    "image": "Slika",
+    "creationTime": "Vreme kreiranja",
+    "updateTime": "Vreme ažuriranja",
+    "actions": "Akcije",
+    "sortOrder": "Redosled sortiranja",
+    "remarks": "Napomene",
+    "enable": "Omogući",
+    "disable": "Onemogući",
+    "tipOrder": "Napomena: Što je manja vrednost, to je rang viši",
+    "tipImage": "Napomena: Kliknite na sliku da biste je izmenili, preporučene dimenzije: 128 x 128",
+    "publicAll": "Javno sve",
+    "enterRemarkContent": "Unesite sadržaj napomene",
+    "addProductCategory": "Dodaj novu kategoriju proizvoda",
+    "editProductCategory": "Izmeni kategoriju proizvoda",
+    "confirmDelete": "Da li ste sigurni da želite da obrišete?",
+    "onlyImageAllowed": "Podaci mogu sadržavati samo slike!",
+    "imageSizeLimit": "Veličina slike ne sme biti veća od 20MB!",
+    "addSuccess": "Uspešno dodato",
+    "modificationSuccess": "Uspešno izmenjeno",
+    "SaveSuccessful": "Uspešno sačuvano!",
+    "deleteSuccess": "Uspešno obrisano",
+    "confirm": "Potvrdi",
+    "cancel": "Otkaži",
+    "modify": "Izmeni",
+    "delete": "Obriši",
+    "status": "Status",
+    "search": "Pretraži",
+    "reset": "Resetuj",
+    "addNew": "Dodaj novo",
+    "edit": "Izmeni",
+    "productName": "Naziv proizvoda",
+    "productNamePlaceholder": "Unesite naziv proizvoda",
+    "store": "Pripadajuća prodavnica",
+    "PublicGoods": "Javni proizvodi",
+    "productCategory": "Kategorija proizvoda",
+    "selectCategory": "Izaberite kategoriju proizvoda",
+    "productType": "Tip proizvoda",
+    "selectProductType": "Izaberite tip proizvoda",
+    "specificationType": "Tip specifikacije",
+    "singleSpecification": "Jedna specifikacija",
+    "multipleSpecifications": "Više specifikacija",
+    "shelfStatus": "Status na polici",
+    "putOnShelf": "Stavi na policu",
+    "removeFromShelf": "Ukloni sa police",
+    "stockStatus": "Status zaliha",
+    "inStock": "Na skladištu",
+    "outOfStock": "Nema na skladištu",
+    "id": "ID",
+    "storeName": "Naziv prodavnice",
+    "mainImage": "Glavna slika",
+    "remainingStock": "Preostale zalihe",
+    "category": "Kategorija",
+    "price": "Cena",
+    "ProductStatus": "Status proizvoda",
+    "ProductImage": "Slika proizvoda",
+    "displaySorting": "Prikazivanje sortiranosti",
+    "hintSmallerValueHigherRank": "Napomena: Što je manja vrednost, to je rang viši",
+    "basicInfo": "Osnovne informacije",
+    "extendedInfo": "Proširene informacije",
+    "productDescription": "Opis proizvoda",
+    "ProductSpecifications": "Specifikacije proizvoda",
+    "InventoryQuantity": "Količina u skladištu",
+    "quantity": "Unesite količinu u skladištu",
+    "commodityPrice": "Cena proizvoda",
+    "goodsPrice": "Unesite cenu proizvoda",
+    "UnitYuan": "Jedinca: Yuan",
+    "ProductWeight": "Težina proizvoda",
+    "serviceDuration": "Trajanje usluge",
+    "enterServiceDuration": "Unesite trajanje usluge, u minutima",
+    "serviceDurationTip": "Napomena: Unesite broj, jedinica: minut",
+    "couponId": "ID kupona",
+    "enterCouponId": "Unesite ID kupona koji ste kupili, odvojite sa zapetama, npr: 1000,1001,1002",
+    "couponIdTip": "Napomena: ID kupona, odvojite sa zapetama",
+    "Batch": "Serijsko podešavanje",
+    "skuNo": "SKU kod",
+    "randomGenerate": "Generiši nasumično",
+    "linePrice": "Precrtana cena",
+    "goodStock": "Zalihe proizvoda",
+    "goodsWeight": "Težina proizvoda",
+    "confirmSetting": "Potvrdi podešavanja",
+    "index": "Redni broj",
+    "specifications": "Specifikacije",
+    "skuCode": "SKU kod",
+    "salesPrice": "Cena prodaje (Yuan)",
+    "originalPrice": "Originalna cena (Yuan)",
+    "stock": "Zalihe proizvoda",
+    "weight": "Težina (kilogrami)",
+    "addSpec": "Dodaj specifikaciju",
+    "specName": "Naziv specifikacije",
+    "specValue": "Vrednost specifikacije",
+    "add": "Dodaj",
+    "deleteSpec": "Obriši specifikaciju",
+    "enterSpecName": "Unesite naziv specifikacije",
+    "specNameRequired": "Naziv specifikacije je obavezan",
+    "enterSpecValue": "Unesite vrednost specifikacije",
+    "addSpecValue": "Dodaj vrednost specifikacije",
+    "specValueRequired": "Vrednost specifikacije je obavezna",
+    "priceGreaterThanZero": "Cena proizvoda mora biti veća od 0!",
+    "linePriceGreaterThanZero": "Precrtana cena mora biti veća ili jednaka 0!",
+    "weightGreaterThanZero": "Težina proizvoda mora biti veća ili jednaka 0!",
+    "stockGreaterThanZero": "Zalihe proizvoda moraju biti veće ili jednake 0!",
+    "onlyImage": "Moguće je postaviti samo slike!",
+    "sizeLimit": "Veličina slike ne sme biti veća od 20MB!",
+    "submitProductInfo": "Prvo pošaljite osnovne informacije o proizvodu",
+    "skuLength": "Dužina SKU koda proizvoda mora biti veća od 1, proverite ponovo!",
+    "inventory": "Zalihe proizvoda moraju biti veće ili jednake 0, proverite ponovo!",
+    "priceList": "Cena proizvoda mora biti veća ili jednaka 0, proverite ponovo!",
+    "deleteConfirm": "Da li ste sigurni da želite da obrišete proizvod \"{name}\"?",
+    "statusChangeConfirm": "Da li ste sigurni da želite da {text}\"{name}\"?",
+    "statusChangeSuccess": "{text} uspešno",
+    "removeSkuConfirm": "Da li ste sigurni da želite da obrišete ovu vrednost specifikacije?",
+    "removeSkuRowConfirm": "Da li ste sigurni da želite da obrišete ovu specifikaciju?",
+    "deleteGoods": "Da li ste sigurni da želite da obrišete podatke o proizvodu \"{name}\"?",
+    "confirmGoods": "Da li ste sigurni da želite da {text}\"{name}\"?",
+    "success": "{text} uspešno"
+  }
+
 }

+ 27 - 2
src/locales/zh.json

@@ -2,6 +2,7 @@
   "lang": "中文",
   "curency": "人民币",
   "盼达点餐管理系统": "盼达点餐管理系统",
+
   "nav":{
     "setLayout": "布局设置",
     "logout": "退出登录",
@@ -10,6 +11,7 @@
     "confirm": "确定",
     "cancel": "取消"
   },
+
   "login": {
       "welcomeMessage": "欢迎使用 {systemName},您的卡券、储值卡、计次卡等会员营销小管家!",
       "usernamePlaceholder": "账号",
@@ -23,6 +25,7 @@
       "passwordRequired": "请输入您的密码",
       "captchaRequired": "请输入验证码"
   },
+
   "operational": {
     "overview": "运营概况",
     "totalTransactionAmount": "总交易金额(元)",
@@ -68,11 +71,12 @@
     "incomeTrendChart": "收益趋势图",
     "memberStatistics": "会员统计"
   },
+
   "operational.overview": "运营概况",
   "today.revenue": "今日营收",
-
   "welcome": "欢迎",
   "greeting": "你好, {name}!",
+
   "orderList": {
     "orderNumber": "订单号",
     "pleaseEnterOrderNumber": "请输入订单号",
@@ -176,6 +180,7 @@
       "quantity": "数量"
     }
   },
+
   "currency":{
     "currency": "货币",
     "pleaseEnterCurrencyNameOrSymbol": "请输货币名称/符号",
@@ -203,6 +208,7 @@
     "addSuccess": "新增成功",
     "editCurrency": "编辑货币"
   },
+
   "merchant":{
     "merchantNumber": "商户号",
     "pleaseEnterMerchantNumber": "请输入商户号",
@@ -271,6 +277,7 @@
     "confirmDelete": "是否确认删除“{name}”的数据项?",
     "deleteSuccess": "删除成功"
   },
+
   "storeList":{
     "list":{
       "storeName": "店铺名称",
@@ -342,6 +349,7 @@
 
     }
   },
+
   "tableManagement": {
     "tableCode": "桌码",
     "pleaseEnterTableCode": "请输入桌码",
@@ -392,6 +400,7 @@
     "confirmDeleteTableCode": "是否确认删除“{tableCode}”的数据项?",
     "deleteSuccess": "删除成功"
   },
+
   "employee":{
     "employeeCategory": "员工类别",
     "selectEmployeeCategory": "请选择员工类别",
@@ -436,6 +445,7 @@
     "confirmDelete": "是否确认删除\"{name}\"的数据项?",
     "deleteSuccess": "删除成功"
   },
+
   "ImageUpload":{
     "pleaseUpload": "请上传",
     "fileSizeNotExceed": "大小不超过",
@@ -465,6 +475,7 @@
     "passwordFormat": "密码至少由6个字母或数字",
     "passwordChangeSuccess": "密码修改成功"
   },
+  
   "goodList":{
     "categoryName": "分类名称",
     "pleaseEnterCategoryName": "请输入分类名称",
@@ -573,6 +584,20 @@
     "priceGreaterThanZero": "商品价格须大于0!",
     "linePriceGreaterThanZero": "商品划线价格须大于等于0!",
     "weightGreaterThanZero": "商品重量须大于等于0!",
-    "stockGreaterThanZero": "商品库存须大于等于0!"
+    "stockGreaterThanZero": "商品库存须大于等于0!",
+    "onlyImage": "只能上传图片文件!",
+    "sizeLimit": "上传图片大小不能超过 20MB!",
+    "submitProductInfo": "请先提交商品基础信息",
+    "skuLength": "商品sku编码长度需大于1,请仔细核对!",
+    "inventory": "商品库存须大于等于0,请仔细核对!",
+    "priceList": "商品价格须大于等于0,请仔细核对!",
+    "deleteConfirm": "是否确认删除商品\"{name}\"?",
+    "statusChangeConfirm": "确认要{text}\"{name}\"吗?",  
+    "statusChangeSuccess": "{text}成功",
+    "removeSkuConfirm": "确认删除该规格值吗?",
+    "removeSkuRowConfirm": "确认删除该规格吗?",
+    "deleteGoods": "是否确认删除\"{name}\"的数据项?",
+    "confirmGoods": "确认要{text}\"{name}\"吗?",  
+    "success": "{text}成功"  
   }
 }

+ 4 - 4
src/views/goods/cate/index.vue

@@ -363,14 +363,14 @@ export default {
     },
     // 状态修改
     handleStatusChange(row) {
-      let text = row.status == 'A' ? '启用' : '禁用'
+      let text = row.status == 'A' ? this.$t('goodList.enable') : this.$t('goodList.disable')
       this.$modal
-        .confirm('确认要' + text + '"' + row.name + '"吗?')
+        .confirm(this.$t('goodList.confirmGoods', { text: text, name: row.name }))  
         .then(function () {
           return updateGoodsCateStatus(row.id, row.status)
         })
         .then(() => {
-          this.$modal.msgSuccess(text + '成功')
+          this.$modal.msgSuccess(this.$t('goodList.success', { text: text }))  
         })
         .catch(function () {
           row.status = row.status === 'N' ? 'A' : 'N'
@@ -450,7 +450,7 @@ export default {
     handleDelete(row) {
       const name = row.name
       this.$modal
-        .confirm('是否确认删除"' + name + '"的数据项?')
+        .confirm(this.$t('goodList.deleteGoods', { name: name }))
         .then(function () {
           return updateGoodsCateStatus(row.id, 'D')
         })

+ 6 - 6
src/views/goods/components/Sku.vue

@@ -206,7 +206,7 @@ export default {
     // 删除规格行
     removeSkuRow(i) {
       const app = this
-      app.$modal.confirm('确认删除该规格吗?').then(function() {
+      app.$modal.confirm(this.$t('skuList.removeSkuRowConfirm')).then(function() {
           deleteSpec({ goodsId: app.goodsId, specName: app.skuData.attrList[i].name }).then(response => {
               app.skuData.attrList.splice(i, 1);
               app.$emit("skuChange", app.skuData);
@@ -216,7 +216,7 @@ export default {
     // 删除规格属性值
     removeSkuAttr(a, b) {
       const app = this
-      app.$modal.confirm('确认删除该规格值吗?').then(function() {
+      app.$modal.confirm(this.$t('skuList.removeSkuConfirm')).then(function() {
           deleteSpecValue({ id: app.skuData.attrList[a].child[b].id }).then(response => {
               app.skuData.attrList[a].child.splice(b, 1);
               app.$emit("skuChange", app.skuData);
@@ -253,7 +253,7 @@ export default {
              if (app.batch.price > 0) {
                  skuInfo.price = app.batch.price;
              } else {
-                 app.$modal.alert("商品价格须大于0!");
+              app.$modal.alert(this.$t('goodList.priceGreaterThanZero'));
                  return false;
              }
          }
@@ -261,7 +261,7 @@ export default {
              if (app.batch.linePrice >= 0) {
                  skuInfo.linePrice = app.batch.linePrice;
              } else {
-                 app.$modal.alert("商品划线价格须大于等于0!");
+              app.$modal.alert(this.$t('goodList.linePriceGreaterThanZero'));
                  return false;
              }
          }
@@ -269,7 +269,7 @@ export default {
              if (app.batch.weight >= 0) {
                  skuInfo.weight = app.batch.weight;
              } else {
-                 app.$modal.alert("商品重量须大于等于0!");
+                 app.$modal.alert(this.$t('goodList.weightGreaterThanZero'));
                  return false;
              }
          }
@@ -277,7 +277,7 @@ export default {
              if (app.batch.stock >= 0) {
                  skuInfo.stock = app.batch.stock;
              } else {
-                 app.$modal.alert("商品库存须大于等于0!");
+                 app.$modal.alert(this.$t('goodList.stockGreaterThanZero'));
                  return false;
              }
          }

+ 7 - 7
src/views/goods/goods/goodsForm.vue

@@ -489,7 +489,7 @@ export default {
         })
       } else if (app.activeTab == 'extend') {
         if (!app.extendForm.goodsId) {
-          app.$modal.msgError('请先提交商品基础信息')
+          app.$modal.msgError(this.$t('goodList.submitProductInfo'))
           app.activeTab = 'base'
           return false
         }
@@ -510,15 +510,15 @@ export default {
             }
           })
           if (!isValid1) {
-            app.$modal.alert('商品sku编码长度需大于1,请仔细核对!')
+            app.$modal.alert(this.$t('goodList.skuLength'))  
             return false
           }
           if (!isValid1) {
-            app.$modal.alert('商品库存须大于等于0,请仔细核对!')
+            app.$modal.alert(this.$t('goodList.inventory'))  
             return false
           }
           if (!isValid2) {
-            app.$modal.alert('商品价格须大于等于0,请仔细核对!')
+            app.$modal.alert(this.$t('goodList.price'))  
             return false
           }
         }
@@ -535,7 +535,7 @@ export default {
         })
       } else {
         if (!app.detailForm.goodsId) {
-          app.$modal.msgError('请先提交商品基础信息')
+          app.$modal.msgError(this.$t('goodList.submitProductInfo'))
           app.activeTab = 'base'
           return false
         }
@@ -558,11 +558,11 @@ export default {
       console.log(file.size)
 
       if (!isImage) {
-        this.$message.error('只能上传图片文件!')
+        this.$message.error(this.$t('goodList.onlyImage'))
       }
 
       if (!isLt2M) {
-        this.$message.error('上传图片大小不能超过 20MB!')
+        this.$message.error(this.$t('goodList.sizeLimit'))
       }
 
       return isImage && isLt2M // 返回 true 则允许上传,返回 false 则阻止上传

+ 6 - 4
src/views/goods/goods/index.vue

@@ -329,14 +329,16 @@ export default {
     },
     // 状态修改
     handleStatusChange(row) {
-      let text = row.status == 'A' ? '上架' : '下架'
+      let text = row.status == 'A' ? this.$t('goodList.putOnShelf') : this.$t('goodList.removeFromShelf')
       this.$modal
-        .confirm('确认要' + text + '"' + row.name + '"吗?')
+        // .confirm('确认要' + text + '"' + row.name + '"吗?')
+        .confirm(this.$t('goodList.statusChangeConfirm', { text: text, name: row.name }))
         .then(function () {
           return updateGoodsStatus(row.id, row.status)
         })
         .then(() => {
-          this.$modal.msgSuccess(text + '成功')
+          // this.$modal.msgSuccess(text + '成功')
+          this.$modal.msgSuccess(this.$t('goodList.statusChangeSuccess', { text: text }))  
         })
         .catch(function () {
           row.status = row.status === 'N' ? 'A' : 'N'
@@ -365,7 +367,7 @@ export default {
     handleDelete(row) {
       const name = row.name
       this.$modal
-        .confirm('是否确认删除商品"' + name + '"?')
+        .confirm(this.$t('goodList.deleteConfirm', { name: name }))
         .then(function () {
           return updateGoodsStatus(row.id, 'D')
         })