ソースを参照

新增俄语翻译

loki.wu 1 年間 前
コミット
75f673f6c7

+ 8 - 8
assets/en_US.json

@@ -469,7 +469,7 @@
     "distributed": "Distributed",
     "back": "Back",
     "revoke": "Revoke",
-    " Select": "Select",
+    "Select": "Select",
     "country": "Country",
     "province": "Province",
     "city": "City",
@@ -483,7 +483,7 @@
     "delete": "Delete",
     "modify": "Modify",
     "platformDefault": "Default",
-    " InputLimitTime": "Input the timeout period",
+    "InputLimitTime": "Input the timeout period",
     "referLimitTime": "Referral timeout",
     "inputHour": "Hours",
     "canReferOrg": "Docking hospital",
@@ -546,14 +546,14 @@
   },
   "setting": {
     "switchingLanguage": "Switching Language...",
-    " FullfillServerUrl": "Input server url.",
-    " FullfillServerPort": "Input server port.",
+    "FullfillServerUrl": "Input server url.",
+    "FullfillServerPort": "Input server port.",
     "serverUrlFormatValidation": "Input an available server url.",
     "serverPortFormatValidation": "Input an available server port. (0-65535)",
     "serverUrlExistValidation": "Server url already exists.",
     "serverUrlNotExistValidation": "Server can't be found.",
     "serverUrlNotChangedValidation": "No changes made to server settings.",
-    " SelectOrAddServerUrl": "Select or add server url.",
+    "SelectOrAddServerUrl": "Select or add server url.",
     "serverUrl": "Url: ",
     "serverPort": "Port: ",
     "serverUrlExample": "e.g. 127.0.0.1",
@@ -1193,13 +1193,13 @@
     "fullfillAreaInfo": "Please complete regional information.",
     "fullfillOrgName": "Please complete hospital name.",
     "deleteOrNot": "Confirm Removal",
-    " SelectUserToRemove": "Select the users to be removed",
+    "SelectUserToRemove": "Select the users to be removed",
     "removing": "Removing Users",
     "departmentNamePlaceholder": "Please enter department name",
-    " FillInCompletely": "Fill in completely.",
+    "FillInCompletely": "Fill in completely.",
     "titleNamePlaceholder": "Please enter professional title name.",
     "messgaeConfirm": "Information Confirmation!",
-    "removeMemberConfirm ": "Remove them or not?",
+    "removeMemberConfirm": "Remove them or not?",
     "removeMembersConfirm": "You have selected {0} members, are you sure to remove them from the hospital?",
     "deleteMemberConfirm": "You have selected {0} members, are you sure to remove them?",
     "deleteOrganizationConfirm": "Confirm to delete the hospital structure?",

+ 1959 - 0
assets/ru_RU.json

@@ -0,0 +1,1959 @@
+{
+  "locale": "ru_RU",
+  "auth": {
+    "scanCorrectQRCode": "Пожалуйста, отсканируйте правильный QR-код",
+    "autoLogin": "Автоматический вход",
+    "scanQRCodeLogin": "Войдите, отсканировав QR-код",
+    "useFlyinsonoMobileScan": "Пожалуйста, используйте Flyinsono Mobile для сканирования QR-кода",
+    "login": "Вход в систему",
+    "login4Btn": "Вход в систему",
+    "signUp": "Зарегистрироваться",
+    "signUp4Btn": "Зарегистрироваться",
+    "account": "Аккаунт",
+    "password": "Пароль",
+    "keepPwd": "Запомни меня",
+    "resetPwd": "Сбросить",
+    "forgotPwd": "Забыли пароль",
+    "tabOfLoginByAccountPwd": "Вход по паролю",
+    "tabOfLoginByVerificationCode": "Вход по коду подтверждения",
+    "hint4AccountDouble": "Укажите номер телефона или электронную почту",
+    "hint4AccountTriple": "Укажите номер телефона, электронную почту или имя пользователя",
+    "hint4ConfirmPwd": "Подтвердите пароль",
+    "hint4Pwd": "Введите пароль",
+    "hint4VerificationCode": "Введите код подтверждения",
+    "agreeStatement": "Я прочитал и согласен",
+    "privacyPolicy": "\"Политика конфиденциальности\"",
+    "userAgreement": "\"Пользовательское соглашение\"",
+    "privacyPolicy2": "Политика конфиденциальности",
+    "userAgreement2": "Пользовательское соглашение",
+    "sendVerificationCode": "Отправить",
+    "sendingVerificationCode": "Отправка...",
+    "resendVerificationCode": "Отправить снова",
+    "sendVerificationCodeTimer": "({0}С) Отправить снова",
+    "signOut": "Выйти из системы",
+    "back4Login": "Вернуться к входу",
+    "toast4AgreeStatement": "Пожалуйста, прочтите и согласитесь с \"Пользовательским соглашением\" и \"Политикой Конфиденциальности\"",
+    "toast4AccountPwdError": "Неверное имя пользователя или пароль.",
+    "toast4AccountNotExist": "Этого аккаунта не существует.",
+    "toast4AccountHasExist": "Этот аккаунт уже существует.",
+    "toast4AccountDouble": "Введите правильный номер телефона или электронную почту.",
+    "toast4AccountTriple": "Введите правильный номер телефона, электронную почту или имя пользователя.",
+    "toast4VerifyCodeOverdue": "Код подтверждения устарел.",
+    "toast4VerifyCodeError": "Неверный код подтверждения.",
+    "toast4LoginFail": "Вход не удался.",
+    "toast4LoginSuccess": "Успешный вход в систему.",
+    "toast4SignUpFail": "Не удалось зарегистрироваться.",
+    "toast4SignUpSuccess": "Успешная регистрация.",
+    "toast4ResetFail": "Не удалось сбросить.",
+    "toast4ResetSuccess": "Успешный сброс.",
+    "toast4VerifyCodeSendFail": "Не удалось отправить код подтверждения.",
+    "toast4VerifyCodeSendSuccess": "Код подтверждения отправлен.",
+    "toast4ConfirmPwdMatchError": "Введите один и тот же пароль дважды.",
+    "toast4PwdBlankError": "Пароль не может содержать пробелы.",
+    "toast4PwdLengthError": "Пароль должен содержать от 6 до 20 символов.",
+    "toast4PwdCharCombinError": "Пароль должен включать в себя не менее 2 типов символов: цифры, буквы или знаки.",
+    "toast4AccountFormatError": "При регистрации имени пользователя допустимо от 2 до 20 символов.",
+    "otherLoginWay": "Другие способы входа",
+    "logining": "Вход...",
+    "switching": "Переключение...",
+    "switchFailed": "Переключение не удалось",
+    "networkSetting": "Настройки сети",
+    "unauthorized": "Нет доступа к этой странице",
+    "authExpired": "Аутентификация истекла, повторите вход.",
+    "remainingTimes": "Неверный пароль, осталось попыток: {0}",
+    "theCurrentPasswordHasExpired": "Текущий пароль устарел",
+    "switchAccountOrResetPassword": "Пожалуйста, выберите переключение аккаунта или сброс пароля",
+    "switchAccount": "Переключить аккаунт",
+    "confirmEnterOrResetPassword": "Пожалуйста, выберите подтверждение для входа или сброса пароля.",
+    "confirmEnter": "Подтвердить вход.",
+    "resetPassword": "Сбросить пароль",
+    "tokenReplacedTips": "Ваш аккаунт уже вошел в другом устройстве",
+    "toast4LoginFailNetworkIssues": "Вход не удался, пожалуйста, проверьте свое сетевое соединение.",
+    "toast4SignUpFailNetworkIssues": "Регистрация не удалась, пожалуйста, проверьте свое сетевое соединение.",
+    "protocol": "Протокол:",
+    "selectServer": "Выберите сервер:"
+  },
+  "bodyParts": {
+    "brain": "Мозг",
+    "head": "Голова",
+    "abdomen": "Живот",
+    "chest": "Грудь"
+  },
+  "errorCodes": {
+    "errorCodeUN": "Неизвестная ошибка",
+    "errorCode0": "Операция прошла успешно",
+    "errorCode1": "Токен идентификации не существует, пожалуйста, войдите снова",
+    "errorCode2": "Срок действия токена истек, пожалуйста, войдите снова",
+    "errorCode3": "Версия токена слишком старая, пожалуйста, войдите снова",
+    "errorCode4": "IP запрещен",
+    "errorCode5": "У вас нет прав на операцию, пожалуйста, свяжитесь с ответственным лицом больницы",
+    "errorCode6": "Не удалось загрузить изображение проверки. Адрес файла пуст",
+    "errorCode7": "Загрузка файла не удалась. Имя файла пусто",
+    "errorCode8": "Ошибка запроса, информация запроса неполная",
+    "errorCode9": "Ошибка запроса, информация запроса неполная",
+    "errorCode10": "Системная ошибка",
+    "errorCode11": "Код подтверждения пуст",
+    "errorCode12": "Код подтверждения истек",
+    "errorCode13": "Неверный код подтверждения",
+    "errorCode14": "Неподдерживаемый метод HTTP-запроса",
+    "errorCode15": "Загрузка не удалась",
+    "errorCode16": "Загрузка не удалась. Файл не существует",
+    "errorCode17": "Загрузка не удалась. Содержимое файла пусто",
+    "errorCode18": "Ошибка документации интерфейса, файл не существует",
+    "errorCode19": "Загрузка не удалась. Неверный формат файла",
+    "errorCode800": "Консультация не существует или уже завершена",
+    "errorCode802": "Запрос уже обработан, пожалуйста, не повторяйте операцию",
+    "errorCode805": "Консультация не существует",
+    "errorCode806": "Устройство не в сети",
+    "errorCode807": "Специалист не в сети",
+    "errorCode809": "Специалист занят",
+    "errorCode811": "Консультация отменена",
+    "errorCode812": "Время консультации истекло",
+    "errorCode813": "Участник консультации не существует",
+    "errorCode816": "Пациент уже существует, пожалуйста, не добавляйте его повторно",
+    "errorCode824": "Запись на прием не существует",
+    "errorCode825": "Больница консультации не совпадает",
+    "errorCode827": "Не удалось сохранить запись консультации",
+    "errorCode830": "Не удалось сохранить инициатора консультации",
+    "errorCode831": "Заявитель не в сети",
+    "errorCode832": "Не является инициатором консультации",
+    "errorCode833": "Консультация завершилась",
+    "errorCode834": "Запись на приём не утверждена",
+    "errorCode835": "Консультация не проводится",
+    "errorCode838": "Срочный код ошибки",
+    "errorCode844": "Пригласитель не в сети",
+    "errorCode845": "Пригласитель занят",
+    "errorCode847": "Специалисты по срочной медицинской помощи отсутствуют",
+    "errorCode851": "Уже присоединился к консультации на другом устройстве",
+    "errorCode852": "Заявитель занят",
+    "errorCode853": "Срочное устройство не существует",
+    "errorCode854": "Аварийное устройство не привязано",
+    "errorCode858": "Срочное оборудование не найдено",
+    "errorCode859": "Специалист по срочной медицинской помощи не найден",
+    "errorCode860": "Устройство не включено в прямом эфире",
+    "errorCode861": "Текущее устройство находится на консультации или в экстренном лечении",
+    "errorCode2000": "Устройство не найдено",
+    "errorCode2001": "Устройство уже привязано, пожалуйста, не добавляйте еще раз",
+    "errorCode2002": "Код устройства не заполнен при переносе устройства в больницу",
+    "errorCode2003": "Устройство уже привязано, пожалуйста, не добавляйте еще раз",
+    "errorCode2004": "Устройство не связано с больницей",
+    "errorCode2005": "Устройство для распространения не выбрано",
+    "errorCode2006": "Код приложения AI пуст",
+    "errorCode2007": "Устройство не удалось подключиться к серверу",
+    "errorCode2008": "Устройство не удалось подключиться к серверу",
+    "errorCode2009": "Устройство не удалось подключиться к серверу",
+    "errorCode2010": "Устройство не удалось подключиться к серверу",
+    "errorCode2011": "Устройство не удалось подключиться к серверу",
+    "errorCode2012": "Устройство для распространения не выбрано",
+    "errorCode2013": "Код устройства пуст",
+    "errorCode2014": "Не удалось удалить",
+    "errorCode2015": "Устройство не найдено",
+    "errorCode2016": "Название устройства не введено",
+    "errorCode2017": "Устройство не удалось подключиться к серверу",
+    "errorCode2018": "Устройство не удалось подключиться к серверу",
+    "errorCode2026": "Это устройство уже привязано к другому больницу! Пожалуйста, обратитесь к администратору, чтобы отменить привязку.",
+    "errorCode2032": "Пользователь не присоединился к больнице",
+    "errorCode2033": "Это устройство принадлежит другому отделению, временно невозможно добавить",
+    "errorCode2037": "Описание устройства не может быть пустым",
+    "errorCode3000": "Управляющая больница не может выбрать себя в качестве родительской больницы",
+    "errorCode3001": "Пароль администратора пуст",
+    "errorCode3002": "Администратор не найден",
+    "errorCode3003": "Имя обязательно",
+    "errorCode3004": "Код администратора обязателен",
+    "errorCode3005": "Имя администратора уже существует",
+    "errorCode3006": "Тип запроса администратора неверен",
+    "errorCode3007": "Код администратора не найден",
+    "errorCode3008": "Неудачное удаление администратора больницы",
+    "errorCode3009": "Код пользователя обязателен",
+    "errorCode3010": "Пароль обязателен",
+    "errorCode3011": "Роль обязательна",
+    "errorCode3012": "Роль не существует",
+    "errorCode3013": "Поскольку больница не была выбрана, роль не может быть выбрана",
+    "errorCode3014": "Код записи сертификации обязателен",
+    "errorCode3015": "Уникальный код обязателен",
+    "errorCode3016": "Уникальный код дублируется",
+    "errorCode3017": "Права не найдены",
+    "errorCode3018": "Выбор себя в качестве вышестоящего уровня",
+    "errorCode3019": "Права обязательны",
+    "errorCode3020": "Роль не найдена",
+    "errorCode3021": "Роль суперадминистратора не может быть использована",
+    "errorCode3022": "Устройство не найдено",
+    "errorCode3023": "Код устройства обязателен",
+    "errorCode3024": "Тип устройства обязателен",
+    "errorCode3025": "Тип устройства не может быть дублирован",
+    "errorCode3026": "Тип устройства уже привязан к устройству",
+    "errorCode3027": "Вышестоящая больница не существует",
+    "errorCode3028": "Больница не существует",
+    "errorCode3029": "Виртуальную больницу нельзя управлять",
+    "errorCode3030": "Пользователь не найден",
+    "errorCode3031": "Код тезауруса или имя записи пусты",
+    "errorCode3032": "Сбой редактирования записи",
+    "errorCode3033": "Код тезауруса или код записи пусты",
+    "errorCode3034": "Заключение или описание пусты",
+    "errorCode3035": "Сбой редактирования содержания записи",
+    "errorCode3036": "Код записи или родительский код пусты",
+    "errorCode3037": "Неверный формат json",
+    "errorCode3038": "Неверный формат номера версии",
+    "errorCode3039": "Имя не может быть удалено",
+    "errorCode3040": "Номер телефона не может быть удален",
+    "errorCode3041": "Базовая информация не может быть удалена",
+    "errorCode3042": "Неправильный пароль",
+    "errorCode3043": "Код пуст",
+    "errorCode3045": "Это последняя версия",
+    "errorCode3047": "Шаблон не настроен",
+    "errorCode3050": "Имя тезауруса дублируется, пожалуйста, введите новое",
+    "errorCode3051": "Имя шаблона дублируется",
+    "errorCode3999": "Системная ошибка",
+    "errorCode4000": "Экспорт не удался. Пожалуйста, сначала выберите пациента для экспорта",
+    "errorCode4001": "У вас нет разрешения",
+    "errorCode4002": "Проверка завершена",
+    "errorCode4003": "Направление не удалось. Вам не разрешено передавать себе",
+    "errorCode4004": "Это направление уже просрочено",
+    "errorCode4005": "Есть незаконченные проверки, пожалуйста, завершите их сначала",
+    "errorCode4006": "Направление в эту больницу не поддерживается",
+    "errorCode4007": "Пациент не найден в этой больнице",
+    "errorCode4008": "Устройство не существует в этой больнице",
+    "errorCode4009": "Связанная операция не относится к тому же устройству. Пожалуйста, проверьте, разрешены ли устройства для связи",
+    "errorCode4010": "Согласитесь, прежде чем продолжить",
+    "errorCode4011": "Пациент по направлению должен быть переведен в состояние зарегистрированного",
+    "errorCode4012": "Неверный ввод пола",
+    "errorCode4013": "Устройство не привязано к больнице",
+    "errorCode4014": "Код пациента не существует",
+    "errorCode4015": "Код проверки не существует",
+    "errorCode4016": "Код проверки не существует",
+    "errorCode4017": "Такая проверка не существует в устройстве",
+    "errorCode4018": "Пожалуйста, сначала улучшите свою личную информацию",
+    "errorCode4019": "Код проверки не существует",
+    "errorCode4020": "Сканирование не завершено, пожалуйста, завершите его сначала перед продолжением",
+    "errorCode4021": "Операция не удалась. Другие операции уже выполнены с направлением",
+    "errorCode4022": "Время начала не может быть позже времени окончания",
+    "errorCode4023": "Пожалуйста, сначала улучшите свою личную информацию",
+    "errorCode4024": "Код направления не существует",
+    "errorCode4025": "Информация о случае не была изменена, пожалуйста, внесите изменения перед сохранением",
+    "errorCode4026": "Проверка кода не существует",
+    "errorCode4027": "Возраст беременности не указан",
+    "errorCode4028": "Нет информации об изображении в этой проверке",
+    "errorCode4029": "Приложение для сканирования пустое",
+    "errorCode4030": "Категория приложения для сканирования пуста",
+    "errorCode4031": "Режим измерения не выбран",
+    "errorCode4032": "Запрос обязателен",
+    "errorCode4033": "Пожалуйста, заполните содержимое комментария",
+    "errorCode4034": "Пожалуйста, выберите и задайте параметры измерения",
+    "errorCode4035": "Пожалуйста, задайте стиль измерения",
+    "errorCode4036": "Объект обслуживания не установлен",
+    "errorCode4037": "Проверка кода не существует",
+    "errorCode4038": "Paginated search for referral patient check list, not within one institution",
+    "errorCode4039": "Начало и конец времени не выбраны",
+    "errorCode4040": "Ошибка передачи значения метода расчета",
+    "errorCode4041": "Неверный объект обслуживания",
+    "errorCode4042": "Неправильный статус регистрации",
+    "errorCode4043": "Несуществующий номер версии",
+    "errorCode4044": "Текущая версия не поддерживается",
+    "errorCode4045": "Пользователь не существует",
+    "errorCode4046": "Код пациента не может быть пустым",
+    "errorCode4049": "У вас нет доступа к этой форме для перевода на другой уровень медицинской помощи",
+    "errorCode4050": "У этого пациента нет записей о проверках",
+    "errorCode4056": "Не найдены данные для экспорта",
+    "errorCode5000": "Проверка кода не существует",
+    "errorCode5001": "Запись проверки не существует",
+    "errorCode5002": "Содержание шаблона отчета пусто",
+    "errorCode5003": "Пожалуйста, сначала заполните отчет",
+    "errorCode5004": "Пожалуйста, введите номер телефона",
+    "errorCode5005": "Код отчета не может быть пустым",
+    "errorCode5006": "Адрес для обмена отчетами не установлен",
+    "errorCode5007": "Адрес для обмена отчетами не установлен",
+    "errorCode5008": "Шаблон SMS не настроен",
+    "errorCode5009": "Поделиться не удалось",
+    "errorCode5010": "Пожалуйста, укажите электронную почту для обмена",
+    "errorCode5011": "Код шаблона отчета не существует",
+    "errorCode5012": "Адрес сообщения пуст",
+    "errorCode5014": "Не удалось создать отчет",
+    "errorCode5015": "Пациент для перевода на другой уровень медицинской помощи не существует",
+    "errorCode5016": "Пациент для перевода на другой уровень медицинской помощи не принят",
+    "errorCode5017": "Существует комментарий с таким же именем",
+    "errorCode6000": "Неправильный номер телефона",
+    "errorCode6001": "Пожалуйста, введите имя пациента",
+    "errorCode6002": "Пожалуйста, введите номер телефона",
+    "errorCode6003": "Имя пациента ограничено 20 символами",
+    "errorCode6004": "Пожалуйста, введите правильный номер телефона",
+    "errorCode6005": "Пользователь не существует",
+    "errorCode6006": "Пациент уже существует, не добавляйте его снова",
+    "errorCode6007": "У вас нет разрешения, пожалуйста, свяжитесь с администратором, чтобы помочь вам",
+    "errorCode6008": "Пожалуйста, сначала улучшите вашу личную информацию",
+    "errorCode6009": "Пользователь не существует",
+    "errorCode6010": "Запрашиваемая роль не поддерживается",
+    "errorCode6011": "Пожалуйста, заполните информацию для заявки",
+    "errorCode6012": "Пожалуйста, заполните информацию для заявки",
+    "errorCode6013": "У вас нет разрешения на выполнение этой операции, пожалуйста, обратитесь к администратору",
+    "errorCode6014": "Пожалуйста, сначала усовершенствуйте свою личную информацию",
+    "errorCode6015": "Пожалуйста, загрузите аватар",
+    "errorCode6016": "Запрашиваемая роль не поддерживается",
+    "errorCode6017": "Пожалуйста, введите название организации",
+    "errorCode6018": "Код больницы не существует",
+    "errorCode6019": "Код должности не существует",
+    "errorCode6020": "Введите название должности",
+    "errorCode6021": "Код отдела не существует",
+    "errorCode6022": "Код звания не существует",
+    "errorCode6023": "Введите звание",
+    "errorCode6024": "Неправильный формат электронной почты",
+    "errorCode6025": "Пожалуйста, введите пароль для входа",
+    "errorCode6026": "Счет не существует",
+    "errorCode6027": "Пользователь не существует",
+    "errorCode6028": "Пожалуйста, введите адрес электронной почты",
+    "errorCode6029": "Незарегистрированный пользователь",
+    "errorCode6030": "Пожалуйста, введите номер телефона",
+    "errorCode6031": "Незарегистрированный пользователь",
+    "errorCode6032": "Номер телефона не существует",
+    "errorCode6033": "Электронная почта не существует",
+    "errorCode6034": "Неправильный код подтверждения",
+    "errorCode6035": "Текущий оператор для изменения пароля",
+    "errorCode6036": "Пожалуйста, введите правильный пароль",
+    "errorCode6037": "Этот аккаунт еще не зарегистрирован",
+    "errorCode6038": "Пожалуйста, введите пароль",
+    "errorCode6039": "Неверная информация о регионе",
+    "errorCode6040": "Информация о регионе не установлена",
+    "errorCode6041": "Текущая версия не поддерживается",
+    "errorCode6042": "Пользователь не существует",
+    "errorCode6043": "Пользователь прошел проверку",
+    "errorCode6044": "Учетная запись уже существует, пожалуйста, войдите",
+    "errorCode6045": "Учетная запись уже существует, пожалуйста, войдите",
+    "errorCode6046": "Учетная запись уже существует, пожалуйста, войдите",
+    "errorCode6047": "Номер телефона уже связан с другим аккаунтом",
+    "errorCode6048": "Этот адрес электронной почты уже связан с пользователем",
+    "errorCode6049": "Аккаунт не может быть пустым",
+    "errorCode6050": "Формат аккаунта не соответствует требованиям",
+    "errorCode6051": "Пожалуйста, введите правильный код подтверждения",
+    "errorCode6053": "Неправильный исходный пароль",
+    "errorCode6055": "Название должности дублируется, пожалуйста, попробуйте еще раз",
+    "errorCode6056": "Название отдела дублируется, пожалуйста, попробуйте еще раз",
+    "errorCode6057": "URL-адрес изображения аватара недействителен",
+    "errorCode6058": "Ник слишком длинный",
+    "errorCode6062": "Учетная запись заблокирована, она будет автоматически разблокирована на следующий день",
+    "errorCode6064": "Пароль пользователя совпадает с предыдущим, пожалуйста, введите заново",
+    "errorCode6066": "Ошибка распознавания речи",
+    "errorCode6070": "Превышен максимальный предел пользователей",
+    "errorCode6071": "Превышен максимальный предел устройств",
+    "errorCode6072": "Сервер был отключен",
+    "errorCode6077": "Не установлено принадлежность к больнице",
+    "errorCode6078": "Больница-партнер не должна быть старше",
+    "errorCode7001": "Код курса не указан",
+    "errorCode7002": "Код преподавателя не указан",
+    "errorCode7003": "Информация о преподавателе не найдена",
+    "errorCode7004": "Курс не найден",
+    "errorCode7005": "Нельзя удалить курс в статусе проверки",
+    "errorCode7006": "Нельзя обновить курс, поскольку он уже утвержден",
+    "errorCode7009": "Максимальное количество студентов не может равняться 0",
+    "errorCode7010": "Имя группы пользователей пусто",
+    "errorCode7013": "Список студентов класса пуст",
+    "errorCode7014": "Код группы пользователей пуст",
+    "errorCode7015": "Название видео пусто",
+    "errorCode7016": "URL видео пуст",
+    "errorCode7017": "Кодек видео пуст",
+    "errorCode7019": "Преподаватель онлайн-курса не существует",
+    "errorCode7021": "Курс сейчас транслируется в прямом эфире",
+    "errorCode7022": "Учитель не в сети",
+    "errorCode7023": "Студент не в сети",
+    "errorCode7024": "Курс не утвержден",
+    "errorCode7025": "Тест не найден",
+    "errorCode7026": "Код теста не пуст",
+    "errorCode7027": "Студенческие ответы не найдены",
+    "errorCode7029": "Не найден прямой эфир курса",
+    "errorCode7030": "Курс не транслируется в прямом эфире",
+    "errorCode7031": "Курс закончен",
+    "errorCode7032": "Ошибка обработки базы данных курса",
+    "errorCode7040": "Студент не оплатил",
+    "errorCode7044": "Отчет уже отправлен. Пожалуйста, не отправляйте его снова",
+    "errorCode7046": "Пакет обновлений уже существует. Измените или удалите имя пакета обновления",
+    "errorCode7050": "Код не может быть пустым",
+    "errorCode7052": "Описание слишком длинное",
+    "errorCode7056": "Текущее устройство уже используется",
+    "errorCode7058": "Пользователь уже использует удаленное подключение на другом устройстве",
+    "errorCode7059": "Код студента пуст",
+    "errorCode7063": "Название альбома пусто",
+    "errorCode7064": "Нельзя присоединиться к классу, созданному вами, как студент",
+    "errorCode7065": "Имена групп пользователей не могут дублироваться",
+    "errorCode7067": "Нет порта для обмена ультразвуковым сканером",
+    "errorCode7076": "Студент уже в классе",
+    "errorCode7077": "Объединение пользователя и устройства не в той же организации",
+    "errorCode7079": "Устройство не поддерживается"
+  },
+  "common": {
+    "savedeskTokSuccess": "Сохранено успешно, проверьте на рабочем столе",
+    "savedeskTokSuccess2": "Сохранено успешно",
+    "photo": "Фото",
+    "cameraPermissionDisabled": "Разрешение на использование камеры отключено",
+    "microphonePermissionDisabled": "Разрешение на использование микрофона отключено",
+    "mediaFilePermissionDisabled": "Разрешение на использование медиафайлов отключено",
+    "goToSettingsPageToEnable": "Перейти на страницу настроек для активации?",
+    "courseHome": "Главная страница курса",
+    "joinClass": "Присоединиться к классу",
+    "selectAtLeastOnePatient": "Пожалуйста, выберите хотя бы одного пациента",
+    "college": "Колледж",
+    "printTestPage": "Напечатать тестовую страницу",
+    "installLocalDriver": "Установить локальный драйвер",
+    "flyinsonoCollege": "Колледж Флайинсоно",
+    "pleaseEnter": "Пожалуйста, введите",
+    "searchOrAddPatient": "Поиск или добавление пациента",
+    "networkError": "Ошибка сети, пожалуйста, сначала проверьте свое соединение с интернетом и попробуйте снова",
+    "selectExportImage": "Пожалуйста, выберите изображение для экспорта результатов измерений",
+    "enterValidCode": "Пожалуйста, введите действительный уникальный код",
+    "deviceAdded": "Вы добавили устройство, проверьте его в списке устройств",
+    "networkException": "Соединение с сетью прервано, пожалуйста, попробуйте снова позже",
+    "ofTerm": "Всего {0} позиций",
+    "completeInformation": "Дополнить информацию",
+    "refreshQRCode": "Обновить QR-код",
+    "clickToDownload": "Нажмите для загрузки",
+    "feedback": "Обратная связь",
+    "feedbackSystem": "Система обратной связи",
+    "noImageInfo": "Информация об изображении отсутствует",
+    "evaluation": "Оценка",
+    "rating": "Рейтинг",
+    "uploadFail": "Сеть нестабильна, не удалось загрузить файл",
+    "cachedVideo": "Записанное видео было сохранено в папку установки",
+    "temporaryLeave": "Временный уход",
+    "confirmScanQRLogin": "Подтвердите вход по QR-коду",
+    "flyinsonoLoginConfirm": "Подтверждение входа в Flyinsono",
+    "confirmLogin": "Подтвердить вход",
+    "inconsistentServer": "Сервера не совпадают!",
+    "ensureConsistentServerSelection": "Пожалуйста, убедитесь, что выбранные серверы на мобильном устройстве и десктопе совпадают",
+    "networkInstability": "Нестабильность сети",
+    "showMore": "Показать больше",
+    "enableTab": "Включить новую вкладку",
+    "leaveCurrentPage": "Вы уверены, что хотите покинуть текущую страницу?",
+    "noData": "Нет данных",
+    "endPage": "Последняя страница",
+    "NetImageError": "Сеть нестабильна, загрузка изображения не удалась.",
+    "added": "Добавлено",
+    "layout": "Макет",
+    "phoneExists": "Номер телефона уже существует",
+    "emailExists": "Электронная почта уже существует",
+    "appName": "Flyinsono",
+    "versionNumber": "Версия: {0}",
+    "language": "Язык",
+    "refresh": "Обновить",
+    "forward": "Переслать",
+    "createTime": "Время создания",
+    "status": "Статус",
+    "finish": "Завершить",
+    "report": "Отчет",
+    "search": "Поиск",
+    "search4Btn": "Поиск",
+    "open": "Открыто",
+    "input": "Введите {0}",
+    "fullName": "Имя",
+    "email": "Электронный адрес",
+    "mobileNumber": "Мобильный номер",
+    "loading": "Загрузка",
+    "and": "и",
+    "submitting": "Подается...",
+    "underDevelopment": "Находится в разработке",
+    "tip": "Совет",
+    "confirm": "Подтвердить",
+    "confirm4Btn": "Подтвердить",
+    "submitted": "Отправлено",
+    "close": "Закрыть",
+    "alreadySaved": "Сохранено",
+    "add": "Добавить",
+    "save": "Сохранить",
+    "save4Btn": "Сохранить",
+    "filter": "Фильтр",
+    "verificationCode": "Код подтверждения",
+    "cancel": "Отменить",
+    "cancel4Btn": "Отменить",
+    "image": "Изображение",
+    "remove": "Удалить",
+    "state": "Статус",
+    "all": "Все",
+    "selected": "Выбрано",
+    "unDistributed": "Не распределено",
+    "distributed": "Распределено",
+    "back": "Назад",
+    "revoke": "Отменить",
+    "Select": "Select",
+    "country": "Страна",
+    "province": "Область",
+    "city": "Город",
+    "operation": "Операция",
+    "removeNotification": "Подтвердить удаление",
+    "edit": "Редактировать",
+    "submit": "Отправить",
+    "yes": "Да",
+    "no": "Нет",
+    "noneDataTip": "Нет данных",
+    "delete": "Удалить",
+    "modify": "Изменить",
+    "platformDefault": "По умолчанию",
+    "InputLimitTime": "Input the timeout period",
+    "referLimitTime": "Время ожидания перевода",
+    "inputHour": "Часы",
+    "canReferOrg": "Соединительная больница",
+    "networkUnstable": "Сеть нестабильна, изображение загружается, пожалуйста, подождите",
+    "error": "ошибка",
+    "zoomIn": "Увеличить",
+    "zoomOut": "Уменьшить",
+    "flyinsonoLog": "Журнал Flyinsono",
+    "noDataExport": "Нет данных для экспорта",
+    "pleaseSelectZipFile": "Пожалуйста, выберите файл ZIP, RAR, TAR или GZIP!",
+    "view": "Просмотреть",
+    "previousFivePageText": "Предыдущие 5 страниц",
+    "nextFivePageText": "Следующие 5 страниц",
+    "cancellation": "Отменено",
+    "cancellationSuccess": "Успешно отменено",
+    "validateIdentity": "Проверка личности"
+  },
+  "homePage": {
+    "homePage": "Главная страница",
+    "consultation": "Консультация",
+    "organizationInfo": "Информация о больнице",
+    "reportTemplate": "Шаблоны отчетов",
+    "organizationDevices": "Оборудование больницы",
+    "organizationEntries": "Больничные записи",
+    "signOut": "Выйти",
+    "loginOutConfirm": "Вы уверены, что хотите выйти?",
+    "loginingOut": "Выход...",
+    "ultrasoundComments": "Комментарии по ультразвуку",
+    "diagnostics": "Диагностика",
+    "course": "Сообщество",
+    "message": "Сообщения",
+    "my": "Мое",
+    "notYet": "Недоступно",
+    "messageListener": "Слушатель сообщений",
+    "reportOpenVocPage": "Отчет открывает страницу словаря",
+    "enableMock": "Включить Мок",
+    "swtichLanguageConfirm": "Переключение текущего языка требует перезапуска клиента. Вы хотите переключить?",
+    "remoteDiagnosis": "vSono"
+  },
+  "profileComplete": {
+    "phoneAlreadyBindToAnotherAccount": "Этот номер телефона уже связан с другой учетной записью.",
+    "emailAlreadyBindToAnotherAccount": "Этот адрес электронной почты уже связан с другой учетной записью.",
+    "nameFieldValidation": "Пожалуйста, введите свое имя",
+    "phoneFormatValidation": "Неверный формат номера телефона",
+    "emailFormatValidation": "Неверный формат электронной почты",
+    "OrganizationNamePlaceHolder": "Пожалуйста, введите название вашей больницы.",
+    "furtherCompleteProfiles": "Завершите свою личную информацию.",
+    "basicInformation": "Основная информация",
+    "realFullNamePlaceHolder": "Пожалуйста, введите свое полное имя.",
+    "phoneNumberPlaceHolder": "Пожалуйста, введите свой номер телефона.",
+    "emailPlaceHolder": "Пожалуйста, введите ваш электронный адрес.",
+    "jobInformation": "Информация о работе",
+    "areaLocated": "Регион",
+    "organizationIn": "Учреждение",
+    "departmentOn": "Отделение",
+    "departmentPlaceHolder": "Пожалуйста, выберите ваше отделение.",
+    "selectAreaTip": "Пожалуйста, выберите свой регион.",
+    "organizationFullNameInputTip": "Пожалуйста, введите полное название вашего учреждения.",
+    "furtherCompleteProfilesToFindYou": "Завершите свою информацию, чтобы упростить для других быстрый поиск вас."
+  },
+  "setting": {
+    "switchingLanguage": "Переключение языка...",
+    "FullfillServerUrl": "Input server url.",
+    "FullfillServerPort": "Input server port.",
+    "serverUrlFormatValidation": "Введите доступный адрес сервера.",
+    "serverPortFormatValidation": "Введите доступный порт сервера. (0-65535)",
+    "serverUrlExistValidation": "Адрес сервера уже существует.",
+    "serverUrlNotExistValidation": "Сервер не найден.",
+    "serverUrlNotChangedValidation": "Никаких изменений в настройках сервера не произведено.",
+    "SelectOrAddServerUrl": "Select or add server url.",
+    "serverUrl": "Адрес:",
+    "serverPort": "Порт:",
+    "serverUrlExample": "пример 127.0.0.1",
+    "serverPortExample": "пример 8080",
+    "generalConfiguration": "Общие настройки",
+    "detectionAssistant": "Заместитель по детекции",
+    "currency": "Валюта",
+    "startUpAutomatically": "Автозапуск при включении",
+    "autoPopupLabel": "Автоматическое отображение подсказок при открытии",
+    "enableSecondWindow": "Включить два окна",
+    "language": "Язык",
+    "networkSettings": "Настройки сети",
+    "selectServer": "Выбрать сервер",
+    "aboutFlyinsono": "О Flyinsono",
+    "productVersion": "Версия продукта",
+    "runLog": "Журнал выполнения",
+    "downloadMobileApp": "Скачать мобильное приложение",
+    "exportLog": "Экспорт журнала",
+    "checkForUpdates": "Проверить обновления",
+    "feedback": "Обратная связь",
+    "addServer": "Добавить сервер",
+    "automaticUpdate": "Автоматическое обновление",
+    "remindMeOfNewVersion": "Уведомить меня о новой версии",
+    "automaticallyPopupTag": "Автоматически показывать окно с предложением добавить тег при отправке отчета",
+    "secondWindowConfigStatement": "Некоторые страницы со функцией записи не будут затронуты.",
+    "electronicSignature": "Электронная подпись",
+    "switchCurrentServerRestartClient": "Переключение текущего сервера требует перезагрузки клиента. Вы уверены, что хотите переключиться?",
+    "currentVersion": "Текущая версия",
+    "lastOneDay": "Последний день",
+    "lastOneWeek": "Последняя неделя",
+    "lastOneMonth": "Последний месяц",
+    "exportingLogs": "Экспорт журналов",
+    "failedExportLog": "Экспорт журнала не удался",
+    "currentServerAddressInUse": "Текущий адрес сервера используется. Пожалуйста, удалите его после смены адреса сервера.",
+    "personalization": "Пользовательские настройки",
+    "myAssistant": "Мой ассистент:",
+    "assistantPhysician": "Врач-ассистент:",
+    "chooseAssistant": "Выберите ассистента для добавления",
+    "chooseAssistantTip": "Ассистенты могут помочь специалистам с триажем перед консультацией и организовать экспорт данных о пациентах после консультации.",
+    "chooseAssistantPhysician": "Выберите врача-ассистента для добавления",
+    "chooseAssistantPhysicianTip": "Врачи-ассистенты - это врачи с диагностическими квалификациями, которые могут участвовать в консультационном процессе и помочь специалистам составить отчет.",
+    "consultationSettings": "Настройки консультаций",
+    "confirmDeletion": "Подтвердить удаление?",
+    "deviceError": "Сбой устройства",
+    "deviceNormal": "Устройство работает нормально",
+    "searchingForDevice": "Поиск доступных устройств...",
+    "noAvailableDevice": "Доступное устройство не найдено.",
+    "micInput": "Вход микрофона:",
+    "speakerOutput": "Выход динамика:",
+    "cameraTest": "Проверка камеры",
+    "speakerTest": "Проверка динамика",
+    "micTest": "Проверка микрофона",
+    "seeImage": "Вы видите изображение?",
+    "hearMusic": "Вы слышите музыку?",
+    "seeVolumeBar": "Вы видите изменения в панели громкости?",
+    "camera": "Камера",
+    "mic": "Микрофон",
+    "speaker": "Динамик",
+    "video": "Видео",
+    "audio": "Аудио",
+    "detectAllDevices": "Проверить все устройства",
+    "upgradeNow": "Обновить сейчас",
+    "upgradeLater": "Напомнить мне позже",
+    "upgrading": "Обновление приложения...",
+    "newVersion": "Новая версия",
+    "latestVersionTip": "У вас последняя версия программного обеспечения",
+    "vBoxSetting": "Настройка ультразвука",
+    "networkConnectionUtility": "Средство подключения к сети",
+    "configuration": "Конфигурация",
+    "wiredNetworkConnection": "Проводное подключение к сети",
+    "wirelessNetworkConnection": "Беспроводное подключение к сети",
+    "refreshDNS": "обновить DNS",
+    "properties": "Свойства",
+    "connect": "Подключиться",
+    "disconnect": "Отключиться",
+    "forgetPassword": "Забыли пароль",
+    "enableDHCP": "Включить DHCP",
+    "ipAddress": "IP-адрес",
+    "subnetMask": "Маска подсети",
+    "defaultGateway": "Основной шлюз",
+    "preferredDNS": "Предпочтительный DNS",
+    "standbyDNS": "Резервный DNS",
+    "macAddress": "Мак-адрес",
+    "speakerDetection": "Обнаружение динамика",
+    "cameraDetection": "Обнаружение камеры",
+    "microphoneDetection": "Обнаружение микрофона",
+    "sonopostDetetion": "Обнаружение ультразвукового оборудования",
+    "cameraTestSuccessTip": "Состояние камеры нормальное",
+    "cameraTestErrorTip": "В камере обнаружена проблема",
+    "fixCameraTip": "Пожалуйста, снова подключите камеру или выберите другое устройство.",
+    "speakerTestSuccessTip": "Состояние динамика нормальное",
+    "speakerTestErrorTip": "Состояние динамика аномальное",
+    "fixSpeakerTip": "Пожалуйста, еще раз вставьте и вытащите динамик или попробуйте другое устройство",
+    "micphoneTestSuccessTip": "Состояние микрофона нормальное",
+    "micphoneTestErrorTip": "Состояние микрофона аномальное",
+    "fixMicphoneTip": "Пожалуйста, еще раз вставьте и вытащите микрофон или попробуйте другое устройство",
+    "termianlTestTip": "Этот экран показывает ультразвуковые и сканированные виды, которые видны во время консультации. Пожалуйста, подтвердите, видим ли экран.",
+    "skip": "Пропустить",
+    "nextTest": "Пожалуйста, нажмите следующее, чтобы протестировать другие пункты",
+    "recheck": "Проверить вновь",
+    "ultrasoundImageNotVisible": "Ультразвуковое изображение не видно",
+    "ultrasoundImageIsVisible": "Ультразвуковое изображение видно",
+    "nothingInTerminalTip": "Пожалуйста, вставьте и вытащите ультразвуковой интерфейс на задней стороне тележки.",
+    "refreshDNSFailed": "Обновление DNS не удалось",
+    "wirelessNetworkCardNotFound": "Беспроводная сетевая карта не найдена",
+    "confirmDNSRefresh": "После обновления DNS устройство автоматически перезагрузится. Вы подтверждаете?",
+    "connecting": "Подключено",
+    "welcomeToFlyinsono": "Добро пожаловать в программное обеспечение для удаленной ультразвуковой системы!",
+    "welcomeTipOne": "Для обеспечения успешного проведения удаленной консультации в реальном времени настоятельно рекомендуется следовать шагам в этом руководстве и тестировать все необходимые устройства для консультации.",
+    "welcomeTipTwo": "Если вы уверены, что с устройством все в порядке, вы можете нажать 'Пропустить' для непосредственного перехода к основному интерфейсу программного обеспечения.",
+    "ultrasoundStatusNormal": "Состояние ультразвукового вещания нормальное, тест завершен.",
+    "start": "Начать",
+    "switching": "Включается...",
+    "switchingSecondWindowSuccess": "Второе окно успешно включено"
+  },
+  "user": {
+    "longExpertise": "Слишком длинная область экспертизы",
+    "selectIdentityAuth": "Выберите удостоверение личности",
+    "isUseSecondWindow": "Использовать второе окно?",
+    "identityToAuth": "Выберите личность для аутентификации",
+    "deviceSearch": "Поиск устройства",
+    "templateSearch": "Поиск шаблона",
+    "addTemplate": "Добавить шаблон",
+    "defaultTemplate": "Шаблон по умолчанию",
+    "useFlyinsonoTemplate": "Использовать шаблон отчета Flyinsono",
+    "orgTemplate": "Шаблон больницы",
+    "universalHumanTemplate": "Универсальный шаблон ультразвукового отчета для человека",
+    "animalTemplate": "Классический шаблон ультразвукового отчета для животных",
+    "humanTemplate": "Классический шаблон ультразвукового отчета для человека",
+    "createTemplate": "Создать шаблон",
+    "equity": "Права",
+    "setPassword": "Создать пароль",
+    "inputVerificationCode": "Введите код подтверждения",
+    "getVerificationCode": "Получить код подтверждения",
+    "inputOriginalPassword": "Введите оригинальный пароль",
+    "originalPassword": "Оригинальный пароль",
+    "inputNewPassowrd": "Введите новый пароль",
+    "newPassowrd": "Новый пароль",
+    "checkInputAgain": "Еще раз подтвердите ввод",
+    "passowrdConfirm": "Подтвердите пароль",
+    "passowrdTip": "Пароль должен содержать не менее 6 символов, включая буквы и цифры (не только цифры или буквы)",
+    "changedPassword": "Измените пароль",
+    "passwordValidation": "Как минимум 6 символов, не все номера или письма",
+    "confirmNewPassword": "Подтвердить новый пароль",
+    "inputPasswordAgain": "Еще раз введите пароль",
+    "newPassowrdCannotBeNull": "Новый пароль не может быть пустым!",
+    "twoPasswordNotSame": "Введенные пароли не совпадают!",
+    "newPassowrdCannotBeSame": "Новый пароль не может быть таким же, как старый!",
+    "verifyCodeCannotBeNull": "Код подтверждения не может быть пустым!",
+    "afterXSecondFetchAgain": "{0} секунд, чтобы снова получить",
+    "OrganizationIn": "Больница",
+    "inputOrganizationIn": "Введите название больницы",
+    "departmentIn": "Отделение",
+    "deviceName": "Название устройства",
+    "deviceAdded": "Устройство уже добавлено",
+    "inputDeviceName": "请输入 название устройства",
+    "deviceDescription": "Описание устройства",
+    "inputDeviceDescription": "Введите описание устройства",
+    "deviceCode": "Код устройства",
+    "inputDeviceCode": "Введите код устройства",
+    "deviceType": "Тип устройства",
+    "autoFillDeviceType": "Автоматическое заполнение типа устройства",
+    "deviceModel": "Модель устройства",
+    "autoFillDeviceModel": "Автоматическое заполнение модели устройства",
+    "deviceAutoShare": "Автоматическая долевая продажа устройств",
+    "modifyDeviceInfo": "Редактировать информацию об устройстве",
+    "addDevice": "Добавить устройство",
+    "editDevice": "Редактировать устройство",
+    "newDevice": "Добавить устройство",
+    "userRelated": "Связать с пользователем",
+    "batchOperation": "Массовая операция",
+    "online": "Онлайн",
+    "offline": "Офлайн",
+    "shareDevice": "Поделиться",
+    "notOnline": "Не в сети",
+    "verificationStatus": "Статус проверки",
+    "refuseReason": "Причина отказа",
+    "idCard": "Номер удостоверения личности",
+    "uploadIdCardFrontSide": "Загрузите фронтальную сторону удостоверения личности",
+    "uploadIdCardReverseSide": "Загрузите обратную сторону удостоверения личности",
+    "doctorLicense": "Медицинская лицензия",
+    "uploaddoctorLicense": "Загрузить медицинскую лицензию",
+    "verificationApply": "Подать заявку на проверку",
+    "platformRole": "Роль на платформе",
+    "skilledArea": "Специализация",
+    "skilledAreaWithDevider": "Специализация:",
+    "unApplyment": "Не применено",
+    "underVerification": "Ожидает проверку",
+    "refuse": "Отказать",
+    "refused": "Отказано",
+    "passed": "Пройдено",
+    "editTip": "Редактировать подсказку",
+    "useCurrentSelectedRole": "Использовать выбранную роль",
+    "loadApplymentInfoFailed": "Загрузка информации о заявке не удалась",
+    "applymentSubmittedFailed": "Подача заявки не удалась",
+    "applymentSubmitted": "Заявка подана",
+    "uploadIdCardImage": "Загрузите ваше удостоверение личности",
+    "uploadIdCardReverseSideVerification": "Загрузите обратную сторону удостоверения личности",
+    "uplaodDoctorLicenseImage": "Загрузите медицинскую лицензию",
+    "skilledAreaNullTip": "Выберите или введите вашу специализацию",
+    "frontIdCardInputTip": "Загрузите фронтальную сторону удостоверения личности",
+    "deleteUserSuccess": "Удаление пользователя успешно выполнено",
+    "deleteDevice": "Удалить устройство",
+    "roger": "Закрыть",
+    "fullFillRequirements": "Сначала заполните обязательные поля",
+    "addDeviceSuccess": "Устройство успешно добавлено",
+    "underDevelopment": "В разработке",
+    "openState": "Состояние включено",
+    "deleting": "Удаление...",
+    "open": "Включено",
+    "closed": "Выключено",
+    "OrganizationLocated": "Больница",
+    "deviceLive": "Прямая трансляция устройства",
+    "deviceDetails": "Детали устройства",
+    "myDevices": "Мои устройства",
+    "ulrSoundsMachine": "Ультразвуковая машина",
+    "sonopost": "Чудо-ящик",
+    "deleteDevices": "Удалить устройства",
+    "live": "Прямая трансляция",
+    "scannDevices": "Сканировать устройства",
+    "aiApplicationName": "Название AI приложения",
+    "aiApplication": "AI приложение",
+    "deleteDeviceConfirm": "Удалить устройство?",
+    "operationSuccess": "Успешная операция!",
+    "updateSuccess": "Обновление прошло успешно!",
+    "updatefailed": "Обновление не удалось!",
+    "deleteUserConfirm": "Удалить этих пользователей?",
+    "deleteFailed": "Удаление не удалось!",
+    "deviceAlreadyAdded": "Устройство уже добавлено",
+    "checkItInDeviceList": "Проверьте это в списке устройств",
+    "deleteSuccess": "Успешно удалено",
+    "tagAlready": "Этот тег уже существует!",
+    "customize": "Настроить",
+    "notAuthenticated": "Неподтвержденный",
+    "loadApplyInfoFailed": "Не удалось загрузить информацию о заявке",
+    "avatarUploadSuccess": "Загрузка аватара прошла успешно",
+    "avatarUploadFailed": "Загрузка аватара не удалась",
+    "modifySuccess": "Изменения успешно сохранены",
+    "modifyFailed": "Изменение не удалось",
+    "oldPasswordError": "Неправильный старый пароль",
+    "phoneError": "Неправильный номер мобильного телефона",
+    "emailError": "Неверный адрес электронной почты",
+    "notFoundVerifyCode": "Не найден проверочный код",
+    "verifyCodeExpired": "Проверочный код истек",
+    "hasSent": "Код был отправлен",
+    "notCompleteInfo": "Ваша личная информация не полная",
+    "completeInfoBeforeApply": "Сначала заполните свою личную информацию, а затем подайте заявку на реальную аутентификацию",
+    "toCompleteInfo": "Дополнить информацию",
+    "hasAuthenticated": "Уже подтверждено",
+    "setting": "Настройки",
+    "entry": "Статья",
+    "myEntry": "Мои статьи",
+    "myTemplate": "Мои шаблоны",
+    "personalInfo": "Личная информация",
+    "organizationManage": "Управление больницами",
+    "realNameAuthenticationUnlockMoreRights": "Подлинная аутентификация открывает больше преимуществ",
+    "viewAuthentication": "Посмотреть аутентификацию",
+    "realNameAuthentication": "Подлинная аутентификация",
+    "entryLibrary": "Библиотека терминов",
+    "inputVerifyCode": "Введите проверочный код",
+    "inputOldPassword": "Введите старый пароль",
+    "user": "Пользователь",
+    "coverImage": "Обложка",
+    "UploadIdCardFrontImage": "Загрузите фотографию лицевой стороны удостоверения личности",
+    "SelectOrInputSkilledField": "Выберите или введите свою сферу деятельности",
+    "getUserInfoFailed": "Получение информации о пользователе не удалось.",
+    "requiredFieldsCannotBeEmpty": "Обязательные поля не должны быть пустыми.",
+    "waitToAdd": "Для добавления",
+    "saveSuccess": "Сохранено успешно",
+    "saveFailed": "Сохранение не удалось",
+    "changeName": "Изменить имя",
+    "changePhone": "Изменить номер телефона",
+    "changeEmail": "Изменить электронную почту",
+    "changeOrganization": "Изменить больницу",
+    "currentHasChangedInfoNotSave": "Есть несохраненные изменения.",
+    "toSave": "Сохранить изменения",
+    "leave": "Покинуть",
+    "completeAccountInfo": "Завершить вашу личную информацию",
+    "completeAccountInfo4Mobile": "Личная информация",
+    "InputName": "Пожалуйста, введите ваше имя",
+    "InputEmail": "Пожалуйста, введите вашу электронную почту",
+    "InputNewPhone": "Пожалуйста, введите ваш новый номер телефона",
+    "InputNewEmail": "Пожалуйста, введите ваш новый адрес электронной почты",
+    "sendVerifyCodeSuccess": "Код подтверждения успешно отправлен",
+    "InputCorrectPhoneOrEmail": "Пожалуйста, введите правильный номер телефона или адрес электронной почты",
+    "getOrganizationFailed": "Больница не найдена",
+    "getObjectFailed": "Предмет не найден",
+    "operationFailed": "Операция не удалась",
+    "phoneFormError": "Неверный формат номера телефона!",
+    "emailFormError": "Неверный формат электронной почты!",
+    "selectOrgFirst": "Сначала выберите вашу больницу!",
+    "noDepartmentInfo": "Информация о отделении отсутствует!",
+    "continueToFinishConfirm": "Вы хотите продолжить заполнять информацию?",
+    "phoneNumberUsed": "Номер телефона уже зарегистрирован другим пользователем!",
+    "emailUsed": "Электронная почта уже зарегистрирована другим пользователем!",
+    "deviceUsed": "Это устройство уже связано с другой больницей! Пожалуйста, обратитесь к администратору, чтобы развязать.",
+    "deviceShared": "Это устройство связано с {0} пользователями. Пожалуйста, сначала сделайте резервное копирование или экспортируйте существующую информацию пользователей и данные, прежде чем удалять.",
+    "editOrgConfirm": "Изменение вашей текущей больницы приведет к потере бизнес-данных. Вы уверены, что хотите изменить?",
+    "editReportTemplate": "Редактировать шаблон отчета",
+    "userCenter": "Личный центр",
+    "about": "О нас",
+    "selectUserTip": "Пожалуйста, выберите пользователей, которых нужно удалить",
+    "accountCancellation": "Отмена аккаунта",
+    "fisAccountCancellation": "Отмена аккаунта FLYINSONO",
+    "fisAccountCancellationConfirmation": "Подтвердить отмену"
+  },
+  "remedical": {
+    "viewMaterials": "Просмотр материалов",
+    "notSupportFileView": "Текущий формат файла не поддерживает предварительный просмотр",
+    "patientManagement": "Управление пациентами",
+    "examinationDetails": "Детали обследования",
+    "history": "История",
+    "processed": "Обработано",
+    "copyClassCode": "Копирование кода класса",
+    "updatePackageName": "Обновление имени пакета",
+    "applicableSystemVersion": "Подходящая версия системы",
+    "applicableSoftwareVersion": "Подходящая версия программного обеспечения",
+    "currentOrganization": "Текущая организация",
+    "completed": "Завершено",
+    "medicalHistory": "Медицинская история пациента",
+    "transferiIn": "Перевод в",
+    "transferOut": "Перевод из",
+    "downloadingLogs": "Загрузка журналов",
+    "RetrievingLog": "Получение записей из журнала",
+    "ImageProcessing": "Обработка изображений, пожалуйста, попробуйте позже",
+    "resultsExported": "Экспорт результатов",
+    "confirmCloseCurrentConsultation": "Вы действительно хотите закрыть текущую консультацию и начать новую?",
+    "recordingInterrupted": "Запись еще не закончена",
+    "inputExistedTerm": "Пожалуйста, введите имя существующего словаря",
+    "noEntrys": "Нет записей",
+    "leftNeck": "Левая шея",
+    "rightNeck": "Правая шея",
+    "reportList": "Список отчётов",
+    "imageUnidentifiedCarotidArtery": "Неотмеченное изображение сонной артерии",
+    "referralHistory": "История направлений",
+    "referralRequest": "Запрос на направление",
+    "calibrationLine": "Калибровочная линия",
+    "referralReport": "Отчёт по направлению",
+    "agree": "Согласен",
+    "reportNoInit": "Отчет еще не сформирован, пожалуйста, попробуйте позже.",
+    "shareTerminalSuccess": "Успешное общее использование устройства",
+    "WithDrawn": "Отозвано",
+    "pending": "В ожидании",
+    "addReportTag": "Добавить тег к отчету",
+    "addTag": "Добавить тег",
+    "natureOfLesion": "Характер поражения",
+    "addedTags": "Добавленные теги",
+    "lesionClassification": "Классификация поражения",
+    "lesionClassificationExist": "Этот класс уже существует.",
+    "notFoundTag": "Тег не найден.",
+    "canNotTag": "Персональные теги не поддерживаются.",
+    "selectTags": "Выберите теги для добавления.",
+    "searchOrSelectTags": "Поиск или выбор тегов",
+    "searchOrSelectClassification": "Поиск или выбор классификации.",
+    "doNotRemind": "Больше не напоминать.",
+    "hasWithDrawn": "Отозвано",
+    "timedOut": "Время вышло",
+    "accepted": "Принято",
+    "transferDoctor": "Передающий врач",
+    "transferOrganization": "Госпитализирован",
+    "transferApply": "Отправитель",
+    "transferTime": "Время перевода",
+    "transferSubjectMatter": "Причины перевода",
+    "transferOutAgency": "Переведено из",
+    "patientDisplayName": "Имя пациента",
+    "transferredOut": "Переведено",
+    "refuse": "Отказываться",
+    "refused": "Отклонено",
+    "myPatient": "Мои пациенты",
+    "referPatient": "Перевод лечения",
+    "patientName": "Имя",
+    "patientFrom": "Из",
+    "noEntry": "Термины не найдены",
+    "messageShare": "Поделиться через СМС",
+    "shortMessage": "СМС",
+    "qrCode": "QR-код",
+    "smsShare": "[Flyinsono] Генерируется отчет о проверке {0}, щелкните {1}, чтобы просмотреть",
+    "noOpenWx": "Невозможно открыть WeChat. Пожалуйста, проверьте, установлен ли WeChat",
+    "moments": "Друзья ВКонтакте",
+    "wechatFriend": "Друзья WeChat",
+    "noReport": "Нет отчета",
+    "aiReport": "AI отчет",
+    "ultrasoundReport": "Ультразвуковой отчет",
+    "editThesaurus": "Редактировать",
+    "thesaurusInput": "Пожалуйста, введите запись",
+    "selfCreatedThesaurus": "Самостоятельное создание",
+    "thesaurusNameInputTip": "Введите название словаря",
+    "defualt": "По умолчанию",
+    "organization": "Больница",
+    "selfCreated": "Самосделка",
+    "humanAlong": "Для человека",
+    "beastAlong": "Для животных",
+    "serveObj": "Объект сервиса",
+    "useFisDefaultThesaurus": "Используйте шаблон словаря Flyinsono по умолчанию",
+    "createThesaurus": "Создать словарь",
+    "description": "Описание",
+    "summary": "Заключение",
+    "creations": "Создание",
+    "platFormDefault": "Стандартная платформа",
+    "updateVocCat": "Обновить категорию",
+    "createVocCat": "Создать категорию",
+    "inputCatName": "Введите название категории",
+    "categoryName": "Название категории",
+    "selectUpperCat": "Выберите верхнюю категорию",
+    "vocEdit": "Редактировать запись",
+    "vocAdd": "Добавить запись",
+    "vocDetails": "Детали записи",
+    "descriptionInput": "Пожалуйста, введите описание",
+    "concolusionInput": "Пожалуйста, введите вывод",
+    "title": "Заголовок",
+    "message": "Сообщение",
+    "addSuccess": "Успешно добавлено",
+    "addFailed": "Добавление не удалось",
+    "updateVocSuccess": "Успех обновления тезауруса",
+    "updateVocBaseSuccess": "Успешное обновление тезауруса больницы",
+    "updateFailed": "Обновление не удалось",
+    "delteVocBaseConfirm": "Вы уверены, что хотите удалить этот тезаурус?",
+    "deleteVocBaseSuccess": "Успешно удалённый тезаурус",
+    "deleteFailed": "Удаление не удалось",
+    "deleting": "Удаление...",
+    "deleteOrgVocBaseConrim": "Вы уверены, что хотите удалить тезаурус этой больницы?",
+    "creatFailed": "Создать не удалось",
+    "deleteVocConfirm": "Вы уверены, что хотите удалить эту запись?",
+    "deleteVocSuccess": "Запись успешно удалена",
+    "toast4NotEditYet": "Пожалуйста, отредактируйте перед отправкой изменений.",
+    "vocabulary": "Вокабуляр",
+    "importVoc": "Импортировать вокабуляр",
+    "vocBaseName": "Название базы словаря",
+    "upperCategory": "Родительская категория",
+    "selfCreatedVoc": "Пользовательский словарь",
+    "createVoc": "Создать запись",
+    "patientNamePlaceholder": "Введите имя пациента.",
+    "selectPatientToAssociate": "Выберите связанного пациента",
+    "associateSuccess": "Успешная ассоциация",
+    "associateFail": "Ассоциация не удалась",
+    "noCheckToHandle": "У пользователя нет экзаменов для обработки.",
+    "export": "Экспорт",
+    "exportSuccess": "Экспорт успешен",
+    "deletePatientSuccess": "Успешное удаление пациента",
+    "searchPatient": "Поиск",
+    "createPatient": "Создать пациента",
+    "createPatientShort": "Создать",
+    "createCase": "Создать",
+    "noMore": "Больше нет результатов.",
+    "petName": "Имя питомца",
+    "ownerPhone": "Телефонный номер владельца",
+    "otherInfo": "Другая информация",
+    "petId": "Номер ID питомца",
+    "notFill": "Не заполнено",
+    "age": "Возраст",
+    "gender": "Пол",
+    "socialSecurityCardId": "Номер социальной защиты",
+    "type": "Вид",
+    "variety": "Разновидность",
+    "previous": "Предидущая запись",
+    "previousPage": "Предыдущая страница",
+    "next": "Следующая запись",
+    "nextPage": "Следующая страница",
+    "associateCheck": "Обследование",
+    "associateReport": "Связанный отчет",
+    "patientDetail": "Детали пациента",
+    "caseDetail": "Детали дела",
+    "checkReport": "Отчет об обследовании",
+    "checkReportShort": "Отчет об обследовании",
+    "checkRecord": "Записи обследования",
+    "checkRecordShort": "Записи обследования",
+    "scanImage": "Изображения сканирования",
+    "associatePatient": "Связанный пациент",
+    "patientNameToAssociatePlaceholder": "Введите имя пациента, чтобы связать его с делом",
+    "selectOperation": "Выберите необходимое действие.",
+    "associateCheckToCase": "Связать обследование: связать текущее обследование с этим делом",
+    "moveImage": "Переместить изображения",
+    "moveImageToCheck": "Переместите изображения сканирования в выпущенные обследования этого дела",
+    "time": "Время",
+    "deliveryDevice": "Устройство для отправки",
+    "selectCheck": "Выберите обследование для связывания.",
+    "bindPatient": "Связать пациента",
+    "cloudImage": "Образы в облаке",
+    "cloudImageShort": "Облако",
+    "localImage": "Локальные изображения",
+    "checkItem": "Пункты обследования",
+    "checkDoctor": "Врач, проводящий обследование",
+    "viewReport": "Просмотреть отчет",
+    "toScan4Label": "Ожидает сканирования",
+    "scanned4Label": "Сканировано",
+    "imageUploaded4Label": "Загружено",
+    "reported4Label": "Отчет подготовлен",
+    "notFinished4Label": "Не завершено",
+    "viewDetail": "Просмотреть детали",
+    "recentCheck": "Недавние обследования",
+    "registered": "Зарегистрировано",
+    "notRegistered": "Не зарегистрировано",
+    "idCard": "Номер удостоверения личности",
+    "createCheck": "Создать обследование",
+    "associate": "Связано",
+    "associateUserTip": "После связывания пациент может быть зарегистрирован как официальный пациент на платформе, что позволит точно идентифицировать его и отслеживать историю диагностики.",
+    "transfer": "Перенаправление",
+    "years": "года",
+    "month": "месяц",
+    "week": "неделя",
+    "day": "день",
+    "years4display": "год",
+    "month4display": "мес",
+    "week4display": "нед",
+    "day4display": "д",
+    "notImplemented": "Не реализовано",
+    "check": "Экзамен",
+    "image": "Изображения",
+    "selectInitTime": "Выберите начальное время",
+    "selectEndTime": "Выберите время окончания",
+    "registerStatus": "Статус регистрации",
+    "searchContact": "Поиск контакта",
+    "cloudReport": "Облачный отчет",
+    "associateImage": "Связанные изображения",
+    "preview": "Предварительный просмотр",
+    "print": "Печать",
+    "share": "Поделиться",
+    "creating": "Создание...",
+    "createSuccess": "Успешное создание",
+    "selectDeliveryDevice": "Выбор устройства для отправки",
+    "selectCheckItem": "Выберите элементы для проверки",
+    "select": "Пожалуйста выберите",
+    "selectTime": "Выбор времени",
+    "editSuccess": "Успешное редактирование",
+    "writeReport": "Напишите отчет",
+    "editPatient": "Редактировать пациента",
+    "editCase": "Редактировать дело",
+    "submitSuccess": "Успешная отправка",
+    "submitFail": "Ошибка при отправке",
+    "defaultText": "По умолчанию",
+    "pet": "Питомец",
+    "auxiliaryConsultation": "Вспомогательная консультация",
+    "selectTemplate": "Выберите шаблон",
+    "wordSelectBox": "Выберите термины диагностики",
+    "selectWordLibrary": "Пожалуйста, выберите тезаурус",
+    "selectWord": "Термины",
+    "searchKeyword": "Поиск",
+    "conclusion": "Заключение",
+    "createWordClass": "Создать",
+    "parentClass": "Верхний класс",
+    "endScan": "Закончить экзамен",
+    "finishScan": "Закончить экзамен или нет?",
+    "noScanImage": "Имидж сканирования не доступен!",
+    "removePatientConfirm": "Подтвердите удаление пациента?",
+    "reporter": "Отчет подготовлен:",
+    "selectVoc": "Выбор тезауруса:",
+    "orgTemplate": "Шаблон больницы",
+    "personalTemplate": "Личный шаблон",
+    "finishing": "Завершение...",
+    "hint4patientNotFound": "Пациент {0} не найден. Создать новое дело с этим именем?",
+    "scanDate": "Дата сканирования: {0}",
+    "breast": "Грудь",
+    "liver": "Печень",
+    "cholecyst": "Желчный пузырь",
+    "kidney": "Почка",
+    "spleen": "Селезенка",
+    "noNeedAIYet": "AI диагностика пока не требуется",
+    "didNotHandle": "Необработанный",
+    "didNotIdentify": "Нераспознанный",
+    "noAbnormal": "Нормальный",
+    "benign": "Возможно доброкачественный",
+    "malignant": "Злокачественная",
+    "benignWithMalignant": "Возможно злокачественный",
+    "clickAndSelectImage": "Нажмите и выберите изображение",
+    "scanQrCodeToShareReport": "Сканируйте QR-код, чтобы поделиться отчетом",
+    "scanQrCodeToShareImage": "Сканируйте QR-код, чтобы поделиться изображением",
+    "copyLink": "Копировать ссылку",
+    "copySuccess": "Копирование завершено",
+    "errorScanData": "Ошибка фильтрации времени",
+    "downloading": "Загрузка...",
+    "packaging": "Упаковка...",
+    "exportFinished": "Экспорт завершен! Проверьте рабочий стол.",
+    "exportFinishedWithSlectedPath": "Экспорт завершен!",
+    "exportAbortingTip": "Подтвердите отмену экспорта",
+    "exportTime": "Время экспорта",
+    "exportItems": "Товары для экспорта",
+    "examReport": "Чек-листы",
+    "scanImageData": "Сканирование изображения",
+    "batchExport": "Экспорт",
+    "patientExportSelectionTip": "Пожалуйста, выберите пациентов для экспорта.",
+    "selectAll": "Выделить все",
+    "hasNoChooseAgain": "Не найдено доступных врачей для направления, выберите другую больницы.",
+    "measure": "Диагностика изображений",
+    "previewReport": "Предварительный просмотр отчета",
+    "editReport": "Редактировать отчет",
+    "pleaseSelect": "Пожалуйста, выберите {0}",
+    "restoreCache": "Восстановлено предыдущее не завершенное содержание",
+    "speechInput": "Голосовой ввод",
+    "startRecording": "Начать запись",
+    "endRecording": "Окончание записи",
+    "identifying": "Идентификация голоса...",
+    "recording": "Запись",
+    "endSeconds": "Автоматическое завершение через {0} секунд",
+    "invalidIDInputError": "Неверный ввод номера удостоверения личности",
+    "maxParticipantLimit": "Максимальное количество участников - 6 человек",
+    "startScan": "Начать сканирование",
+    "scanOcuppiedTip": "Сканирование занято",
+    "scanOcuppiedDetailTip": "Предыдущая проверка еще не завершена. Хотите ли вы автоматически завершить ее и начать текущее сканирование?",
+    "startScanSuccess": "Сканирование началось успешно",
+    "isAutoCreateExam": "Автоматическое создание экзамена"
+  },
+  "organization": {
+    "privacyProtection": "Защита персональных данных",
+    "orgSetting": "Настройки больницы",
+    "upperOrg": "Головная больница",
+    "orgName": "Название больницы",
+    "orgLogo": "Логотип больницы",
+    "serveObj": "Объект услуги",
+    "locatedArea": "Район, к которому относится",
+    "avatar": "Аватар",
+    "nickName": "Никнейм",
+    "positionIdentity": "Идентификация по месту работы",
+    "workTitle": "Профессиональное звание",
+    "orgNameInputTip": "Введите название больницы.",
+    "areaSelectionTip": "Выбрать регион",
+    "orgSelectionTip": "Выбор больницы",
+    "modifyWorkTitle": "Изменить профессиональное звание",
+    "addWorkTitle": "Добавить профессиональное звание",
+    "workTitleName": "Название профессионального звания",
+    "basicInfo": "Основная информация",
+    "orgStructureInfo": "Информация о структуре организации",
+    "department": "Отделение",
+    "orgStructure": "Структура организации",
+    "editOrgStructure": "Изменить структуру организации",
+    "addOrgStructure": "Добавить структуру организации",
+    "departmentName": "Название отделения",
+    "selectDepartmentTip": "Выберите отделение",
+    "selectValueDepartment": "Отделение",
+    "selectValueOrganization": "Больница",
+    "selectWorkPostIdentify": "Выберите идентификацию по месту работы",
+    "workTitleSelectionTip": "Выберите профессиональное звание",
+    "loadOrgInfoFailedTip": "Сбой при загрузке информации организации!",
+    "selectSuperiorOrg": "Выберите головную больницу",
+    "completRegionInfo": "Пожалуйста, заполните информацию о регионе.",
+    "saveSuccess": "Успешно сохранено",
+    "fullfillOrgInfo": "Заполните информацию о больнице",
+    "fullfillAreaInfo": "Пожалуйста, заполните информацию о регионе.",
+    "fullfillOrgName": "Пожалуйста, заполните название больницы.",
+    "deleteOrNot": "Подтвердите удаление",
+    "SelectUserToRemove": "Select the users to be removed",
+    "removing": "Удаление",
+    "departmentNamePlaceholder": "Пожалуйста, введите название отделения",
+    "FillInCompletely": "Fill in completely.",
+    "titleNamePlaceholder": "Введите название профессионального звания.",
+    "messgaeConfirm": "Подтверждение информации!",
+    "removeMemberConfirm": "Remove them or not?",
+    "removeMembersConfirm": "Вы выбрали {0} участников, вы действительно хотите удалить их из больницы?",
+    "deleteMemberConfirm": "Вы выбрали {0} участников, вы уверены, что хотите их удалить?",
+    "deleteOrganizationConfirm": "Подтвердить удаление структуры организации",
+    "deleteProfessionalConfirm": "Подтвердите удаление профессионального звания?"
+  },
+  "measure": {
+    "cancelFullScreen": "Отменить полноэкранный режим",
+    "carotidAiTips": "Напоминание: Автоматическое измерение может быть неточным и предназначено только для справки",
+    "featureAnalysis": "Анализ признаков",
+    "aiDiagnosticResults": "Результаты диагностики AI",
+    "diseaseLabels": "Метки заболеваний",
+    "isLesionSize": "Размер поражения",
+    "possibility": "Возможность",
+    "polycysticLiver": "Поликистозная болезнь печени",
+    "cirrhosis": "Цирроз",
+    "panisodicChangesLiverDiffuseLesions": "Ультразвуковые изменения в рассеянном поражении печени",
+    "fattyLiver": "Жировой гепатоз",
+    "liverCancerMayOccur": "Возможность рака печени",
+    "liverCysts": "Киста печени",
+    "hepaticHemangioma": "Гемангиома печени",
+    "intrahepaticStrongEchoFoci": "Внутрипеченочные кальцинаты",
+    "lipoma": "Липома",
+    "noSignificantAbnormalitiesWereSeen": "Значительных нарушений не обнаружено",
+    "arrowhead": "Стрелка",
+    "unit": "Единица измерения",
+    "length": "Длина",
+    "showAi": "Показать AI",
+    "hideAi": "Скрыть AI",
+    "guideCalibration": "Калибровка по гайдлайну",
+    "measureImage": "Измерение изображения",
+    "measureImageShort": "Измерение",
+    "measureToolConfig": "Конфигурация инструмента измерения",
+    "measureToolSelect": "Выбор инструмента измерения",
+    "selectedMeasureTool": "Выбранное измерение",
+    "selectedMeasureToolConfig": "Конфигурация выбранного измерения",
+    "currentMeasureTool": "Текущее измерение",
+    "selectMeasureMethod": "Выбор метода измерения",
+    "selectCalculateResultAndUnit": "Результат и единица измерения",
+    "pictureQueue": "Изображения",
+    "toolbox": "Меры",
+    "selectMeasureItem": "Выбор пункта измерения",
+    "style": "Стиль",
+    "config": "Конфиг",
+    "measureTool": "Инструмент измерения",
+    "annotationTool": "Инструмент аннотации",
+    "ruler": "Линейка",
+    "rulerType": "Тип линейки",
+    "rulerSize": "Размер линейки",
+    "measureRulerSize": "Размер линейки при измерении",
+    "resultWindowConfig": "Конфигурация окна результатов",
+    "showResultWindow": "Показать окно результатов",
+    "fontSize": "Размер шрифта",
+    "panelPosition": "Позиция панели",
+    "topLeft": "Вверху слева",
+    "bottomLeft": "Внизу слева",
+    "topRight": "Вверху справа",
+    "bottomRight": "Нижний правый",
+    "display": "Показать",
+    "showRulerLine": "Показать линейку",
+    "keepMeasureOnImage": "Сохранить измерение на изображении",
+    "showDepthMeasureLine": "Показать линии глубины измерения",
+    "showSimpleAnnotation": "Показать простые аннотации",
+    "autoAdjustCursor": "Автоматическая корректировка курсора",
+    "autoCaptureRange": "Автоматический захват диапазона измерения",
+    "annotationFontSize": "Размер шрифта аннотации",
+    "showSubItemResultInMeasureWorkSheet": "Отображение результатов подпунктов в таблице измерений",
+    "showMeasureAnnotation": "Показать аннотацию измерения",
+    "selectAnnotationFontSize": "Выберите размер шрифта аннотации",
+    "arrow": "Стрелка",
+    "brightness": "Яркость",
+    "contrast": "Контрастность",
+    "clear": "Чисто",
+    "fullScreen": "Полноэкранный режим",
+    "shape": "Форма",
+    "orientation": "Ориентация",
+    "echoPattern": "Тип эха",
+    "lesionBoundary": "Граница поражения",
+    "margin": "Маржа",
+    "calcification": "Кальцинаты",
+    "lesionSize": "Размер поражения",
+    "oval": "Овал",
+    "round": "Круглый",
+    "irregular": "Нерегулярный",
+    "parallel": "Параллельно",
+    "nonParallel": "Непараллельно",
+    "anechoic": "Анэхогенно",
+    "hypoechoic": "Гипоэхогенно",
+    "isoechoic": "Изоэхогенно",
+    "hyperechoic": "Гипер эхогенно",
+    "complex": "Комплексное эхо",
+    "strongechoic": "Сильное эхо",
+    "abruptInterface": "Резкий интерфейс",
+    "echogenicHalo": "Эхогенное сияние",
+    "circumscribed": "Ограниченный",
+    "nonCircumscribed": "Неограниченный",
+    "noCalcifications": "Без кальцинатов",
+    "macrocalcifications": "Макрокальцинаты",
+    "calcificationsInMass": "Кальцинаты в опухоли",
+    "calcificationsOutOfMass": "Кальцинаты вне опухоли",
+    "measureSpecifiedFace": "Измерение выбранной области в 2D",
+    "carotid3DMode": "3D режим",
+    "videoMode": "Видео режим",
+    "resetTone4Btn": "Сброс",
+    "saveLocation": "Сохранить местоположение",
+    "screenshotSavedSuccessfully": "Снимок экрана успешно сохранен",
+    "AddCcomment": "Добавить комментарий",
+    "addCommentfail": "Не удалось добавить комментарий",
+    "measurementMode": "Режим измерения",
+    "annotationMode": "Режим аннотации",
+    "dragLeftAddComment": "Перетащите влево, чтобы добавить комментарий",
+    "text": "Текст",
+    "distance": "Расстояние",
+    "circumference": "Периметр",
+    "area": "Площадь",
+    "frameLoadTimeout": "Время ожидания соединения истекло, попробуйте еще раз",
+    "frameLoadError": "Ошибка загрузки, пожалуйста, попробуйте еще раз",
+    "collapseGroup": "Свернуть",
+    "expandGroup": "Развернуть",
+    "autoRunIntimaDetection": "Автоматический запуск детекции интимы",
+    "playLocationFrameCountLabel": "Количество кадров:",
+    "playLocationDurationLabel": "Продолжительность:",
+    "annotationDeleted": "{0} был удален",
+    "dragHereToDelete": "Перетащите сюда, чтобы удалить",
+    "releaseToDelete": "Отпустите, чтобы удалить",
+    "threeDmove": "Переместить",
+    "threeDcut": "Резать",
+    "threeDaiCut": "Резка AI",
+    "threeDreset": "Сбросить",
+    "threeDdelete": "Удалить",
+    "threeDrotate": "Повернуть",
+    "rightClickToCancel": "Правый клик, чтобы отменить текущую операцию",
+    "thirdImageNeedCalibratingTips": "Пожалуйста, сначала откалибруйте изображение, затем измерьте",
+    "annotationCannotBeEmpty": "Аннотация не может быть пустой",
+    "measureStyleConfig": "Настройка стиля измерения",
+    "resetToDefaultAnnotation": "Вернуться к изначальным аннотациям",
+    "loopPlayback": "Циклическое воспроизведение",
+    "thyroidEchogenicFoci": "Эхогенные очаги",
+    "liverEchoTexture": "Эхоструктура печени",
+    "regular": "Правильная",
+    "homogeneous": "Гомогенность",
+    "heterogeneous": "Неравномерность",
+    "presenceDiffuseDisease": "Наличие диффузного заболевания",
+    "widerThanTall": "Шире, чем выше",
+    "tallThanWider": "Выше, чем шире",
+    "smooth": "Гладкий",
+    "illDefined": "Плохо определено",
+    "lobulated": "Подразделено на доли",
+    "extraThyroidalExtension": "Экстращитовидное расширение",
+    "noCifications": "Без кальцификации",
+    "coarsecalcifications": "Грубые кальцификации",
+    "microcalcifications": "Микрокальцификации",
+    "noMatchingMeasurement": "Отсутствуют подходящие измерения",
+    "moreMeasurementItems": "Больше измерений",
+    "unsupportedMeasurementMode": "Измерения не поддерживаются в текущем режиме",
+    "unsupportedMeasurementArea": "Этот вид измерения не поддерживается для текущей области",
+    "fineTuneStartPoint": "Тонкая настройка начальной точки",
+    "temporarilyUnsupportedMeasurement": "Временно не поддерживается измерение",
+    "aiImage": "AI изображение",
+    "resetAiResult": "Сброс результатов AI",
+    "saveEditResult": "Сохранить результаты редактирования",
+    "editMode": "Режим редактирования:",
+    "dragMode": "Режим перетаскивания",
+    "drawOutlineMode": "Режим рисования контура",
+    "editAiResult": "Редактировать результаты AI"
+  },
+  "upload": {
+    "editAvatar": "Редактировать Аватар",
+    "uploadImage": "Загрузить изображение",
+    "takePhoto": "Сделать фото",
+    "selectFromAlbum": "Выбрать из альбома",
+    "selectAgain": "Выбрать снова",
+    "uploadFailedUnsupportedFileType": "Загрузка не удалась, обнаружен неподдерживаемый тип файла. Пожалуйста, выберите снова."
+  },
+  "realTimeConsultation": {
+    "exitConsultation": "Выход из консультации",
+    "noVolumeAdjustmentChannel": "Нет доступных каналов для регулировки громкости",
+    "processingImage": "Обрабатывается изображение, повторите попытку позже",
+    "emergencyCall": "Экстренный вызов",
+    "emergencyConfig": "Экстренная конфигурация",
+    "startEmergency": "Начать экстренное обследование",
+    "selectExpert": "Пожалуйста, выберите экстренного специалиста:",
+    "selectDevice": "Пожалуйста, выберите оборудование для экстренного обследования:",
+    "emergencyEquipment": "Экстренное оборудование",
+    "setEmergencyUltrasoundFirst": "Пожалуйста, сначала настройте экстренный ультразвук",
+    "goToSettings": "Перейти к настройкам",
+    "emergency": "Экстренная",
+    "consultationScreenshot": "Скриншот консультации",
+    "consultationRoom": "Операционная",
+    "confirmLeaveConsultation": "Вы уверены, что хотите покинуть консультацию?",
+    "scanningTechnique": "<< Метод сканирования",
+    "devicePicture": "<< Ультразвуковое изображение",
+    "consultationDetail": "Детали консультации",
+    "joinConsultation": "Присоединиться к консультации",
+    "appraise": "Оценить",
+    "noAppraise": "Оценок нет",
+    "acceptedInvitation": "Приглашение принято",
+    "declinedInvitation": "Приглашение отклонено",
+    "acceptedTheInvitation4Toast": "Вы приняли приглашение",
+    "declinedTheInvitation4Toast": "Вы отклонили приглашение",
+    "changeToAcceptInvitation": "Переключиться на принятие приглашения",
+    "changeToDeclineInvitation": "Переключиться на отказ от приглашения",
+    "declineInvitation": "Отклонить приглашение",
+    "acceptInvitation": "Принять приглашение",
+    "followUp": "Подписаться",
+    "pleaseWriteFollowUp": "Пожалуйста, введите содержание подписки",
+    "applied": "Подана заявка",
+    "consultationList": "Список консультаций",
+    "callAgain": "Позвонить снова",
+    "calling": "Звонок",
+    "cancelCall": "Отменить вызов",
+    "callCanceled": "Звонок отменен",
+    "busy": "Занято",
+    "hasLeft": "Ушел",
+    "starttConsultation": "Начать консультацию",
+    "endConsultation": "Завершить консультацию",
+    "fullRecording": "Запись полного протокола",
+    "endRecording": "Завершить запись",
+    "lineSegment": "Сегмент линии",
+    "paintBrush": "Кисть для рисования",
+    "tuningParameter": "Настройка параметров на расстоянии",
+    "tuningParameter4btn": "НР",
+    "record": "Запись",
+    "searchRecords": "Поиск записей",
+    "appointmentConsultation": "Предварительная консультация",
+    "consultationImage": "Консультационный образ",
+    "consultationImageShort": "Консультация",
+    "consultationRecord": "Запись консультации",
+    "consultationReport": "Отчет по консультации",
+    "consultationFollowUp": "Контроль после консультации",
+    "applicant": "Заявитель",
+    "toBeReviewed": "Ожидает проверки",
+    "patientInformation": "Информация о пациенте",
+    "pastMedicalHistory": "Прошлое медицинское обследование",
+    "appointmentInformation": "Информация о встрече",
+    "consultationEquipment": "Оборудование для консультации",
+    "consultationHours": "Время консультации",
+    "inspectionPosition": "Место осмотра",
+    "nameOfDisease": "Название болезни",
+    "consultationInstitution": "Консультативное учреждение",
+    "competentExperts": "Эксперты консультации",
+    "applicantMechanism": "Механизм заявителя",
+    "requiredItemsNotCompleted": "Обязательные поля не заполнены",
+    "applicantpeople": "Заявитель",
+    "operator": "Оператор",
+    "expertAssistant": "Ассистент эксперта",
+    "preliminaryDiagnosis": "Предварительный диагноз",
+    "confirmApplication": "Подтверждение заявления",
+    "applyForAppointment": "Назначение на консультацию",
+    "pleaseEnterCreatedPatientName": "Пожалуйста, введите имя созданного пациента",
+    "pleaseSelectPatient": "Пожалуйста, выберите пациента",
+    "pleaseSelectPatientForConsultation": "Пожалуйста, выберите пациента для консультации",
+    "pleaseSelectConsultationEquipment": "Пожалуйста, выберите оборудование для консультации",
+    "pleaseSelectScanningDoctor": "Пожалуйста, выберите врача для сканирования",
+    "pleaseSelectInspectionSite": "Пожалуйста, выберите место осмотра",
+    "pleaseSelectConsultationInstitution": "Пожалуйста, выберите консультационное учреждение",
+    "pleaseSelectCompetentExpert": "Пожалуйста, выберите эксперта для консультации",
+    "pleaseSelectApplicant": "Пожалуйста, выберите заявителя",
+    "realTimeDiagnosis": "Диагностика в реальном времени",
+    "sureCancelCurrentConsultation": "Вы уверены, что хотите отменить текущую консультацию?",
+    "requested": "Запросил",
+    "withdrawn": "Снят с обсуждения",
+    "rejected": "Отклонено",
+    "toBeStarted": "Предстоит начать",
+    "haveInHand": "В процессе",
+    "toBeReported": "Ожидается отчет",
+    "closed": "Закрыто",
+    "withdrawalSucceeded": "Успешное отзывание",
+    "withdraw": "Отозвать",
+    "timeOfAppointment": "Время встречи",
+    "applicationClassification": "Классификация заявок",
+    "iApplied": "Я подал заявку",
+    "iOrganized": "Я организовал",
+    "iInvolved": "Я участвовал",
+    "pleaseSelectCategory": "Пожалуйста, выберите категорию",
+    "groundsForRefusal": "Основания для отказа",
+    "rejectApplication": "Отклонить заявку",
+    "reasonsForRefusal": "Причины отказа",
+    "reasonsCannotBeNull": "Причины не могут быть пустыми",
+    "notice": "Уведомление",
+    "noticeContent": "Консультация начнется через 15 минут, пожалуйста, присоединяйтесь!",
+    "expertInCharge": "Главный специалист",
+    "iknow": "Я знаю",
+    "minBeforeStart15": "15 минут до начала",
+    "minBeforeStart30": "30 минут до начала",
+    "minBeforeStart60": "1 час до начала",
+    "beforeStart1day": "за 1 день до начала",
+    "inAppReminder": "Напоминания в приложении",
+    "SMSReminder": "СМС-напоминание",
+    "dateTime": "Дата и время",
+    "assistantPhysician": "Ассистент врача",
+    "participants": "Участники",
+    "consultationDescription": "Описание консультации",
+    "reminderTime": "Время напоминания",
+    "reminderMehod": "Способ напоминания",
+    "chooseExpert": "Пожалуйста, выберите специалиста",
+    "addParticipants": "Добавить участников",
+    "hintText": "В пределах 100 символов",
+    "timeErrorNotice": "Время консультации не может быть раньше времени начала!",
+    "dateErrorNotice": "Время консультации должно быть позже текущего времени!",
+    "approveConsultationFaild": "Не удалось отправить заявку на консультацию",
+    "noExpertsToChooseFrom": "Нет экспертов для выбора",
+    "chooseParticipants": "Пожалуйста, отметьте участников",
+    "noAssistant": "Не указано",
+    "timeErrorNoticeEqual": "Время окончания консультации не может быть равно времени начала!",
+    "addUpTo3People": "Максимум 3 человека",
+    "addUpTo4People": "Максимум 4 человека",
+    "theUpperLimitHasBeenReached": "Достигнут предел числа участников, добавление невозможно",
+    "accept": "Принять",
+    "scanDoctor": "Врач сканирования",
+    "thisInstitution": "Эта больница",
+    "createApplication": "Создать заявку",
+    "notSet": "Не установлено",
+    "unsatisfactory": "Неудовлетворительно",
+    "satisfactory": "Удовлетворительно",
+    "general": "В общем",
+    "dateConsultation": "Дата консультации",
+    "consultationEvaluation": "Оценка консультации",
+    "uploader": "Загрузчик:",
+    "followUpPerson": "Следующий",
+    "followUpTime": "Время следования",
+    "followUpRecord": "Запись последовательности",
+    "previous": "Предыдущий",
+    "next": "Следующий",
+    "startTime": "Время начала",
+    "selectStartTime": "Выберите время начала",
+    "endTime": "Время окончания",
+    "consultationStatus": "Состояние консультации",
+    "selectConsultationEvaluation": "Выберите оценку консультации",
+    "selectConsultationStatus": "Выберите статус консультации",
+    "cannotAddVisit": "Консультация еще не завершена, следующий визит невозможен",
+    "cannotAddEvalutation": "Консультация еще не завершена, оценка невозможна",
+    "viewComments": "Посмотреть отзывы",
+    "consultationScore": "Оценка консультации",
+    "evaluationTip": "У вас есть только одна возможность оценить, изменение или удаление оценки невозможны. Пожалуйста, дайте объективную и справедливую оценку консультации.",
+    "negative": "Отрицательный",
+    "medium": "Средний",
+    "good": "Положительный",
+    "captureVid": "Сохранить",
+    "recording": "Идет запись",
+    "longPressToRecord": "Долгое нажатие для начала записи",
+    "captureFailed": "Сбой снимка",
+    "captureSaved": "Снимок сохранен в галерею изображений консультации",
+    "recordFailed": "Не удалось записать",
+    "recordSaved": "Запись сохранена в галерею изображений консультации",
+    "noUsChannel": "Ультразвуковой канал не доступен",
+    "captureImageList": "Список изображений",
+    "noCaptureImage": "Нет изображений",
+    "uploading": "Загрузка...",
+    "uploadFinished": "Загрузка завершена",
+    "pauseFullRecording": "Пауза",
+    "continueFullRecording": "Продолжить",
+    "toAge": "до",
+    "male": "Мужчина",
+    "female": "Женщина",
+    "errorFilteringAge": "Ошибка при фильтрации по возрасту",
+    "consultationExport": "Экспорт консультации",
+    "exporting": "Экспорт...",
+    "exportFailed": "Не удалось экспортировать",
+    "exportConsultationRecords": "Экспорт записей консультации",
+    "exportConsultationImage": "Экспорт изображений консультации",
+    "exportConsultationReport": "Экспорт отчета консультации",
+    "probesAndApplications": "Пробки и приложения",
+    "expired": "Истекший",
+    "checkPartNotEmpty": "Пользовательский осмотр не может быть пустым",
+    "createPatientConfirmWithDuplicateName": "Пациент с таким именем уже существует. Продолжить создание?",
+    "validateUniquePart": "Пользовательский осмотр не может быть дублирован"
+  },
+  "notification": {
+    "consultationInvitation": "{0} приглашает вас на консультацию",
+    "detail": "Подробнее",
+    "showAll": "Посмотреть все",
+    "expertName": "Эксперт консультации",
+    "expertNameWithBrackets": "(Эксперт консультации)",
+    "rejectReason": "Причина отказа",
+    "applyHospital": "Заявочная больница",
+    "sysNotification": "Системные уведомления",
+    "consultationTime": "Время консультации",
+    "receiveConsultationApply": "{0} отправил вам запрос на консультацию!",
+    "receiveConsultationApply4Mobile": "{0} отправил вам запрос на консультацию, пожалуйста, обработайте его своевременно!",
+    "someoneRejectYourConsultation": "{0} отклонил ваш запрос на консультацию!",
+    "someoneAcceptYourConsultation": "{0} принял ваш запрос на консультацию!",
+    "consultationWillStartIn": "Консультация начнется через {0}, авшалуйста присоединитесь вовремя!",
+    "consultationStarted": "Консультация началась!",
+    "receiveConsultationInvitation": "{0} пригласил вас на консультацию!",
+    "receiveConsultationInvitation4Mobile": "{0} пригласил вас на консультацию, пожалуйста обработайте это своевременно!",
+    "someoneRejectYourInvitation": "{0} отклонил ваше приглашение на консультацию!",
+    "someoneAcceptYourInvitation": "{0} принял ваше приглашение на консультацию!",
+    "inviteSomeoneToConsultation": "Приглашено {0} человек, {1} приняли",
+    "closeAll": "Закрыть все ({0})",
+    "notification": "Уведомление",
+    "markAllAsRead": "Отметить все как прочитанное",
+    "readed": "Прочитано",
+    "unread": "Непрочитано",
+    "consultationNotification": "Уведомление о консультации",
+    "unknownType": "Неизвестный тип",
+    "messageReminder": "Напоминание о сообщении",
+    "messageReminderFromFlyinsono": "Напоминание о сообщении от Flyinsono",
+    "consultationRequestForm": "Форма заявки на консультацию",
+    "noUnreadMessages": "Нет непрочитанных сообщений",
+    "allMarkedAsRead": "Все отмечено как прочитанное"
+  },
+  "calendar": {
+    "calendarView": "Просмотр календаря",
+    "searchSchedule": "Искать расписание",
+    "calendarSetting": "Настройки календаря",
+    "todoPlaceholder": "Ведутся работы",
+    "singleToday": "С",
+    "today": "Сегодня",
+    "singleMonday": "Пн",
+    "singleTuesday": "Вт",
+    "singleWednesday": "Ср",
+    "singleThursday": "Чт",
+    "singleFriday": "Пт",
+    "singleSaturday": "Сб",
+    "singleSunday": "Вс",
+    "monday": "Понедельник",
+    "tuesday": "Вторник",
+    "wednesday": "Среда",
+    "thursday": "Четверг",
+    "friday": "Пятница",
+    "saturday": "Суббота",
+    "sunday": "Воскресенье",
+    "yearAndMonth": "{1}, {0}",
+    "monthAndDayFormat": "MM/dd",
+    "allDay": "Весь день",
+    "month": "Месяц",
+    "week": "Неделя",
+    "day": "День",
+    "moreItems": "Еще {0} элементов",
+    "day4Duration": "д",
+    "hour4Duration": "ч",
+    "minute4Duration": "м",
+    "second4Duration": "сек"
+  },
+  "laboratory": {
+    "laboratoryName": "Название лаборатории",
+    "uploadProgress": "Процесс загрузки",
+    "uploadOptions": "Опции загрузки",
+    "uploadMethod": "Метод загрузки",
+    "downloadTemplate": "Скачать шаблон",
+    "comprehensiveImageAnalysis": "Комплексный анализ изображений",
+    "imagesAnalyzedIndividually": "Анализ изображений по отдельности",
+    "imageFolderName": "Имя папки с изображениями",
+    "directUpload": "Прямая загрузка",
+    "uploadByTemplate": "Загрузить по шаблону",
+    "pleaseEnterFolderImageName": "Введите имя папки с изображениями",
+    "confirmCancellationUploadOperation": "Подтвердите отмену операции загрузки",
+    "imageAnalysis": "Анализ изображений",
+    "reportAnalysis": "Анализ отчета",
+    "reportPreview": "Просмотр отчета",
+    "upload": "Загрузить",
+    "uploadToFolder": "Загрузить в эту папку",
+    "feifeiAIAnalysisAssistant": "Ассистент по анализу Feifei AI",
+    "dragAndDropUltrasoundImages": "Перетащите сюда изображения или видео с ультразвукового сканирования, чтобы получить результаты анализа Feifei AI",
+    "comprehensiveAnalysisResults": "Результаты комплексного анализа"
+  },
+  "live": {
+    "deviceLive": "Умный контроль",
+    "clickToViewOtherDeviceLive": "Выберите, чтобы изменить другой ультразвук в прямом эфире",
+    "deviceLiveList": "Список ультразвуковых трансляций в прямом эфире",
+    "maxViewCountOfDeviceLive": "Максимальное количество дисплеев ультразвуковых трансляций в прямом эфире на экране",
+    "limitOfMaxLiveSourceCount": "Превышено максимальное количество потоков в прямом эфире, ограниченное платформой!",
+    "tipsOfDeviceOffline": "Устройство не в сети. Пожалуйста, обновите список и повторите попытку.",
+    "scanQrCodeToShareLive": "Сканировать QR-код для публикации прямого эфира"
+  },
+  "remoteControl": {
+    "updatePush": "Обновить рассылку",
+    "selectPatchPackage": "Пожалуйста, выберите пакет патчей",
+    "printerDriverName": "Имя драйвера принтера",
+    "printerBrand": "Бренд принтера",
+    "adaptSystemVersion": "Совместимая версия системы",
+    "supportedPrinterModels": "Поддерживаемые модели принтеров",
+    "size": "Размер",
+    "releaseTime": "Время выпуска",
+    "updateManagement": "Управление пакетами обновлений",
+    "printerDriverManagement": "Управление драйверами принтера",
+    "localPrinterDriverFile": "Локальный файл драйвера принтера",
+    "fileTooLarge": "Выбранный файл слишком большой",
+    "validationFailed": "Проверка не удалась, пожалуйста, выберите правильный файл драйвера принтера",
+    "verificationFailed": "Проверка не удалась",
+    "applicableSystem": "Пригодная система",
+    "applicableSoftware": "Подходящее программное обеспечение",
+    "universal": "Универсальный",
+    "sizeMB": "{0} МБ",
+    "serialNumber": "Серийный номер",
+    "model": "Модель",
+    "softwareVersion": "Версия программного обеспечения",
+    "systemVersion": "Версия системы",
+    "addVersionNumber": "Добавить номер версии",
+    "enterUltrasoundSoftwareVersion": "Пожалуйста, введите номер версии программного обеспечения ультразвукового аппарата",
+    "enterUltrasoundSystemVersion": "Пожалуйста, введите номер версии системы ультразвукового аппарата",
+    "selectAdaptedVersion": "Пожалуйста, выберите подходящую версию",
+    "uploadSuccess": "Загрузка успешна, анализ изображений",
+    "remoteParameterAdjustment": "Настройка параметров удаленно",
+    "probe": "Датчик",
+    "application": "Приложение",
+    "modeSelection": "Выбор режима",
+    "parameterAdjustment": "Регулировка параметров",
+    "addPrinter": "Добавить принтер",
+    "searchPrinter": "Поиск принтеров",
+    "printerSettings": "Настройки принтера",
+    "previousStep": "Предыдущий шаг",
+    "nextStep": "Следующий шаг",
+    "installedPrinters": "Установленные принтеры",
+    "searchAvailablePrinters": "Поиск доступных принтеров",
+    "addPrinterUsingTcpIp": "Добавить принтер с использованием адреса TCP / IP или имени хоста",
+    "enterPrinterHostnameOrIpAddress": "Пожалуйста, введите имя хоста или IP-адрес принтера",
+    "hostnameOrIpAddress": "Имя хоста или IP-адрес",
+    "portName": "Название порта",
+    "invalidIpAddressPleaseEnterAgain": "IP-адрес недействителен, введите заново",
+    "printer": "Принтер",
+    "cloudDriverNotInstalled": "Драйвер облака не установлен",
+    "pushDriver": "Установить драйвер",
+    "paperSize": "Размер бумаги",
+    "paperOrientation": "Ориентация бумаги",
+    "searchCompleted": "Поиск завершен",
+    "searchCompletedNoPrintersAvailable": "Поиск завершен, нет доступных принтеров",
+    "pushFailed": "Отправка не удалась",
+    "pleaseSelectPrinter": "Пожалуйста, выберите принтер",
+    "systemSettings": "Настройки системы",
+    "saveAndExit": "Сохранить и выйти",
+    "test": "Тест",
+    "apply": "Применить",
+    "editUpdatePackage": "Редактировать пакет обновления",
+    "updatePackageName": "Название пакета обновления",
+    "adaptedDevices": "Адаптированные устройства",
+    "adaptedSoftwareVersions": "Адаптированные версии программного обеспечения",
+    "adaptedSystemVersions": "Адаптированные версии системы",
+    "localUpdatePackageFile": "Файл пакета обновления",
+    "pleaseUploadFileFirst": "Пожалуйста, сначала загрузите файл",
+    "fileUploading": "Файл загружается. Пожалуйста, подождите, пока файл не будет успешно загружен, прежде чем отправлять его",
+    "progressBar": "Индикатор прогресса",
+    "selectTimeRange": "Выберите временной интервал",
+    "past24Hours": "Последние 24 часа",
+    "pastWeek": "Последняя неделя",
+    "pastMonth": "Последний месяц",
+    "pastYear": "Последний год",
+    "customTime": "Диапазон пользовательского времени",
+    "pushSuccess": "Успешно отправлено",
+    "useCloudDriver": "Использовать облачный драйвер",
+    "testPrinter": "Принтер теста",
+    "testingPrinter": "Тестовый принтер работает",
+    "testSuccess": "Тест успешно пройден",
+    "downloadedSuccessInstalledPrinter": "Драйвер успешно загружен, установка принтера",
+    "downloadedLogs": "Скачать журналы",
+    "getLogsSuccess": "Журналы успешно получены",
+    "pushPackageSuccess": "Пакет успешно отправлен",
+    "pushPackageFailed": "Не удалось отправить пакет обновления",
+    "deviceCancelDownloading": "Устройство отменяет загрузку и установку пакета",
+    "deviceLogsDownloadingFailed": "Не удалось загрузить пакет журнала устройства",
+    "deviceLogsCancelFailed": "Устройство отменяет загрузку пакета журнала",
+    "deviceActiveDisconnection": "Устройство активно отключается",
+    "deviceTimeoutDisconnection": "Устройство отключено по тайм-ауту",
+    "exitTuning": "Выход из настройки",
+    "pagination": "Страница {0} из {1}",
+    "testFailed": "{0} Тест не удался",
+    "testSucceeded": "{0} Тест успешный",
+    "remoteControl": "Удаленное управление",
+    "getLog": "Получить журнал",
+    "reboot": "Перезагрузить",
+    "probeConnectionFailed": "Проветриватель не подключен",
+    "connecting": "Подключение",
+    "disconnecting": "Отключение",
+    "clientTimeout": "Клиент отключен по тайм-ауту",
+    "selectUpdatePackage": "Выберите пакет обновлений для отправки",
+    "probeControlOff": "Ультразвуковой аппарат не включает удаленное управление, пожалуйста, включите его сначала",
+    "uploading": "Загрузка",
+    "uploadSucceeded": "Загрузка завершена",
+    "uploadFailed": "Загрузка не удалась",
+    "probeInfoEmpty": "Информация об ультразвуковом устройстве отсутствует",
+    "connectionFailed": "Соединение не удалось",
+    "addApp": "Добавить приложение",
+    "hideApp": "Скрыть приложение",
+    "showApp": "Показать приложение",
+    "setDefault": "Сделать по умолчанию",
+    "remark": "Примечание",
+    "visibleApp": "Приложения, видимые на сенсорной панели",
+    "currentDefault": "Текущее приложение по умолчанию",
+    "customApp": "Пользовательское приложение",
+    "saveReminder": "Пожалуйста, сначала сохраните, прежде чем добавлять новые приложения",
+    "prompt": "Напоминание",
+    "changeTip": "Все изменения, сделанные при переключении датчика, будут потеряны. Продолжить?",
+    "userDefined": "Пользовательские настройки",
+    "deleteConfirm": "Вы действительно хотите удалить выбранное приложение?",
+    "aiImage": "Изображение AI",
+    "getUltrasoundLog": "Получение журнала...",
+    "pushPackage": "Отправка пакета обновлений для ультразвуковой машины...",
+    "cancelDownloadInstallPackSuccess": "Отмена пакета установки",
+    "updatingPush": "Обновление...",
+    "cancelDownloadLogSuccess": "Успешно отменено скачивание журнала",
+    "getLogSuccess": "Журнал получен успешно, идет загрузка журнала...",
+    "invalidLicenseCode": "Неверный код лицензии или код не соответствует данному устройству. Пожалуйста, обратитесь в службу поддержки производителя.",
+    "clearSuccess": "Удаление успешно",
+    "downloadLogSuccess": "Журнал успешно загружен. Пожалуйста, проверьте на рабочем столе.",
+    "cancelSearch": "Отменить поиск",
+    "connectedStorage": "Подключено к хранилищу",
+    "unsupported3D4DRemoteControl": "Удаленное управление 3D/4D не поддерживается",
+    "thisKeyUnavailable": "Эта кнопка в настоящее время недоступна",
+    "confirmLeaveDuringUpload": "Загрузка пакета обновлений еще не завершена. Вы уверены, что хотите уйти?",
+    "networkConnectionError": "Аномалии в сетевом соединении",
+    "existDriverName": "Имя драйвера уже существует",
+    "isOptionalFeatureEnabled": "Внимание: есть только одна возможность на пробный период. Введите код лицензии, чтобы активировать пробный период для опциональных функций. Срок действия лицензии составляет 6 месяцев.",
+    "deviceDisconnected": "Соединение на устройстве прервано",
+    "noSensorDetected": "Датчик не обнаружен"
+  },
+  "college": {
+    "materialDetail": "Детали материалов",
+    "fileName": "Имя файла:",
+    "sharing": "Текущий ультразвуковой аппарат в процессе обмена",
+    "desktopShare": "Обмен рабочим столом...",
+    "collapse": "Свернуть",
+    "expand": "Развернуть",
+    "loadMore": "Загрузить еще",
+    "selectHospital": "Пожалуйста, выберите подключаемую больницу",
+    "authenticationNeeded": "Пожалуйста, сначала пройдите аутентификацию, перед добавлением устройства",
+    "retry": "Повторите попытку",
+    "myCourses": "Мои курсы",
+    "myClasses": "Мой класс",
+    "liveCourse": "Прямой эфир урока",
+    "recommended": "Рекомендаций",
+    "screening": "Раннее скрининг",
+    "emergency": "Экстренное и тяжелое состояние",
+    "academicSummit": "Научный Саммит",
+    "anesthesiaPain": "Боли и чувствительность после анестезии",
+    "neurosonography": "Нейросонология",
+    "other": "Другие",
+    "courseAlbum": "Альбом курса",
+    "popularCourses": "Популярные курсы",
+    "liveCourses": "Курсы в прямом эфире",
+    "thirdPartyCourses": "Курсы от третьих лиц",
+    "pastureMutualLearning": "Взаимное обучение На Пастбище",
+    "desktopSharing": "Обмен рабочим столом",
+    "ultrasoundSharing": "Обмен ультразвуковыми образами",
+    "paintBrushTool": "Ручной инструмент для рисования",
+    "styleSetting": "Настройка стиля",
+    "volume": "Громкость",
+    "share": "Поделиться",
+    "generatePlayback": "Создать запись",
+    "exitLive": "Выйти из прямого трансляции",
+    "interactionArea": "Зона взаимодействия",
+    "teacherHello": "Здравствуйте, учитель",
+    "learningOnBusinessTrip": "Учусь в командировке",
+    "helloClassmates": "Привет, одноклассники",
+    "notLateRight": "Это не поздно, верно?",
+    "enterMessageToSend": "Введите сообщение, нажмите Enter, чтобы отправить",
+    "question1": "1. Какой из следующих утверждений верен?",
+    "question1OptionA": "A. Трапециевидное изображение увеличивает область дальнего поля изображения.",
+    "question1OptionB": "B. Трапециевидное изображение не поддерживает режим цветного потока крови.",
+    "question1OptionC": "C. Трапециевидное изображение задерживает и отклоняет некоторые лучи для расширения области сканирования по обе стороны изображения.",
+    "question2": "2. Какой из проб поддерживает трапециевидное изображение?",
+    "question2OptionA": "A. Проба для исследования живота",
+    "question2OptionB": "B. Проба высокой частоты для поверхностного исследования",
+    "question2OptionC": "C. Кардиологическая фазированная антенна",
+    "question3": "3. Какой из следующих утверждений верен?",
+    "question3OptionA": "A. Изображение Flyinsono Panoramic поддерживает измерение.",
+    "question3OptionB": "B. В Flyinsono Panoramic есть подсказка о скорости сканирования.",
+    "question3OptionC": "C. Панорамное изображение Flyinsono поддерживает локальное увеличение и функции вращения",
+    "question4_title": "Какое из следующих утверждений верно?",
+    "question4_optionA": "A. Технология панорамного изображения FeiYiNuo может отображать значение скорости сканирования",
+    "question4_optionB": "B. Технология панорамного изображения Kaili не может отображать значение скорости сканирования",
+    "question4_optionC": "C. Технология панорамного изображения Mindray имеет предупреждение о превышении скорости",
+    "question5_title": "В каком из следующих случаев можно применить панорамное изображение?",
+    "question5_promptA": "A. сравнение 2D-и цветных изображений для узлов щитовидной железы у пациентов",
+    "question5_promptB": "B. сканирование области разрыва ахиллесовой связки у пациента",
+    "question5_promptC": "C. невозможно отобразить полное изображение на большом поле зрения у пациентов с щитовидной железой",
+    "test_paper_title": "Вопросы по трапециевидной и панорамной imaging",
+    "test_paper_intro": "Инструкции: В этом тесте 20 вопросов, максимальный балл 100, время тестирования - 1 час.",
+    "test_time_countdown": "Обратный отсчёт времени теста",
+    "question_card_title": "Бланк ответов",
+    "question_card_single_choice": "Вопросы с одним вариантом ответа",
+    "question_card_multi_choice": "Вопросы с несколькими вариантами ответа",
+    "question_card_fill_in_blanks": "Заполните пропуски",
+    "question_card_short_answer": "Вопросы краткого ответа",
+    "question_total": "Всего {0} вопросов, общий балл {1}",
+    "question_done": "{0} вопросов выполнено",
+    "earlyObstetricScreeningAlbumPart1": "Альбом: Ранее скрининг в акушерстве (1)",
+    "earlyObstetricScreeningAlbumPart2": "Альбом: Ранее скрининг в акушерстве (2)",
+    "echocardiographyAlbumPart1": "Альбом: Эхокардиография (1)",
+    "echocardiographyAlbumPart2": "Альбом: Эхокардиография (2)",
+    "echocardiogram": "Эхокардиограмма",
+    "ultrasoundNeurosciencesAlbum": "Альбом: Ультразвук в нейронауке",
+    "neurology": "Нейрология",
+    "emergencyDepartment": "Отделение экстренной помощи",
+    "emergencyCriticalCareAlbumPart1": "Альбом: Экстренная интенсивная терапия (1)",
+    "emergencyCriticalCareAlbumPart2": "Альбом: Экстренная интенсивная терапия (2)",
+    "emergencyCriticalCareAlbumPart3": "Альбом: Экстренная интенсивная терапия (3)",
+    "softTissueAlbum": "Мягкие ткани",
+    "softTissueUltrasoundAlbum": "Альбом: УЗИ мягких тканей",
+    "neckAlbum": "Шейный отдел",
+    "neckUltrasoundAlbum": "Альбом: УЗИ шейки",
+    "liverPunctureGuidedByUltrasoundAlbum": "Альбом: Пункция печени под контролем УЗИ",
+    "memoryTrackingContrastEnhancedTechnique": "Технология контрастного усиления с использованием метода отслеживания памяти",
+    "mMode": "М-режим",
+    "anatomicalMMode": "Анатомический M-режим",
+    "colorMMode": "Цветной M-режим",
+    "vocalVolumeCalculationAlgorithm": "VOCAL: алгоритм расчета объема",
+    "xmiRemoteConnectionInstruction": "Инструкция по удаленному подключению Flyinsono",
+    "amasAutomaticMeasurementOfArterialStiffnessInWholeBody": "AMAS: система автоматического измерения жесткости артерий по всему телу",
+    "subscribe": "Подписаться",
+    "replay": "Воспроизвести снова",
+    "liveOngoing": "Прямой эфир продолжается",
+    "notStarted": "Не начато",
+    "myLibrary": "Моя библиотека материалов",
+    "uploadMaterial": "Загрузить материал",
+    "addStudent": "Добавить студента",
+    "addTeacher": "Добавить преподавателя",
+    "searchUser": "Поиск пользователя по имени, номеру телефона или электронной почте",
+    "applyForReview": "Подать заявку на рассмотрение",
+    "teacherRole": "Я учитель",
+    "studentRole": "Я студент",
+    "createClass": "Создать класс",
+    "joinClass": "Присоединиться к классу",
+    "assignCourse": "Назначить курс",
+    "distributeExam": "Распределить экзамен",
+    "distributeExercise": "Раздать упражнения",
+    "exercise": "Упражнение",
+    "exam": "Экзамен",
+    "quitClass": "Выйти из класса",
+    "className": "Имя класса",
+    "relatedCourse": "Связанный курс",
+    "completedExercise": "Завершенное упражнение",
+    "participatedExam": "Участие в экзамене",
+    "serialNumber": "Серийный номер",
+    "classCode": "Код класса",
+    "numberOfStudents": "Количество студентов",
+    "bindCourse": "Привязать курс",
+    "bindExam": "Привязать экзамен",
+    "bindExercise": "Привязать упражнение",
+    "viewStudent": "Просмотр студентов",
+    "networkSettings": "Настройки сети",
+    "runLog": "Журнал выполнения",
+    "downloadProgress": "Прогресс загрузки",
+    "downloadSuccess": "Загрузка успешна, проверьте на рабочем столе",
+    "teacherOnlyPC": "Учителю доступны только операции на ПК",
+    "startCourse": "Начать курс",
+    "enterCourse": "Войти в курс",
+    "uploadProgress": "Прогресс загрузки",
+    "noAvailableDevice": "Нет доступных устройств",
+    "selectLiveContent": "Пожалуйста, выберите контент для трансляции:",
+    "stopSharing": "Остановить обмен",
+    "selectDevice": "Выберите устройство",
+    "teacherAway": "Учитель временно отсутствует",
+    "notJoined": "Не вошел",
+    "camera": "Камера",
+    "computerDesktopUltrasound": "Компьютерный рабочий стол / Ультразвук",
+    "courseURL": "URL курса:",
+    "printTestPage": "Напечатать тестовую страницу",
+    "courseNotStreaming": "Курс не транслируется в прямом эфире.",
+    "exitClassSuccess": "Вы успешно вышли из класса.",
+    "exitClassFailed": "Не удалось выйти из класса.",
+    "createClassSuccess": "Вы успешно создали новый класс.",
+    "createClassFailed": "Не удалось создать новый класс.",
+    "applyJoinClassSuccess": "Ваша заявка на вступление в класс успешно отправлена. Пожалуйста, дождитесь одобрения от учителя.",
+    "applyJoinClassFailed": "Ваша заявка на вступление в класс не прошла.",
+    "applyAgreeFailed": "Ваш запрос на одобрение не прошел."
+  }
+}

+ 8 - 8
assets/zh_CN.json

@@ -469,7 +469,7 @@
     "distributed": "已分配",
     "back": "返回",
     "revoke": "撤销",
-    " Select": "请选择",
+    "Select": "请选择",
     "country": "国家",
     "province": "省份",
     "city": "城市",
@@ -483,7 +483,7 @@
     "delete": "删除",
     "modify": "修改",
     "platformDefault": "平台默认",
-    " InputLimitTime": "请输入超时时限",
+    "InputLimitTime": "请输入超时时限",
     "referLimitTime": "转诊超时时限",
     "inputHour": "小时",
     "canReferOrg": "对接医院",
@@ -546,14 +546,14 @@
   },
   "setting": {
     "switchingLanguage": "正在切换语言...",
-    " FullfillServerUrl": "请填写服务地址",
-    " FullfillServerPort": "请填写端口",
+    "FullfillServerUrl": "请填写服务地址",
+    "FullfillServerPort": "请填写端口",
     "serverUrlFormatValidation": "请输入正确的服务器地址",
     "serverPortFormatValidation": "无效的端口号(端口号范围 0-65535)",
     "serverUrlExistValidation": "此服务地址已存在",
     "serverUrlNotExistValidation": "服务器不存在",
     "serverUrlNotChangedValidation": "服务器未进行任何更改",
-    " SelectOrAddServerUrl": "请选择或添加服务器地址",
+    "SelectOrAddServerUrl": "请选择或添加服务器地址",
     "serverUrl": "地址:",
     "serverPort": "端口:",
     "serverUrlExample": "示例 127.0.0.1",
@@ -1193,13 +1193,13 @@
     "fullfillAreaInfo": "请完善地区信息",
     "fullfillOrgName": "请完善医院名称",
     "deleteOrNot": "确定是否移除",
-    " SelectUserToRemove": "请选择需要移除的用户",
+    "SelectUserToRemove": "请选择需要移除的用户",
     "removing": "移除中",
     "departmentNamePlaceholder": "请填写科室名称",
-    " FillInCompletely": "请填写完整",
+    "FillInCompletely": "请填写完整",
     "titleNamePlaceholder": "请填写职称名称",
     "messgaeConfirm": "信息确认!",
-    "removeMemberConfirm ": "确定将该成员移除本医院吗?",
+    "removeMemberConfirm": "确定将该成员移除本医院吗?",
     "removeMembersConfirm": "您已选择{0}名成员,确定从本医院移除吗?",
     "deleteMemberConfirm": "您已选择${0}名成员,确定将他们移除吗?",
     "deleteOrganizationConfirm": "确认删除组织架构",

+ 10 - 0
lib/i18n.dart

@@ -17,6 +17,9 @@ const Locale CHINESE_LOCALE = const Locale("zh", "CN");
 /// 英文
 const Locale ENGLISH_LOCALE = const Locale("en", "US");
 
+///俄语
+const Locale RUSSIAN_LOCALE = const Locale("ru", "RU");
+
 AssetBundle _assetBundle = rootBundle;
 
 /// 翻译字典选项
@@ -42,6 +45,13 @@ class FTrKeybookOption {
     ENGLISH_LOCALE,
     () => _buildInnerBoook(ENGLISH_LOCALE),
   );
+
+  /// 俄语字典建造器
+  // ignore: non_constant_identifier_names
+  static final FTrKeybookOption RussianOption = FTrKeybookOption(
+    RUSSIAN_LOCALE,
+    () => _buildInnerBoook(RUSSIAN_LOCALE),
+  );
 }
 
 /// 国际化翻译字典

