From eb8899679701d6ddbed216982d1ce01060059747 Mon Sep 17 00:00:00 2001 From: dongpd Date: Mon, 23 Aug 2021 15:19:49 +0700 Subject: [PATCH] Feature: multi language (VI, EN, JA) CR: sonh (fake) --- controllers/CaptureLogsController.php | 18 ++- controllers/ConfigController.php | 18 +-- controllers/ControlLogsController.php | 25 ++-- controllers/DashboardController.php | 10 ++ controllers/ListManagementController.php | 30 ++-- controllers/UserController.php | 40 +----- messages/en/app.php | 134 ++++++++++++++++++ messages/ja/app.php | 134 ++++++++++++++++++ messages/vi/app.php | 127 ++++++++++++++++- models/CaptureLogs.php | 18 +-- models/ListManagement.php | 45 +++--- models/common.php | 8 ++ .../yiisoft/yii2-app/layouts/content.php | 2 +- .../yiisoft/yii2-app/layouts/header.php | 47 ++++-- views/capture-logs/index.tpl | 38 +++-- views/config/config.tpl | 14 +- views/config/device.tpl | 18 +-- views/config/index.tpl | 18 +-- views/config/reset.tpl | 8 +- views/control-logs/index.tpl | 20 +-- views/dashboard/index.tpl | 2 +- views/extends.tpl | 36 ++++- views/list-management/index.tpl | 70 ++++----- views/list-management/list-server.tpl | 30 ++-- views/list-management/list-to-server.tpl | 32 ++--- views/list-management/list.tpl | 34 ++--- views/user/password.tpl | 10 +- views/user/profiles.tpl | 14 +- web/images/lang/en.png | Bin 0 -> 8819 bytes web/images/lang/jp.png | Bin 0 -> 4595 bytes web/images/lang/vi.png | Bin 0 -> 6139 bytes web/index.php | 4 +- web/js/capture-logs.js | 8 +- web/js/common.js | 19 ++- web/js/config.js | 26 ++-- web/js/control-logs.js | 2 +- web/js/list-management.js | 56 ++++---- 37 files changed, 788 insertions(+), 327 deletions(-) create mode 100644 messages/en/app.php create mode 100644 messages/ja/app.php create mode 100644 web/images/lang/en.png create mode 100644 web/images/lang/jp.png create mode 100644 web/images/lang/vi.png diff --git a/controllers/CaptureLogsController.php b/controllers/CaptureLogsController.php index d2853bcf..7a65c41a 100644 --- a/controllers/CaptureLogsController.php +++ b/controllers/CaptureLogsController.php @@ -15,9 +15,13 @@ use app\models\ListManagement; */ class CaptureLogsController extends Controller { - /** - * {@inheritdoc} - */ + public function init() { + parent::init(); + Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : "vi-VI"; + if (Yii::$app->user->isGuest) + return $this->redirect(['/site/login']); + } + public function behaviors() { return [ 'verbs' => [ @@ -37,7 +41,7 @@ class CaptureLogsController extends Controller { $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); } - $this->view->title = "Lịch sử hệ thống"; + $this->view->title = Yii::t("app", "LICH_SU_HE_THONG"); $searchModel = new CaptureLogsSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); if (!$all) @@ -63,7 +67,9 @@ class CaptureLogsController extends Controller { 'f' => $f, 't' => $t, // 'idAuto' => $idAuto, - "staffArray" => ListManagement::staffArray() + "staffArray" => ListManagement::staffArray(), + "typeArray" => ListManagement::typeArray(), + "genderArray" => ListManagement::genderArray(), ]); } @@ -108,7 +114,7 @@ class CaptureLogsController extends Controller { return $model; } - throw new NotFoundHttpException('The requested page does not exist.'); + throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN")); } } diff --git a/controllers/ConfigController.php b/controllers/ConfigController.php index 4621dd3f..4dae3f21 100644 --- a/controllers/ConfigController.php +++ b/controllers/ConfigController.php @@ -14,9 +14,9 @@ class ConfigController extends Controller { public function init() { parent::init(); - if (Yii::$app->user->isGuest) { + Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : "vi-VI"; + if (Yii::$app->user->isGuest) return $this->redirect(['/site/login']); - } } /** @@ -157,12 +157,8 @@ class ConfigController extends Controller { ] ]; - /** - * Lists all Script models. - * @return mixed - */ public function actionIndex() { - $this->view->title = "Cấu hình máy chủ"; + $this->view->title = Yii::t("app", "CAU_HINH_MAY_CHU"); $options = [ 'http' => [ 'header' => "Content-Type: application/json", @@ -262,7 +258,7 @@ class ConfigController extends Controller { ])); return true; } else { - $this->view->title = "Cấu hình nhận diện"; + $this->view->title = Yii::t("app", "CAU_HINH_NHAN_DIEN"); $tempConfig = json_decode(file_get_contents("http://localhost:4004/ReadEngineConfig", false, stream_context_create([ 'http' => [ 'header' => "Content-Type: application/json", @@ -368,7 +364,7 @@ class ConfigController extends Controller { } else { Yii::$app->response->format = "json"; return [ - "title" => "Reset thiết bị", + "title" => Yii::t("app", "RESET_THIET_BI"), "form" => $this->renderPartial("reset") ]; } @@ -387,7 +383,7 @@ class ConfigController extends Controller { return ['status' => false, 'text' => 'error']; if ($tempConfig['data'] === "") - return ['status' => false, 'text' => 'Cấu hình ip chưa đúng!']; + return ['status' => false, 'text' => Yii::t("app", "CAU_HINH_IP_CHUA_DUNG")]; $engineConfig = json_decode($tempConfig['data'], true); if (count($engineConfig['data']['engines']) == 0) @@ -412,7 +408,7 @@ class ConfigController extends Controller { } public function actionCauHinhThietBi() { - $this->view->title = "Cấu hình thiết bị"; + $this->view->title = Yii::t("app", "CAU_HINH_THIET_BI"); return $this->render('device', [ "server_api" => \app\models\SyncUrl::findOne(['key_config' => 'server_api']), "device_id" => \app\models\SyncUrl::findOne(['key_config' => 'device_id']) diff --git a/controllers/ControlLogsController.php b/controllers/ControlLogsController.php index f5c9c149..6d98be5e 100644 --- a/controllers/ControlLogsController.php +++ b/controllers/ControlLogsController.php @@ -17,9 +17,13 @@ use app\models\common; */ class ControlLogsController extends Controller { - /** - * {@inheritdoc} - */ + public function init() { + parent::init(); + Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : "vi-VI"; + if (Yii::$app->user->isGuest) + return $this->redirect(['/site/login']); + } + public function behaviors() { return [ 'verbs' => [ @@ -39,7 +43,7 @@ class ControlLogsController extends Controller { $t = date_format(date_create_from_format('H:i d/m/Y', $to), 'U'); } - $this->view->title = "Danh sách nhận diện"; + $this->view->title = Yii::t("app", "DANH_SACH_NHAN_DIEN"); $searchModel = new CaptureLogsSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); $dataProvider->query->andWhere(["<>", "capture_logs.staff_id", 0]); @@ -56,11 +60,10 @@ class ControlLogsController extends Controller { return $this->render('index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider, - 'statusArray' => CaptureLogs::$statusArray, 'f' => $f, 't' => $t, - 'typeArray' => ListManagement::$typeArray, - 'genderArray' => ListManagement::$genderArray + 'typeArray' => ListManagement::typeArray(), + 'genderArray' => ListManagement::genderArray() ]); } @@ -69,7 +72,7 @@ class ControlLogsController extends Controller { return $model; } - throw new NotFoundHttpException('The requested page does not exist.'); + throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN")); } public function actionUseFeature($id) { @@ -81,7 +84,7 @@ class ControlLogsController extends Controller { $url = $model->image; $images = json_decode($listManagement->image, true); if (count($images) >= \Yii::$app->params['maxPicture']) - return ["status" => false, "text" => "Mỗi đối tượng chỉ nhận tối đa " . \Yii::$app->params['maxPicture'] . " hình ảnh mẫu"]; + return ["status" => false, "text" => Yii::t("app", "SO_ANH_MAU_TOI_DA", ["maxPicture" => \Yii::$app->params['maxPicture']])]; $add = true; foreach ($images as $key => $value) { if (isset($value['urlOld']) && $value['urlOld'] === $url) @@ -119,9 +122,9 @@ class ControlLogsController extends Controller { ]); return ["status" => true]; } - return ["status" => false, "text" => "Hình ảnh này đã được chọn làm mẫu cho đối tượng này!"]; + return ["status" => false, "text" => Yii::t("app", "ANH_MAU_DA_DUOC_CHON")]; } - return ["status" => false, "text" => "Đối tượng không tồn tại!"]; + return ["status" => false, "text" => Yii::t("app", "DOI_TUONG_KHONG_TON_TAI")]; } } diff --git a/controllers/DashboardController.php b/controllers/DashboardController.php index 8fe20fba..fcf61bfd 100644 --- a/controllers/DashboardController.php +++ b/controllers/DashboardController.php @@ -147,4 +147,14 @@ class DashboardController extends Controller { return $this->redirect(Yii::$app->request->hostInfo . "/BiFace_Server_Lite/web/du-lieu.xlsx"); } + public function actionChangeLanguage($lang) { + if (Yii::$app->request->isAjax) { + $language = \app\models\common::allLanguage(); + foreach ($language as $key => $value) { + if ($value['name'] === $lang) + return Yii::$app->session->set("language", $value); + } + } + } + } diff --git a/controllers/ListManagementController.php b/controllers/ListManagementController.php index c4718e5c..4e13a7c7 100644 --- a/controllers/ListManagementController.php +++ b/controllers/ListManagementController.php @@ -17,9 +17,13 @@ use yii\helpers\FileHelper; */ class ListManagementController extends Controller { - /** - * {@inheritdoc} - */ + public function init() { + parent::init(); + Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : "vi-VI"; + if (Yii::$app->user->isGuest) + return $this->redirect(['/site/login']); + } + public function behaviors() { return [ 'verbs' => [ @@ -34,7 +38,7 @@ class ListManagementController extends Controller { public function actionIndex($from = "", $to = "", $name = "", $type = "all", $gender = "all", $id = "") { $f = date_format(date_create_from_format('H:i d/m/Y', "00:00 " . date("d/m/Y")), 'U'); $t = date_format(date_create_from_format('H:i d/m/Y', "23:59 " . date("d/m/Y")), 'U'); - $this->view->title = "Quản lý mẫu"; + $this->view->title = Yii::t("app", "QUAN_LY_MAU"); $searchModel = new ListManagementSearch(); $dataProvider = $searchModel->search(Yii::$app->request->queryParams); if ($from !== "" && $to !== "") { @@ -77,8 +81,8 @@ class ListManagementController extends Controller { 'dataProvider' => $dataProvider, 'f' => $f, 't' => $t, - 'typeArray' => ListManagement::$typeArray, - 'genderArray' => ListManagement::$genderArray, + 'typeArray' => ListManagement::typeArray(), + 'genderArray' => ListManagement::genderArray(), // 'idAuto' => $idAuto, "staffArray" => ListManagement::staffArray(), "updating" => $updating @@ -121,7 +125,7 @@ class ListManagementController extends Controller { if ($listManagement) { $images = json_decode($listManagement->image, true); if (count($images) >= \Yii::$app->params['maxPicture']) - return ["status" => false, "text" => "Mỗi đối tượng chỉ nhận tối đa " . \Yii::$app->params['maxPicture'] . " hình ảnh mẫu"]; + return ["status" => false, "text" => Yii::t("app", "SO_ANH_MAU_TOI_DA", ["maxPicture" => \Yii::$app->params['maxPicture']])]; $add = true; foreach ($images as $key => $value) { if (isset($value['urlOld']) && $value['urlOld'] === $url) @@ -166,7 +170,7 @@ class ListManagementController extends Controller { ]); return ["status" => true]; } - return ["status" => false, "text" => "Hình ảnh này đã được chọn làm mẫu cho đối tượng này!"]; + return ["status" => false, "text" => Yii::t("app", "ANH_MAU_DA_DUOC_CHON")]; } else { $RootFolder = Yii::getAlias('@webroot') . "/data/uploads"; $targetPath = $RootFolder . "/face"; @@ -318,7 +322,7 @@ class ListManagementController extends Controller { return $model; } - throw new NotFoundHttpException('The requested page does not exist.'); + throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN")); } public function actionBatchDelete() { @@ -392,7 +396,7 @@ class ListManagementController extends Controller { "title" => $data['ip'], "form" => $this->renderPartial("list", [ "results" => $results, - "typeArray" => ListManagement::$typeArray, + "typeArray" => ListManagement::typeArray(), "filters" => $filters, "ip" => $data['ip'] ]) @@ -428,7 +432,7 @@ class ListManagementController extends Controller { } Yii::$app->response->format = "json"; return [ - "title" => " Đồng bộ từ máy chủ", + "title" => " " . Yii::t("app", "DONG_BO_TU_MAY_CHU"), "form" => $this->renderPartial("list-server", [ "datas" => $datas['data'], "filters" => $filters, @@ -683,7 +687,7 @@ class ListManagementController extends Controller { $filters[$value->staff_id] = $value->code . " - " . $value->name . " - " . $value->address; } return [ - "title" => " Đồng bộ lên máy chủ", + "title" => " " . Yii::t("app", "DONG_BO_LEN_MAY_CHU"), "form" => $this->renderPartial("list-to-server", [ "datas" => $datas, "filters" => $filters @@ -717,7 +721,7 @@ class ListManagementController extends Controller { } } if (count($images) == 0) - return ["status" => true, "text" => "Dữ liệu không đổi"]; + return ["status" => true, "text" => Yii::t("app", "DU_LIEU_KHONG_DOI")]; $items = [ "id" => $StaffInfo->staff_id, diff --git a/controllers/UserController.php b/controllers/UserController.php index 6ff1154c..6909776f 100644 --- a/controllers/UserController.php +++ b/controllers/UserController.php @@ -19,12 +19,12 @@ class UserController extends Controller { public function init() { parent::init(); - if (Yii::$app->user->isGuest) { + Yii::$app->language = Yii::$app->session->get("language") ? Yii::$app->session->get("language")["name"] : "vi-VI"; + if (Yii::$app->user->isGuest) return $this->redirect(['/site/login']); - } - if (!Yii::$app->user->can("administrator")) { + + if (!Yii::$app->user->can("administrator")) return $this->redirect(["/dashboard"]); - } } /** @@ -86,11 +86,6 @@ class UserController extends Controller { } } - /** - * Creates a new User model. - * If creation is successful, the browser will be redirected to the 'view' page. - * @return mixed - */ public function actionCreate() { if (!Yii::$app->user->can("administrator")) { Yii::$app->response->format = "json"; @@ -142,13 +137,6 @@ class UserController extends Controller { } } - /** - * Updates an existing User model. - * If update is successful, the browser will be redirected to the 'view' page. - * @param integer $id - * @return mixed - * @throws NotFoundHttpException if the model cannot be found - */ public function actionUpdate($id) { if (!Yii::$app->user->can("administrator")) { Yii::$app->response->format = "json"; @@ -196,13 +184,6 @@ class UserController extends Controller { } } - /** - * Deletes an existing User model. - * If deletion is successful, the browser will be redirected to the 'index' page. - * @param integer $id - * @return mixed - * @throws NotFoundHttpException if the model cannot be found - */ public function actionDelete($id) { if (!Yii::$app->user->can("administrator")) { throw new \yii\web\ForbiddenHttpException(Yii::t("app", "Bạn không có quyền truy cập!")); @@ -213,19 +194,12 @@ class UserController extends Controller { return $this->redirect(['index']); } - /** - * Finds the User model based on its primary key value. - * If the model is not found, a 404 HTTP exception will be thrown. - * @param integer $id - * @return User the loaded model - * @throws NotFoundHttpException if the model cannot be found - */ protected function findModel($id) { if (($model = User::findOne($id)) !== null) { return $model; } - throw new NotFoundHttpException('The requested page does not exist.'); + throw new NotFoundHttpException(Yii::t("app", "KHONG_TIM_THAY_THONG_TIN")); } public function actionProfiles() { @@ -234,7 +208,7 @@ class UserController extends Controller { } $model = $this->findModel(Yii::$app->user->id); - $this->view->title = Yii::t("app", "Thông tin cá nhân"); + $this->view->title = Yii::t("app", "THONG_TIN_CA_NHAN"); $this->view->params['breadcrumbs'][] = $this->view->title; return $this->render('profiles', [ @@ -264,7 +238,7 @@ class UserController extends Controller { if (Yii::$app->user->isGuest) { return $this->redirect(['/site/login']); } - $this->view->title = Yii::t("app", "Đổi mật khẩu"); + $this->view->title = Yii::t("app", "DOI_MAT_KHAU"); $this->view->params['breadcrumbs'][] = $this->view->title; return $this->render('password', [ diff --git a/messages/en/app.php b/messages/en/app.php new file mode 100644 index 00000000..78ef2ad4 --- /dev/null +++ b/messages/en/app.php @@ -0,0 +1,134 @@ + "Cấu hình", + "CAU_HINH_THIET_BI" => "Cấu hình thiết bị", + "CAU_HINH_MAY_CHU" => "Cấu hình máy chủ", + "CAU_HINH_NHAN_DIEN" => "Cấu hình nhận diện", + "DEVICE_CONFIG" => "Device config", + "SERVER_CONFIG" => "Server config", + "ENGINE_CONFIG" => "Engine config", + "SERVER_MQTT" => "server_mqtt", + "URL" => "url", + "LUU_LAI" => "Lưu lại", + "HAY_NHAP_THONG_TIN" => "Hãy nhập thông tin", + "BOX_CHUA_DUOC_DANG_KI_TREN_CMS" => "Box chưa được đăng kí trên CMS", + "DA_LUU_CAU_HINH" => "Đã lưu cấu hình", + "LUU_CAU_HINH_THAT_BAI" => "Lưu cấu hình thất bại", + "RESET_THIET_BI" => "Reset thiết bị", + "XOA_DU_LIEU_LUU_TRU_TRONG_THIET_BI" => "Xóa dữ liệu lưu trữ trong thiết bị", + "RESET_CAU_HINH_THIET_BI" => "Reset cấu hình thiết bị", + "DONG_Y" => "Đồng ý", + "HUY_BO" => "Hủy bỏ", + "HAY_LUA_CHON_THAO_TAC" => "Hãy lựa chọn thao tác", + "DELETE_DB_CONFIRM" => "Bạn có chắc chắn muốn xóa dữ liệu lưu trữ trong thiết bị không?", + "RESET_DB_CONFIRM" => "Bạn có chắc chắn muốn reset cấu hình thiết bị không?", + "CAU_HINH_IP_CHUA_DUNG" => "Cấu hình ip chưa đúng", + "SERVER_API" => "Server API", + "DEVICE_ID" => "Device ID", + "QUAN_LY_MAU" => "Quản lý mẫu", + "LICH_SU_HE_THONG" => "Lịch sử hệ thống", + "DANH_SACH_NHAN_DIEN" => "Danh sách nhận diện", + "ONLINE" => "Trực tuyến", + "THONG_TIN_CA_NHAN" => "Thông tin cá nhân", + "DOI_MAT_KHAU" => "Đổi mật khẩu", + "DANG_XUAT" => "Đăng xuất", + "PHIEN_BAN" => "Phiên bản", + "ID" => "ID", + "LOAI" => "Loại", + "TEN" => "Tên", + "HINH_ANH_DANG_KI" => "Hình ảnh đăng kí", + "GIOI_TINH" => "Giới tính", + "NGAY_SINH" => "Ngày sinh", + "DIEN_THOAI" => "Điện thoại", + "DON_VI" => "Đơn vị", + "THOI_GIAN_DANG_KI" => "Thời gian đăng kí", + "TEN_HIEN_THI" => "Tên hiển thị", + "WHITE_LIST" => "Whitelist", + "BLACK_LIST" => "Blacklist", + "MALE" => "Nam", + "FEMALE" => "Nữ", + "TIM_KIEM_DU_LIEU" => "Tìm kiếm dữ liệu", + "TAT_CA" => "Tất cả", + "TIM_KIEM" => "Tìm kiếm", + "XOA_NHIEU_DU_LIEU" => "Xóa nhiều dữ liệu", + "CHON_TOAN_BO_TRANG" => "Chọn toàn bộ trang", + "BO_CHON" => "Bỏ chọn", + "XAC_NHAN_XOA" => "Xác nhận xóa", + "DONG_BO_VOI_MAY_CHU" => "Đồng bộ với máy chủ", + "DONG_BO_TU_MAY_CHU" => "Đồng bộ từ máy chủ", + "DONG_BO_LEN_MAY_CHU" => "Đồng bộ lên máy chủ", + "DONG_BO_TU_THIET_BI_KHAC" => "Đồng bộ từ thiết bị khác", + "NHAP_IP_THIET_BI" => "Nhập ip thiết bị", + "SO_NGUOI_CO_ANH_TREN_TONG" => "Số người có ảnh / tổng", + "DAC_TRUNG_1" => "Đặc trưng 1", + "DAC_TRUNG_2" => "Đặc trưng 2", + "DANG_CAP_NHAT" => "Đang cập nhật ...", + "THAO_TAC" => "Thao tác", + "SUA" => "Sửa", + "XOA" => "Xóa", + "DANH_SACH" => "Danh sách", + "LUU" => "Lưu", + "HUY" => "Hủy", + "HAY_CHON_DOI_TUONG" => "Hãy chọn đối tượng", + "HAY_NHAP_TEN" => "Hãy nhập tên", + "HAY_NHAP_TEN_HIEN_THI" => "Hãy nhập tên hiển thị", + "CAP_NHAT_DU_LIEU_THANH_CONG" => "Cập nhật dữ liệu thành công", + "MA_DOI_TUONG_DA_TON_TAI" => "Mã đối tượng đã tồn tại", + "DELETE_CONFIRM" => "Bạn có chắc chắn muốn xóa không", + "HAY_CHON_DU_LIEU_DE_XOA" => "Hãy chọn dữ liệu để xóa", + "DA_XOA_DU_LIEU" => "Đã xóa dữ liệu", + "CHON_HINH_ANH" => "Chọn hình ảnh", + "HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT" => "Hình ảnh không nhận diện được khuôn mặt", + "HAY_TAI_LEN_HINH_ANH" => "Hãy tải lên hình ảnh", + "HAY_NHAP_DIA_CHI_IP_DONG_BO" => "Hãy nhập địa chỉ ip thiết bị muốn đồng bộ", + "SAI_DINH_DANG_IP" => "Sai định dạng ip", + "TIM_KIEM_THEO_ID_HOAC_TEN" => "Tìm kiếm theo ID hoặc tên", + "KHONG_CO_KET_NOI_TOI_THIET_BI" => "Không có kết nối tới thiết bị", + "KHONG_CO_DU_LIEU_DONG_BO" => "Không có dữ liệu đồng bộ", + "DONG_BO_DU_LIEU_HOAN_THANH" => "Đồng bộ dữ liệu hoàn thành", + "SO_ANH_MAU_TOI_DA" => "Mỗi đối tượng chỉ nhận tối đa {maxPicture} hình ảnh mẫu", + "ANH_MAU_DA_DUOC_CHON" => "Hình ảnh này đã được chọn làm mẫu cho đối tượng này", + "KHONG_TIM_THAY_THONG_TIN" => "Không tìm thấy thông tin", + "HUY_BO_TIM_KIEM" => "Hủy bỏ tìm kiếm", + "DA_LUA_CHON_X_DOI_TUONG" => "Đã lựa chọn 0 đối tượng.", + "DONG_BO_X_Y_DOI_TUONG" => "Đồng bộ 0/0 đối tượng.", + "CHON_TAT_CA" => "Chọn tất cả", + "BO_CHON_TAT_CA" => "Bỏ chọn tất cả", + "DONG_BO" => "Đồng bộ", + "DONG_LAI" => "Đóng lại", + "COMPANY_ID" => "Company ID", + "CHON_DOI_TUONG_CHUA_TON_TAI" => "Chọn đối tượng chưa tồn tại", + "DU_LIEU_KHONG_DOI" => "Dữ liệu không đổi", + "THOI_GIAN" => "Thời gian", + "HINH_ANH" => "Hình ảnh", + "TRANG_THAI" => "Trạng thái", + "REMARK" => "Remark", + "DO_TIN_CAY" => "Độ tin cậy", + "TRANG_THAI_DONG_BO" => "Trạng thái đồng bộ", + "FROM" => "Từ", + "TO" => "Đến", + "HIEN_THI_TOAN_BO_DU_LIEU" => "Hiển thị toàn bộ dữ liệu", + "DOI_TUONG_KHONG_TON_TAI" => "Đối tượng không tồn tại", + "DA_THEM_HINH_ANH_MAU" => "Đã thêm hình ảnh mẫu", + "XUAT_DU_LIEU" => "Xuất dữ liệu", + "TEN_DANG_NHAP" => "Tên đăng nhập", + "HO_TEN" => "Họ tên", + "EMAIL" => "Email", + "LOAI_NGUOI_DUNG" => "Loại người dùng", + "THONG_TIN_DA_DUOC_LUU_LAI" => "Thông tin đã được lưu lại", + "DOI_MAT_KHAU" => "Đổi mật khẩu", + "MAT_KHAU_CU" => "Mật khẩu cũ", + "MAT_KHAU_MOI" => "Mật khẩu mới", + "NHAC_LAI_MAT_KHAU_MOI" => "Nhắc lại mật khẩu mới", + "DOI_MAT_KHAU_THANH_CONG" => "Đổi mật khẩu thành công", + "DANG_XU_LY" => "Đang xử lý ...", + "THONG_BAO" => "Thông báo", + "CO_LOI_XAY_RA_HAY_THU_LAI" => "Có lỗi xảy ra, có thể do đường truyền mạng, xin vui lòng thử lại" +]; diff --git a/messages/ja/app.php b/messages/ja/app.php new file mode 100644 index 00000000..78ef2ad4 --- /dev/null +++ b/messages/ja/app.php @@ -0,0 +1,134 @@ + "Cấu hình", + "CAU_HINH_THIET_BI" => "Cấu hình thiết bị", + "CAU_HINH_MAY_CHU" => "Cấu hình máy chủ", + "CAU_HINH_NHAN_DIEN" => "Cấu hình nhận diện", + "DEVICE_CONFIG" => "Device config", + "SERVER_CONFIG" => "Server config", + "ENGINE_CONFIG" => "Engine config", + "SERVER_MQTT" => "server_mqtt", + "URL" => "url", + "LUU_LAI" => "Lưu lại", + "HAY_NHAP_THONG_TIN" => "Hãy nhập thông tin", + "BOX_CHUA_DUOC_DANG_KI_TREN_CMS" => "Box chưa được đăng kí trên CMS", + "DA_LUU_CAU_HINH" => "Đã lưu cấu hình", + "LUU_CAU_HINH_THAT_BAI" => "Lưu cấu hình thất bại", + "RESET_THIET_BI" => "Reset thiết bị", + "XOA_DU_LIEU_LUU_TRU_TRONG_THIET_BI" => "Xóa dữ liệu lưu trữ trong thiết bị", + "RESET_CAU_HINH_THIET_BI" => "Reset cấu hình thiết bị", + "DONG_Y" => "Đồng ý", + "HUY_BO" => "Hủy bỏ", + "HAY_LUA_CHON_THAO_TAC" => "Hãy lựa chọn thao tác", + "DELETE_DB_CONFIRM" => "Bạn có chắc chắn muốn xóa dữ liệu lưu trữ trong thiết bị không?", + "RESET_DB_CONFIRM" => "Bạn có chắc chắn muốn reset cấu hình thiết bị không?", + "CAU_HINH_IP_CHUA_DUNG" => "Cấu hình ip chưa đúng", + "SERVER_API" => "Server API", + "DEVICE_ID" => "Device ID", + "QUAN_LY_MAU" => "Quản lý mẫu", + "LICH_SU_HE_THONG" => "Lịch sử hệ thống", + "DANH_SACH_NHAN_DIEN" => "Danh sách nhận diện", + "ONLINE" => "Trực tuyến", + "THONG_TIN_CA_NHAN" => "Thông tin cá nhân", + "DOI_MAT_KHAU" => "Đổi mật khẩu", + "DANG_XUAT" => "Đăng xuất", + "PHIEN_BAN" => "Phiên bản", + "ID" => "ID", + "LOAI" => "Loại", + "TEN" => "Tên", + "HINH_ANH_DANG_KI" => "Hình ảnh đăng kí", + "GIOI_TINH" => "Giới tính", + "NGAY_SINH" => "Ngày sinh", + "DIEN_THOAI" => "Điện thoại", + "DON_VI" => "Đơn vị", + "THOI_GIAN_DANG_KI" => "Thời gian đăng kí", + "TEN_HIEN_THI" => "Tên hiển thị", + "WHITE_LIST" => "Whitelist", + "BLACK_LIST" => "Blacklist", + "MALE" => "Nam", + "FEMALE" => "Nữ", + "TIM_KIEM_DU_LIEU" => "Tìm kiếm dữ liệu", + "TAT_CA" => "Tất cả", + "TIM_KIEM" => "Tìm kiếm", + "XOA_NHIEU_DU_LIEU" => "Xóa nhiều dữ liệu", + "CHON_TOAN_BO_TRANG" => "Chọn toàn bộ trang", + "BO_CHON" => "Bỏ chọn", + "XAC_NHAN_XOA" => "Xác nhận xóa", + "DONG_BO_VOI_MAY_CHU" => "Đồng bộ với máy chủ", + "DONG_BO_TU_MAY_CHU" => "Đồng bộ từ máy chủ", + "DONG_BO_LEN_MAY_CHU" => "Đồng bộ lên máy chủ", + "DONG_BO_TU_THIET_BI_KHAC" => "Đồng bộ từ thiết bị khác", + "NHAP_IP_THIET_BI" => "Nhập ip thiết bị", + "SO_NGUOI_CO_ANH_TREN_TONG" => "Số người có ảnh / tổng", + "DAC_TRUNG_1" => "Đặc trưng 1", + "DAC_TRUNG_2" => "Đặc trưng 2", + "DANG_CAP_NHAT" => "Đang cập nhật ...", + "THAO_TAC" => "Thao tác", + "SUA" => "Sửa", + "XOA" => "Xóa", + "DANH_SACH" => "Danh sách", + "LUU" => "Lưu", + "HUY" => "Hủy", + "HAY_CHON_DOI_TUONG" => "Hãy chọn đối tượng", + "HAY_NHAP_TEN" => "Hãy nhập tên", + "HAY_NHAP_TEN_HIEN_THI" => "Hãy nhập tên hiển thị", + "CAP_NHAT_DU_LIEU_THANH_CONG" => "Cập nhật dữ liệu thành công", + "MA_DOI_TUONG_DA_TON_TAI" => "Mã đối tượng đã tồn tại", + "DELETE_CONFIRM" => "Bạn có chắc chắn muốn xóa không", + "HAY_CHON_DU_LIEU_DE_XOA" => "Hãy chọn dữ liệu để xóa", + "DA_XOA_DU_LIEU" => "Đã xóa dữ liệu", + "CHON_HINH_ANH" => "Chọn hình ảnh", + "HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT" => "Hình ảnh không nhận diện được khuôn mặt", + "HAY_TAI_LEN_HINH_ANH" => "Hãy tải lên hình ảnh", + "HAY_NHAP_DIA_CHI_IP_DONG_BO" => "Hãy nhập địa chỉ ip thiết bị muốn đồng bộ", + "SAI_DINH_DANG_IP" => "Sai định dạng ip", + "TIM_KIEM_THEO_ID_HOAC_TEN" => "Tìm kiếm theo ID hoặc tên", + "KHONG_CO_KET_NOI_TOI_THIET_BI" => "Không có kết nối tới thiết bị", + "KHONG_CO_DU_LIEU_DONG_BO" => "Không có dữ liệu đồng bộ", + "DONG_BO_DU_LIEU_HOAN_THANH" => "Đồng bộ dữ liệu hoàn thành", + "SO_ANH_MAU_TOI_DA" => "Mỗi đối tượng chỉ nhận tối đa {maxPicture} hình ảnh mẫu", + "ANH_MAU_DA_DUOC_CHON" => "Hình ảnh này đã được chọn làm mẫu cho đối tượng này", + "KHONG_TIM_THAY_THONG_TIN" => "Không tìm thấy thông tin", + "HUY_BO_TIM_KIEM" => "Hủy bỏ tìm kiếm", + "DA_LUA_CHON_X_DOI_TUONG" => "Đã lựa chọn 0 đối tượng.", + "DONG_BO_X_Y_DOI_TUONG" => "Đồng bộ 0/0 đối tượng.", + "CHON_TAT_CA" => "Chọn tất cả", + "BO_CHON_TAT_CA" => "Bỏ chọn tất cả", + "DONG_BO" => "Đồng bộ", + "DONG_LAI" => "Đóng lại", + "COMPANY_ID" => "Company ID", + "CHON_DOI_TUONG_CHUA_TON_TAI" => "Chọn đối tượng chưa tồn tại", + "DU_LIEU_KHONG_DOI" => "Dữ liệu không đổi", + "THOI_GIAN" => "Thời gian", + "HINH_ANH" => "Hình ảnh", + "TRANG_THAI" => "Trạng thái", + "REMARK" => "Remark", + "DO_TIN_CAY" => "Độ tin cậy", + "TRANG_THAI_DONG_BO" => "Trạng thái đồng bộ", + "FROM" => "Từ", + "TO" => "Đến", + "HIEN_THI_TOAN_BO_DU_LIEU" => "Hiển thị toàn bộ dữ liệu", + "DOI_TUONG_KHONG_TON_TAI" => "Đối tượng không tồn tại", + "DA_THEM_HINH_ANH_MAU" => "Đã thêm hình ảnh mẫu", + "XUAT_DU_LIEU" => "Xuất dữ liệu", + "TEN_DANG_NHAP" => "Tên đăng nhập", + "HO_TEN" => "Họ tên", + "EMAIL" => "Email", + "LOAI_NGUOI_DUNG" => "Loại người dùng", + "THONG_TIN_DA_DUOC_LUU_LAI" => "Thông tin đã được lưu lại", + "DOI_MAT_KHAU" => "Đổi mật khẩu", + "MAT_KHAU_CU" => "Mật khẩu cũ", + "MAT_KHAU_MOI" => "Mật khẩu mới", + "NHAC_LAI_MAT_KHAU_MOI" => "Nhắc lại mật khẩu mới", + "DOI_MAT_KHAU_THANH_CONG" => "Đổi mật khẩu thành công", + "DANG_XU_LY" => "Đang xử lý ...", + "THONG_BAO" => "Thông báo", + "CO_LOI_XAY_RA_HAY_THU_LAI" => "Có lỗi xảy ra, có thể do đường truyền mạng, xin vui lòng thử lại" +]; diff --git a/messages/vi/app.php b/messages/vi/app.php index c89ad858..78ef2ad4 100644 --- a/messages/vi/app.php +++ b/messages/vi/app.php @@ -6,4 +6,129 @@ * and open the template in the editor. */ -return []; +return [ + "CAU_HINH" => "Cấu hình", + "CAU_HINH_THIET_BI" => "Cấu hình thiết bị", + "CAU_HINH_MAY_CHU" => "Cấu hình máy chủ", + "CAU_HINH_NHAN_DIEN" => "Cấu hình nhận diện", + "DEVICE_CONFIG" => "Device config", + "SERVER_CONFIG" => "Server config", + "ENGINE_CONFIG" => "Engine config", + "SERVER_MQTT" => "server_mqtt", + "URL" => "url", + "LUU_LAI" => "Lưu lại", + "HAY_NHAP_THONG_TIN" => "Hãy nhập thông tin", + "BOX_CHUA_DUOC_DANG_KI_TREN_CMS" => "Box chưa được đăng kí trên CMS", + "DA_LUU_CAU_HINH" => "Đã lưu cấu hình", + "LUU_CAU_HINH_THAT_BAI" => "Lưu cấu hình thất bại", + "RESET_THIET_BI" => "Reset thiết bị", + "XOA_DU_LIEU_LUU_TRU_TRONG_THIET_BI" => "Xóa dữ liệu lưu trữ trong thiết bị", + "RESET_CAU_HINH_THIET_BI" => "Reset cấu hình thiết bị", + "DONG_Y" => "Đồng ý", + "HUY_BO" => "Hủy bỏ", + "HAY_LUA_CHON_THAO_TAC" => "Hãy lựa chọn thao tác", + "DELETE_DB_CONFIRM" => "Bạn có chắc chắn muốn xóa dữ liệu lưu trữ trong thiết bị không?", + "RESET_DB_CONFIRM" => "Bạn có chắc chắn muốn reset cấu hình thiết bị không?", + "CAU_HINH_IP_CHUA_DUNG" => "Cấu hình ip chưa đúng", + "SERVER_API" => "Server API", + "DEVICE_ID" => "Device ID", + "QUAN_LY_MAU" => "Quản lý mẫu", + "LICH_SU_HE_THONG" => "Lịch sử hệ thống", + "DANH_SACH_NHAN_DIEN" => "Danh sách nhận diện", + "ONLINE" => "Trực tuyến", + "THONG_TIN_CA_NHAN" => "Thông tin cá nhân", + "DOI_MAT_KHAU" => "Đổi mật khẩu", + "DANG_XUAT" => "Đăng xuất", + "PHIEN_BAN" => "Phiên bản", + "ID" => "ID", + "LOAI" => "Loại", + "TEN" => "Tên", + "HINH_ANH_DANG_KI" => "Hình ảnh đăng kí", + "GIOI_TINH" => "Giới tính", + "NGAY_SINH" => "Ngày sinh", + "DIEN_THOAI" => "Điện thoại", + "DON_VI" => "Đơn vị", + "THOI_GIAN_DANG_KI" => "Thời gian đăng kí", + "TEN_HIEN_THI" => "Tên hiển thị", + "WHITE_LIST" => "Whitelist", + "BLACK_LIST" => "Blacklist", + "MALE" => "Nam", + "FEMALE" => "Nữ", + "TIM_KIEM_DU_LIEU" => "Tìm kiếm dữ liệu", + "TAT_CA" => "Tất cả", + "TIM_KIEM" => "Tìm kiếm", + "XOA_NHIEU_DU_LIEU" => "Xóa nhiều dữ liệu", + "CHON_TOAN_BO_TRANG" => "Chọn toàn bộ trang", + "BO_CHON" => "Bỏ chọn", + "XAC_NHAN_XOA" => "Xác nhận xóa", + "DONG_BO_VOI_MAY_CHU" => "Đồng bộ với máy chủ", + "DONG_BO_TU_MAY_CHU" => "Đồng bộ từ máy chủ", + "DONG_BO_LEN_MAY_CHU" => "Đồng bộ lên máy chủ", + "DONG_BO_TU_THIET_BI_KHAC" => "Đồng bộ từ thiết bị khác", + "NHAP_IP_THIET_BI" => "Nhập ip thiết bị", + "SO_NGUOI_CO_ANH_TREN_TONG" => "Số người có ảnh / tổng", + "DAC_TRUNG_1" => "Đặc trưng 1", + "DAC_TRUNG_2" => "Đặc trưng 2", + "DANG_CAP_NHAT" => "Đang cập nhật ...", + "THAO_TAC" => "Thao tác", + "SUA" => "Sửa", + "XOA" => "Xóa", + "DANH_SACH" => "Danh sách", + "LUU" => "Lưu", + "HUY" => "Hủy", + "HAY_CHON_DOI_TUONG" => "Hãy chọn đối tượng", + "HAY_NHAP_TEN" => "Hãy nhập tên", + "HAY_NHAP_TEN_HIEN_THI" => "Hãy nhập tên hiển thị", + "CAP_NHAT_DU_LIEU_THANH_CONG" => "Cập nhật dữ liệu thành công", + "MA_DOI_TUONG_DA_TON_TAI" => "Mã đối tượng đã tồn tại", + "DELETE_CONFIRM" => "Bạn có chắc chắn muốn xóa không", + "HAY_CHON_DU_LIEU_DE_XOA" => "Hãy chọn dữ liệu để xóa", + "DA_XOA_DU_LIEU" => "Đã xóa dữ liệu", + "CHON_HINH_ANH" => "Chọn hình ảnh", + "HINH_ANH_KHONG_NHAN_DIEN_DUOC_KHUON_MAT" => "Hình ảnh không nhận diện được khuôn mặt", + "HAY_TAI_LEN_HINH_ANH" => "Hãy tải lên hình ảnh", + "HAY_NHAP_DIA_CHI_IP_DONG_BO" => "Hãy nhập địa chỉ ip thiết bị muốn đồng bộ", + "SAI_DINH_DANG_IP" => "Sai định dạng ip", + "TIM_KIEM_THEO_ID_HOAC_TEN" => "Tìm kiếm theo ID hoặc tên", + "KHONG_CO_KET_NOI_TOI_THIET_BI" => "Không có kết nối tới thiết bị", + "KHONG_CO_DU_LIEU_DONG_BO" => "Không có dữ liệu đồng bộ", + "DONG_BO_DU_LIEU_HOAN_THANH" => "Đồng bộ dữ liệu hoàn thành", + "SO_ANH_MAU_TOI_DA" => "Mỗi đối tượng chỉ nhận tối đa {maxPicture} hình ảnh mẫu", + "ANH_MAU_DA_DUOC_CHON" => "Hình ảnh này đã được chọn làm mẫu cho đối tượng này", + "KHONG_TIM_THAY_THONG_TIN" => "Không tìm thấy thông tin", + "HUY_BO_TIM_KIEM" => "Hủy bỏ tìm kiếm", + "DA_LUA_CHON_X_DOI_TUONG" => "Đã lựa chọn 0 đối tượng.", + "DONG_BO_X_Y_DOI_TUONG" => "Đồng bộ 0/0 đối tượng.", + "CHON_TAT_CA" => "Chọn tất cả", + "BO_CHON_TAT_CA" => "Bỏ chọn tất cả", + "DONG_BO" => "Đồng bộ", + "DONG_LAI" => "Đóng lại", + "COMPANY_ID" => "Company ID", + "CHON_DOI_TUONG_CHUA_TON_TAI" => "Chọn đối tượng chưa tồn tại", + "DU_LIEU_KHONG_DOI" => "Dữ liệu không đổi", + "THOI_GIAN" => "Thời gian", + "HINH_ANH" => "Hình ảnh", + "TRANG_THAI" => "Trạng thái", + "REMARK" => "Remark", + "DO_TIN_CAY" => "Độ tin cậy", + "TRANG_THAI_DONG_BO" => "Trạng thái đồng bộ", + "FROM" => "Từ", + "TO" => "Đến", + "HIEN_THI_TOAN_BO_DU_LIEU" => "Hiển thị toàn bộ dữ liệu", + "DOI_TUONG_KHONG_TON_TAI" => "Đối tượng không tồn tại", + "DA_THEM_HINH_ANH_MAU" => "Đã thêm hình ảnh mẫu", + "XUAT_DU_LIEU" => "Xuất dữ liệu", + "TEN_DANG_NHAP" => "Tên đăng nhập", + "HO_TEN" => "Họ tên", + "EMAIL" => "Email", + "LOAI_NGUOI_DUNG" => "Loại người dùng", + "THONG_TIN_DA_DUOC_LUU_LAI" => "Thông tin đã được lưu lại", + "DOI_MAT_KHAU" => "Đổi mật khẩu", + "MAT_KHAU_CU" => "Mật khẩu cũ", + "MAT_KHAU_MOI" => "Mật khẩu mới", + "NHAC_LAI_MAT_KHAU_MOI" => "Nhắc lại mật khẩu mới", + "DOI_MAT_KHAU_THANH_CONG" => "Đổi mật khẩu thành công", + "DANG_XU_LY" => "Đang xử lý ...", + "THONG_BAO" => "Thông báo", + "CO_LOI_XAY_RA_HAY_THU_LAI" => "Có lỗi xảy ra, có thể do đường truyền mạng, xin vui lòng thử lại" +]; diff --git a/models/CaptureLogs.php b/models/CaptureLogs.php index b36da7cf..df8741e0 100644 --- a/models/CaptureLogs.php +++ b/models/CaptureLogs.php @@ -40,15 +40,15 @@ class CaptureLogs extends \yii\db\ActiveRecord { */ public function attributeLabels() { return [ - 'id' => 'ID', - 'time' => 'Thời gian', - 'image' => 'Hình ảnh', - 'status' => 'Status', - 'remark' => 'Remark', - 'staff_name' => "Name", - 'staff_image' => "Hình ảnh đăng kí", - 'confidence' => 'Độ tin cậy', - 'sync_status' => 'Trạng thái đồng bộ' + 'id' => Yii::t("app", "ID"), + 'time' => Yii::t("app", "THOI_GIAN"), + 'image' => Yii::t("app", "HINH_ANH"), + 'status' => Yii::t("app", "TRANG_THAI"), + 'remark' => Yii::t("app", "REMARK"), + 'staff_name' => Yii::t("app", "TEN"), + 'staff_image' => Yii::t("app", "HINH_ANH_DANG_KI"), + 'confidence' => Yii::t("app", "DO_TIN_CAY"), + 'sync_status' => Yii::t("app", "TRANG_THAI_DONG_BO") ]; } diff --git a/models/ListManagement.php b/models/ListManagement.php index 77df9907..e7370c60 100644 --- a/models/ListManagement.php +++ b/models/ListManagement.php @@ -45,19 +45,19 @@ class ListManagement extends \yii\db\ActiveRecord { */ public function attributeLabels() { return [ - 'id' => 'ID', - 'code' => 'ID', - 'type' => 'Loại', - 'name' => 'Tên', - 'image' => 'Hình ảnh đăng kí', - 'gender' => 'Giới tính', - 'birthday' => 'Ngày sinh', - 'telephone' => 'Điện thoại', - 'address' => 'Đơn vị', - 'time' => 'Thời gian đăng kí', + 'id' => Yii::t("app", "ID"), + 'code' => Yii::t("app", "ID"), + 'type' => Yii::t("app", "LOAI"), + 'name' => Yii::t("app", "TEN"), + 'image' => Yii::t("app", "HINH_ANH_DANG_KI"), + 'gender' => Yii::t("app", "GIOI_TINH"), + 'birthday' => Yii::t("app", "NGAY_SINH"), + 'telephone' => Yii::t("app", "DIEN_THOAI"), + 'address' => Yii::t("app", "DON_VI"), + 'time' => Yii::t("app", "THOI_GIAN_DANG_KI"), 'last_modified' => 'Last Modified', - 'abbreviated_name' => 'Tên hiển thị', - 'staff_id' => 'ID' + 'abbreviated_name' => Yii::t("app", "TEN_HIEN_THI"), + 'staff_id' => Yii::t("app", "ID"), ]; } @@ -86,14 +86,19 @@ class ListManagement extends \yii\db\ActiveRecord { } } - public static $typeArray = [ - "wl" => "Whitelist", - "bl" => "Blacklist" - ]; - public static $genderArray = [ - "Male" => "Nam", - "Female" => "Nữ" - ]; + public static function typeArray() { + return [ + "wl" => Yii::t("app", "WHITE_LIST"), + "bl" => Yii::t("app", "BLACK_LIST") + ]; + } + + public static function genderArray() { + return [ + "Male" => Yii::t("app", "MALE"), + "Female" => Yii::t("app", "FEMALE"), + ]; + } public static function nameArray() { $res = [""]; diff --git a/models/common.php b/models/common.php index 61733497..7f41f20b 100644 --- a/models/common.php +++ b/models/common.php @@ -220,4 +220,12 @@ class common extends \yii\db\ActiveRecord { return $str; } + public static function allLanguage() { + return [ + ["icon" => "vi.png", "name" => "vi-VI", "description" => "Tiếng Việt"], + ["icon" => "en.png", "name" => "en-EN", "description" => "English"], + ["icon" => "jp.png", "name" => "ja-JA", "description" => "Japanese"] + ]; + } + } diff --git a/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/content.php b/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/content.php index 7549557d..0d80cfc6 100644 --- a/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/content.php +++ b/vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/content.php @@ -23,7 +23,7 @@ use dmstr\widgets\Alert;