+ 0 - 174
lib/langs/en_us.dart

@@ -1,174 +0,0 @@
-import 'dart:ui';
-
-import 'package:fis_i18n/types.dart';
-
-import '../key_book.dart';
-
-class CommonModule implements IPropQueryable {
-  const CommonModule({
-    required this.submit,
-    required this.cancel,
-    required this.search,
-    required this.open,
-    required this.email,
-    required this.mobilePhoneNumber,
-    required this.createTime,
-    required this.refresh,
-    required this.filtrate,
-    required this.status,
-    required this.waiting,
-    required this.loading,
-    required this.finish,
-    required this.forward,
-  });
-
-  final String submit;
-  final String cancel;
-  final String search;
-  final String open;
-  final String email;
-  final String mobilePhoneNumber;
-  final String createTime;
-  final String refresh;
-  final String filtrate;
-  final String status;
-  final String waiting;
-  final String loading;
-  final String finish;
-  final String forward;
-
-  @override
-  getProp(String propName) {
-    if (propName == 'loading') {
-      return this.loading;
-    }
-    throw ArgumentError('propery not found.');
-  }
-
-  @override
-  Map<String, dynamic> toJson() {
-    return {};
-  }
-}
-
-/// 应用相关模块
-class ApplicationModule {
-  const ApplicationModule({
-    required this.fisServerName,
-    required this.wechat,
-    required this.cloudImage,
-    required this.localScreenshot,
-    required this.report,
-  });
-
-  final String fisServerName;
-  final String wechat;
-  final String cloudImage;
-  final String localScreenshot;
-  final String report;
-}
-
-/// 诊断相关模块
-class RemedicalModule {
-  const RemedicalModule({
-    required this.patientName,
-    required this.patientFrom,
-    required this.ultrasoundReport,
-    required this.abdomen,
-  });
-
-  final String patientName;
-  final String patientFrom;
-  final String ultrasoundReport;
-  final String abdomen;
-}
-
-/// 路由模块
-class RouteModule {
-  const RouteModule({
-    required this.home,
-    required this.contact,
-    required this.conversation,
-    required this.remedical,
-    required this.course,
-    required this.statistics,
-    required this.setting,
-    required this.btnDemo,
-  });
-
-  final String home;
-  final String contact;
-  final String conversation;
-  final String remedical;
-  final String course;
-  final String statistics;
-  final String setting;
-  final String btnDemo;
-}
-
-class FLangKeyBookEnglish {
-  static const LocaleConst = const Locale("en", "US");
-
-  @override
-  CommonModule buildCommonKeys() {
-    return CommonModule(
-      cancel: "Cancel",
-      submit: "Submit",
-      email: 'Email',
-      mobilePhoneNumber: 'PhoneNumber',
-      open: 'Open',
-      search: 'Search',
-      createTime: 'CreateTime',
-      filtrate: 'Filtrate',
-      finish: 'Finish',
-      forward: 'Forward',
-      refresh: 'Refresh',
-      status: 'Status',
-      waiting: 'Waiting...',
-      loading: 'Loading...',
-    );
-  }
-
-  @override
-  ApplicationModule buildApplicationKeys() {
-    return ApplicationModule(
-      fisServerName: "Flyinsono server",
-      wechat: "WeChat",
-      cloudImage: 'Cloud images',
-      localScreenshot: 'Local screenshots',
-      report: 'Report',
-    );
-  }
-
-  // @override
-  // StateModule buildStateKeys() {
-  //   return StateModule(
-  //     finished: "Finished",
-  //     unhandled: "Unhandled",
-  //   );
-  // }
-
-  @override
-  RemedicalModule buildRemedicalKeys() {
-    return RemedicalModule(
-      patientName: "Ptient name",
-      patientFrom: "From",
-      ultrasoundReport: "Ultrasound report",
-      abdomen: "Abdomen",
-    );
-  }
-
-  @override
-  RouteModule buildRouteKeys() {
-    return RouteModule(
-      home: "Home",
-      contact: "Contact",
-      conversation: "Conversation",
-      remedical: "Remedical",
-      course: "Course",
-      statistics: "Statistics",
-      setting: "Setting",
-      btnDemo: "ButtonDemo",
-    );
-  }
-}

+ 0 - 174
lib/langs/zh_cn.dart

@@ -1,174 +0,0 @@
-import 'dart:ui';
-
-import 'package:fis_i18n/types.dart';
-
-import '../key_book.dart';
-
-class CommonModule implements IPropQueryable {
-  const CommonModule({
-    required this.submit,
-    required this.cancel,
-    required this.search,
-    required this.open,
-    required this.email,
-    required this.mobilePhoneNumber,
-    required this.createTime,
-    required this.refresh,
-    required this.filtrate,
-    required this.status,
-    required this.waiting,
-    required this.loading,
-    required this.finish,
-    required this.forward,
-  });
-
-  final String submit;
-  final String cancel;
-  final String search;
-  final String open;
-  final String email;
-  final String mobilePhoneNumber;
-  final String createTime;
-  final String refresh;
-  final String filtrate;
-  final String status;
-  final String waiting;
-  final String loading;
-  final String finish;
-  final String forward;
-
-  @override
-  getProp(String propName) {
-    if (propName == 'loading') {
-      return this.loading;
-    }
-    throw ArgumentError('propery not found.');
-  }
-
-  @override
-  Map<String, dynamic> toJson() {
-    return {};
-  }
-}
-
-/// 应用相关模块
-class ApplicationModule {
-  const ApplicationModule({
-    required this.fisServerName,
-    required this.wechat,
-    required this.cloudImage,
-    required this.localScreenshot,
-    required this.report,
-  });
-
-  final String fisServerName;
-  final String wechat;
-  final String cloudImage;
-  final String localScreenshot;
-  final String report;
-}
-
-/// 诊断相关模块
-class RemedicalModule {
-  const RemedicalModule({
-    required this.patientName,
-    required this.patientFrom,
-    required this.ultrasoundReport,
-    required this.abdomen,
-  });
-
-  final String patientName;
-  final String patientFrom;
-  final String ultrasoundReport;
-  final String abdomen;
-}
-
-/// 路由模块
-class RouteModule {
-  const RouteModule({
-    required this.home,
-    required this.contact,
-    required this.conversation,
-    required this.remedical,
-    required this.course,
-    required this.statistics,
-    required this.setting,
-    required this.btnDemo,
-  });
-
-  final String home;
-  final String contact;
-  final String conversation;
-  final String remedical;
-  final String course;
-  final String statistics;
-  final String setting;
-  final String btnDemo;
-}
-
-class FLangKeyBookChinese {
-  static const LocaleConst = const Locale("zh", "CN");
-
-  @override
-  CommonModule buildCommonKeys() {
-    return CommonModule(
-      cancel: "取消",
-      submit: "提交",
-      email: '邮箱',
-      mobilePhoneNumber: '手机号',
-      open: '打开',
-      search: '搜索',
-      createTime: '创建时间',
-      filtrate: '筛选',
-      finish: '完成',
-      forward: '转发',
-      refresh: '刷新',
-      status: '状态',
-      waiting: '等待中...',
-      loading: '加载中...',
-    );
-  }
-
-  @override
-  ApplicationModule buildApplicationKeys() {
-    return ApplicationModule(
-      fisServerName: "杏聆荟服务器",
-      wechat: "微信",
-      cloudImage: '云端图像',
-      localScreenshot: '本地截图',
-      report: '报告',
-    );
-  }
-
-  // @override
-  // StateModule buildStateKeys() {
-  //   return StateModule(
-  //     finished: "已完成",
-  //     unhandled: "未处理",
-  //   );
-  // }
-
-  @override
-  RemedicalModule buildRemedicalKeys() {
-    return RemedicalModule(
-      patientName: "病人名",
-      patientFrom: "来自于",
-      ultrasoundReport: "超声报告",
-      abdomen: "腹部",
-    );
-  }
-
-  @override
-  RouteModule buildRouteKeys() {
-    return RouteModule(
-      home: "首页",
-      contact: "联系人",
-      conversation: "会话",
-      remedical: "诊断",
-      course: "课程",
-      statistics: "统计",
-      setting: "设置",
-      btnDemo: "按钮",
-    );
-  }
-}

+ 2 - 2
lib/modules/common.dart

@@ -223,7 +223,7 @@ class CommonModule extends ModuleBase {
       distributed: map.pick("distributed"),
       back: map.pick("back"),
       revoke: map.pick("revoke"),
-      Select: map.pick(" Select"),
+      Select: map.pick("Select"),
       country: map.pick("country"),
       province: map.pick("province"),
       city: map.pick("city"),
@@ -237,7 +237,7 @@ class CommonModule extends ModuleBase {
       delete: map.pick("delete"),
       modify: map.pick("modify"),
       platformDefault: map.pick("platformDefault"),
-      InputLimitTime: map.pick(" InputLimitTime"),
+      InputLimitTime: map.pick("InputLimitTime"),
       referLimitTime: map.pick("referLimitTime"),
       inputHour: map.pick("inputHour"),
       canReferOrg: map.pick("canReferOrg"),

+ 3 - 3
lib/modules/organization.dart

@@ -94,13 +94,13 @@ class OrganizationModule extends ModuleBase {
       fullfillAreaInfo: map.pick("fullfillAreaInfo"),
       fullfillOrgName: map.pick("fullfillOrgName"),
       deleteOrNot: map.pick("deleteOrNot"),
-      SelectUserToRemove: map.pick(" SelectUserToRemove"),
+      SelectUserToRemove: map.pick("SelectUserToRemove"),
       removing: map.pick("removing"),
       departmentNamePlaceholder: map.pick("departmentNamePlaceholder"),
-      FillInCompletely: map.pick(" FillInCompletely"),
+      FillInCompletely: map.pick("FillInCompletely"),
       titleNamePlaceholder: map.pick("titleNamePlaceholder"),
       messgaeConfirm: map.pick("messgaeConfirm"),
-      removeMemberConfirm: map.pick("removeMemberConfirm "),
+      removeMemberConfirm: map.pick("removeMemberConfirm"),
       removeMembersConfirm: map.pick("removeMembersConfirm"),
       deleteMemberConfirm: map.pick("deleteMemberConfirm"),
       deleteOrganizationConfirm: map.pick("deleteOrganizationConfirm"),

+ 3 - 3
lib/modules/setting.dart

@@ -133,14 +133,14 @@ class SettingModule extends ModuleBase {
   factory SettingModule(Map<String, dynamic> map) {
     return SettingModule._(
       switchingLanguage: map.pick("switchingLanguage"),
-      FullfillServerUrl: map.pick(" FullfillServerUrl"),
-      FullfillServerPort: map.pick(" FullfillServerPort"),
+      FullfillServerUrl: map.pick("FullfillServerUrl"),
+      FullfillServerPort: map.pick("FullfillServerPort"),
       serverUrlFormatValidation: map.pick("serverUrlFormatValidation"),
       serverPortFormatValidation: map.pick("serverPortFormatValidation"),
       serverUrlExistValidation: map.pick("serverUrlExistValidation"),
       serverUrlNotExistValidation: map.pick("serverUrlNotExistValidation"),
       serverUrlNotChangedValidation: map.pick("serverUrlNotChangedValidation"),
-      SelectOrAddServerUrl: map.pick(" SelectOrAddServerUrl"),
+      SelectOrAddServerUrl: map.pick("SelectOrAddServerUrl"),
       serverUrl: map.pick("serverUrl"),
       serverPort: map.pick("serverPort"),
       serverUrlExample: map.pick("serverUrlExample"),

+ 1 - 0
pubspec.yaml

@@ -31,6 +31,7 @@ flutter:
   assets:
     - assets/en_US.json
     - assets/zh_CN.json
+    - assets/ru_RU.json
   # To add assets to your package, add an assets section, like this:
   # assets:
   #   - images/a_dot_burr.jpeg

+ 9 - 3
test/fisi18n_test.dart

@@ -25,21 +25,27 @@ void main() {
     TestWidgetsFlutterBinding.ensureInitialized();
     var bookOptions = [
       FTrKeybookOption.ChineseOption,
-      FTrKeybookOption.EnglishOption
+      FTrKeybookOption.EnglishOption,
+      FTrKeybookOption.RussianOption,
     ];
     await FI18n.init((loacle) => {}, bookOptions);
   });
 
   test('test - switch language', () async {
     final curLocale = Locale("zh", "CN");
-    final anotherLocale = Locale("en", "US");
+    final enLocale = Locale("en", "US");
+    final ruLocale = Locale("ru", "RU");
     await FI18n.load(curLocale);
     print(i18nBook.auth.login.t);
     print(i18nBook.common.versionNumber.translate(['1.2.11']));
-    final matchLocale = await FI18n.ins.switchLanguage(anotherLocale);
+    final matchLocale = await FI18n.ins.switchLanguage(enLocale);
     print(" ***Locale change to $matchLocale *** ");
     print(i18nBook.auth.login.t);
     print(i18nBook.common.versionNumber.translate(['1.2.11']));
+    final ruLang = await FI18n.ins.switchLanguage(ruLocale);
+    print(" ***Locale change to $ruLang *** ");
+    print(i18nBook.auth.login.t);
+    print(i18nBook.common.versionNumber.translate(['1.2.11']));
   });
   test('test - input value', () async {
     final curLocale = Locale("zh", "CN");