From 9c7ef5cc4be06ed30b636b8655a8f593b7d200d8 Mon Sep 17 00:00:00 2001 From: Purvesh Date: Sun, 9 Nov 2025 11:28:42 +1300 Subject: [PATCH 1/2] using user locale --- resources/locales/en.json | 1 + src/api/admin_user_api.rs | 24 ++++++++++++------- .../change_admin_user_password_request.rs | 10 ++++---- .../delete_admin_user_request.rs | 4 ++-- .../delete_role_request.rs | 4 ++-- src/requests/admin_user_request/mod.rs | 3 +++ .../put_role_identifier_request.rs | 6 ++--- .../store_admin_user_request.rs | 14 +++++------ .../admin_user_request/store_role_request.rs | 8 +++---- .../update_admin_user_request.rs | 6 ++--- .../admin_user_request/update_role_request.rs | 4 ++-- src/requests/auth_request/mod.rs | 2 -- 12 files changed, 48 insertions(+), 38 deletions(-) rename src/requests/{auth_request => admin_user_request}/delete_role_request.rs (80%) diff --git a/resources/locales/en.json b/resources/locales/en.json index 152b86ce..a9baf317 100644 --- a/resources/locales/en.json +++ b/resources/locales/en.json @@ -20,5 +20,6 @@ "validation_required": "%{attribute} is a required field.", "validation_count": "The given %{attribute} has to be unique.", "email_password_not_matched": "Email and Password did not match.", + "validation_invalid_local": "The given %{provided_locale} is not valid locale. System is not supported for this locale.", "admin_user_forbidden": "You are not allowed to perform this request. Please check with your administrator." } diff --git a/src/api/admin_user_api.rs b/src/api/admin_user_api.rs index 660f0b4a..6260140c 100644 --- a/src/api/admin_user_api.rs +++ b/src/api/admin_user_api.rs @@ -94,8 +94,9 @@ impl AdminUser for AdminUserApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let request_data = request.into_inner(); - request_data.validate(&self.state).await?; + request_data.validate(&self.state, user_locale).await?; match self @@ -178,8 +179,9 @@ impl AdminUser for AdminUserApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate().await?; + req.validate(user_locale).await?; match self .state @@ -282,8 +284,9 @@ impl AdminUser for AdminUserApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate(&self.state).await?; + req.validate(&self.state, user_locale).await?; let created_role_request = CreatableRole { name: req.name, @@ -355,8 +358,9 @@ impl AdminUser for AdminUserApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate()?; + req.validate(user_locale)?; match self .state @@ -394,8 +398,9 @@ impl AdminUser for AdminUserApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate(&self.state).await?; + req.validate(&self.state, user_locale).await?; match self .state @@ -430,8 +435,9 @@ impl AdminUser for AdminUserApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate()?; + req.validate(user_locale)?; match self .state @@ -469,8 +475,9 @@ impl AdminUser for AdminUserApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate()?; + req.validate(user_locale)?; match self .state @@ -508,8 +515,9 @@ impl AdminUser for AdminUserApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate()?; + req.validate(user_locale)?; match self .state diff --git a/src/requests/admin_user_request/change_admin_user_password_request.rs b/src/requests/admin_user_request/change_admin_user_password_request.rs index a5d916e5..4c50f470 100644 --- a/src/requests/admin_user_request/change_admin_user_password_request.rs +++ b/src/requests/admin_user_request/change_admin_user_password_request.rs @@ -6,14 +6,14 @@ use rust_i18n::t; impl ChangeAdminUserPasswordRequest { /// validate - pub fn validate(&self) -> crate::error::Result<()> { + pub fn validate(&self, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.password.required()? { let error_message = ErrorMessage { key: String::from("password"), - message: t!("validation_required", attribute = t!("password")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("password", locale = locale)).to_string(), }; valid = false; errors.push(error_message); @@ -22,7 +22,7 @@ impl ChangeAdminUserPasswordRequest { if !self.new_password.required()? { let error_message = ErrorMessage { key: String::from("new_password"), - message: t!("validation_required", attribute = t!("new_password")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("new_password", locale = locale)).to_string(), }; valid = false; errors.push(error_message); @@ -31,7 +31,7 @@ impl ChangeAdminUserPasswordRequest { if !self.confirm_password.required()? { let error_message = ErrorMessage { key: String::from("confirm_password"), - message: t!("validation_required", attribute = t!("confirm_password")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("confirm_password", locale = locale)).to_string(), }; valid = false; errors.push(error_message); @@ -40,7 +40,7 @@ impl ChangeAdminUserPasswordRequest { if self.new_password != self.confirm_password { let error_message = ErrorMessage { key: String::from("confirm_password"), - message: t!("validation_confirmed", attribute = t!("confirm_password")).to_string(), + message: t!("validation_confirmed", locale = locale, attribute = t!("confirm_password", locale = locale)).to_string(), }; valid = false; errors.push(error_message); diff --git a/src/requests/admin_user_request/delete_admin_user_request.rs b/src/requests/admin_user_request/delete_admin_user_request.rs index 5cd2251c..45cd1d90 100644 --- a/src/requests/admin_user_request/delete_admin_user_request.rs +++ b/src/requests/admin_user_request/delete_admin_user_request.rs @@ -6,14 +6,14 @@ use rust_i18n::t; impl DeleteAdminUserRequest { /// validate - pub fn validate(&self) -> crate::error::Result<()> { + pub fn validate(&self, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.admin_user_id.required()? { let error_message = ErrorMessage { key: String::from("admin_user"), - message: t!("validation_required", attribute = t!("admin_user")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("admin_user", locale = locale)).to_string(), }; valid = false; errors.push(error_message); diff --git a/src/requests/auth_request/delete_role_request.rs b/src/requests/admin_user_request/delete_role_request.rs similarity index 80% rename from src/requests/auth_request/delete_role_request.rs rename to src/requests/admin_user_request/delete_role_request.rs index 51842fde..5b6df7dd 100644 --- a/src/requests/auth_request/delete_role_request.rs +++ b/src/requests/admin_user_request/delete_role_request.rs @@ -6,14 +6,14 @@ use rust_i18n::t; impl DeleteRoleRequest { /// validate - pub fn validate(&self) -> crate::error::Result<()> { + pub fn validate(&self, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.role_id.required()? { let error_message = ErrorMessage { key: String::from("role_id"), - message: t!("validation_required", attribute = t!("role_id")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("role_id", locale = locale)).to_string(), }; valid = false; errors.push(error_message); diff --git a/src/requests/admin_user_request/mod.rs b/src/requests/admin_user_request/mod.rs index cb74a0b3..79e7afc2 100644 --- a/src/requests/admin_user_request/mod.rs +++ b/src/requests/admin_user_request/mod.rs @@ -12,3 +12,6 @@ pub mod update_admin_user_request; pub mod update_role_request; /// change admin user password request pub mod change_admin_user_password_request; + +/// delete role request +pub mod delete_role_request; diff --git a/src/requests/admin_user_request/put_role_identifier_request.rs b/src/requests/admin_user_request/put_role_identifier_request.rs index 4deccb79..c0552f24 100644 --- a/src/requests/admin_user_request/put_role_identifier_request.rs +++ b/src/requests/admin_user_request/put_role_identifier_request.rs @@ -5,14 +5,14 @@ use rust_i18n::t; impl PutRoleIdentifierRequest { /// validate - pub async fn validate(&self, state: &AvoRedState) -> crate::error::Result<()> { + pub async fn validate(&self, state: &AvoRedState, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if self.identifier.is_empty() { let error_message = ErrorMessage { key: String::from("identifier"), - message: t!("validation_required", attribute = t!("identifier")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("identifier", locale = locale)).to_string(), }; valid = false; @@ -27,7 +27,7 @@ impl PutRoleIdentifierRequest { if role_identifier_count.total > 0 { let error_message = ErrorMessage { key: String::from("email"), - message: t!("validation_count", attribute = t!("email")).to_string(), + message: t!("validation_count", locale = locale, attribute = t!("email", locale = locale)).to_string(), }; valid = false; diff --git a/src/requests/admin_user_request/store_admin_user_request.rs b/src/requests/admin_user_request/store_admin_user_request.rs index 29361f62..97c5c2a1 100644 --- a/src/requests/admin_user_request/store_admin_user_request.rs +++ b/src/requests/admin_user_request/store_admin_user_request.rs @@ -6,14 +6,14 @@ use std::path::Path; impl StoreAdminUserRequest { /// validate - pub async fn validate(&self, state: &AvoRedState) -> crate::error::Result<()> { + pub async fn validate(&self, state: &AvoRedState, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.email.required()? { let error_message = ErrorMessage { key: String::from("email"), - message: t!("validation_required", attribute = t!("email")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("email", locale = locale)).to_string(), }; valid = false; errors.push(error_message); @@ -22,7 +22,7 @@ impl StoreAdminUserRequest { if !self.email.validate_email()? { let error_message = ErrorMessage { key: String::from("email"), - message: t!("email_address_not_valid").to_string(), + message: t!("email_address_not_valid", locale = locale).to_string(), }; valid = false; @@ -37,7 +37,7 @@ impl StoreAdminUserRequest { if admin_user_model.total > 0 { let error_message = ErrorMessage { key: String::from("email"), - message: t!("validation_count", attribute = t!("email")).to_string(), + message: t!("validation_count", locale = locale, attribute = t!("email", locale = locale)).to_string(), }; errors.push(error_message); @@ -47,7 +47,7 @@ impl StoreAdminUserRequest { if !self.password.required()? { let error_message = ErrorMessage { key: String::from("password"), - message: t!("validation_required", attribute = t!("password")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("password", locale = locale)).to_string(), }; valid = false; @@ -57,7 +57,7 @@ impl StoreAdminUserRequest { if self.password != self.confirm_password { let error_message = ErrorMessage { key: String::from("password"), - message: t!("password_match_error").to_string(), + message: t!("password_match_error", locale = locale).to_string(), }; valid = false; @@ -70,7 +70,7 @@ impl StoreAdminUserRequest { if !locale_path.exists() { let error_message = ErrorMessage { key: String::from("locale"), - message: t!("validation_invalid", attribute = t!("locale")).to_string(), + message: t!("validation_invalid", locale = locale , attribute = t!("locale", locale = locale)).to_string(), }; valid = false; diff --git a/src/requests/admin_user_request/store_role_request.rs b/src/requests/admin_user_request/store_role_request.rs index 62740d45..d0339177 100644 --- a/src/requests/admin_user_request/store_role_request.rs +++ b/src/requests/admin_user_request/store_role_request.rs @@ -5,14 +5,14 @@ use rust_i18n::t; impl StoreRoleRequest { /// validate - pub async fn validate(&self, state: &AvoRedState) -> crate::error::Result<()> { + pub async fn validate(&self, state: &AvoRedState, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if self.name.is_empty() { let error_message = ErrorMessage { key: String::from("name"), - message: t!("validation_required", attribute = t!("name")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("name", locale = locale)).to_string(), }; valid = false; @@ -22,7 +22,7 @@ impl StoreRoleRequest { if self.identifier.is_empty() { let error_message = ErrorMessage { key: String::from("identifier"), - message: t!("validation_required", attribute = t!("identifier")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("identifier", locale = locale)).to_string(), }; valid = false; @@ -37,7 +37,7 @@ impl StoreRoleRequest { if role_identifier_count.total > 0 { let error_message = ErrorMessage { key: String::from("email"), - message: t!("validation_count", attribute = t!("email")).to_string(), + message: t!("validation_count", locale = locale ,attribute = t!("email", locale = locale)).to_string(), }; valid = false; diff --git a/src/requests/admin_user_request/update_admin_user_request.rs b/src/requests/admin_user_request/update_admin_user_request.rs index 63a55296..ded4db08 100644 --- a/src/requests/admin_user_request/update_admin_user_request.rs +++ b/src/requests/admin_user_request/update_admin_user_request.rs @@ -5,14 +5,14 @@ use std::path::Path; impl UpdateAdminUserRequest { /// validate - pub async fn validate(&self) -> crate::error::Result<()> { + pub async fn validate(&self, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.full_name.required()? { let error_message = ErrorMessage { key: String::from("full_name"), - message: t!("validation_required", attribute = t!("full_name")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("full_name", locale = locale)).to_string(), }; valid = false; @@ -25,7 +25,7 @@ impl UpdateAdminUserRequest { if !locale_path.exists() { let error_message = ErrorMessage { key: String::from("locale"), - message: t!("validation_invalid", attribute = t!("locale")).to_string(), + message: t!("validation_invalid_local", locale = locale , provided_locale = t!("locale")).to_string(), }; valid = false; diff --git a/src/requests/admin_user_request/update_role_request.rs b/src/requests/admin_user_request/update_role_request.rs index c8b38029..ca9b28d8 100644 --- a/src/requests/admin_user_request/update_role_request.rs +++ b/src/requests/admin_user_request/update_role_request.rs @@ -4,14 +4,14 @@ use rust_i18n::t; impl UpdateRoleRequest { /// validate - pub fn validate(&self) -> crate::error::Result<()> { + pub fn validate(&self, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if self.name.is_empty() { let error_message = ErrorMessage { key: String::from("name"), - message: t!("validation_required", attribute = t!("name")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("name", locale = locale)).to_string(), }; valid = false; diff --git a/src/requests/auth_request/mod.rs b/src/requests/auth_request/mod.rs index 3fdc21ae..81a86fe1 100644 --- a/src/requests/auth_request/mod.rs +++ b/src/requests/auth_request/mod.rs @@ -1,5 +1,3 @@ -/// delete role request -pub mod delete_role_request; /// forgot password request pub mod forgot_password_request; /// login request From 92d82e9cb99dea251921696ec7d916a75e782b67 Mon Sep 17 00:00:00 2001 From: Purvesh Date: Sun, 9 Nov 2025 15:54:44 +1300 Subject: [PATCH 2/2] using user locale --- resources/locales/fr.json | 4 +++- src/api/content_api.rs | 18 ++++++++++++------ src/repositories/security_alert_repository.rs | 1 + .../admin_user_request/store_role_request.rs | 2 +- .../content_request/delete_content_request.rs | 6 +++--- .../put_content_identifier_request.rs | 6 +++--- .../store_collection_request.rs | 8 ++++---- .../content_request/store_content_request.rs | 8 ++++---- .../update_collection_request.rs | 4 ++-- .../content_request/update_content_request.rs | 4 ++-- .../src/pages/admin_user/AdminUserEditPage.tsx | 5 ++--- 11 files changed, 37 insertions(+), 29 deletions(-) diff --git a/resources/locales/fr.json b/resources/locales/fr.json index 963c65c7..7d49dbc3 100644 --- a/resources/locales/fr.json +++ b/resources/locales/fr.json @@ -1,3 +1,5 @@ { - "name": "french" + "name": "french", + "email_address_not_valid": "french Email address is not valid", + "validation_required": "french %{attribute} is a required field." } diff --git a/src/api/content_api.rs b/src/api/content_api.rs index 7044b533..82a3cba4 100644 --- a/src/api/content_api.rs +++ b/src/api/content_api.rs @@ -104,8 +104,9 @@ impl Content for ContentApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate(&self.state).await?; + req.validate(&self.state, user_locale).await?; match self .state @@ -174,8 +175,9 @@ impl Content for ContentApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate().await?; + req.validate(user_locale).await?; match self .state @@ -213,8 +215,9 @@ impl Content for ContentApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate(&self.state).await?; + req.validate(&self.state, user_locale).await?; match self .state @@ -282,8 +285,9 @@ impl Content for ContentApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate(&self.state).await?; + req.validate(&self.state, user_locale).await?; match self .state @@ -318,8 +322,9 @@ impl Content for ContentApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate()?; + req.validate(user_locale)?; match self .state @@ -354,8 +359,9 @@ impl Content for ContentApi { ) .await?; + let user_locale = logged_in_user.locale.clone(); let req = request.into_inner(); - req.validate()?; + req.validate(user_locale)?; match self .state diff --git a/src/repositories/security_alert_repository.rs b/src/repositories/security_alert_repository.rs index 8244eb4d..b6926a30 100644 --- a/src/repositories/security_alert_repository.rs +++ b/src/repositories/security_alert_repository.rs @@ -32,6 +32,7 @@ impl SecurityAlertRepository { createable_security_alert_model: CreateSecurityAlertModel, ) -> Result { // Validate the input + createable_security_alert_model.validate()?; let sql = r" diff --git a/src/requests/admin_user_request/store_role_request.rs b/src/requests/admin_user_request/store_role_request.rs index d0339177..5e9dae04 100644 --- a/src/requests/admin_user_request/store_role_request.rs +++ b/src/requests/admin_user_request/store_role_request.rs @@ -37,7 +37,7 @@ impl StoreRoleRequest { if role_identifier_count.total > 0 { let error_message = ErrorMessage { key: String::from("email"), - message: t!("validation_count", locale = locale ,attribute = t!("email", locale = locale)).to_string(), + message: t!("validation_count", locale = locale, attribute = t!("email", locale = locale)).to_string(), }; valid = false; diff --git a/src/requests/content_request/delete_content_request.rs b/src/requests/content_request/delete_content_request.rs index 457b29ad..5cdecd68 100644 --- a/src/requests/content_request/delete_content_request.rs +++ b/src/requests/content_request/delete_content_request.rs @@ -4,14 +4,14 @@ use rust_i18n::t; impl DeleteContentRequest { /// validate - pub fn validate(&self) -> crate::error::Result<()> { + pub fn validate(&self, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.content_id.required()? { let error_message = ErrorMessage { key: String::from("name"), - message: t!("validation_required", attribute = t!("content_id")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("content_id", locale = locale)).to_string(), }; valid = false; errors.push(error_message); @@ -20,7 +20,7 @@ impl DeleteContentRequest { if !self.content_type.required()? { let error_message = ErrorMessage { key: String::from("name"), - message: t!("validation_required", attribute = t!("content_type")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("content_type", locale = locale)).to_string(), }; valid = false; errors.push(error_message); diff --git a/src/requests/content_request/put_content_identifier_request.rs b/src/requests/content_request/put_content_identifier_request.rs index a8a4ac55..75576e74 100644 --- a/src/requests/content_request/put_content_identifier_request.rs +++ b/src/requests/content_request/put_content_identifier_request.rs @@ -5,14 +5,14 @@ use rust_i18n::t; impl PutContentIdentifierRequest { /// validate - pub async fn validate(&self, state: &AvoRedState) -> crate::error::Result<()> { + pub async fn validate(&self, state: &AvoRedState, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if self.identifier.is_empty() { let error_message = ErrorMessage { key: String::from("identifier"), - message: t!("validation_required", attribute = t!("identifier")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("identifier", locale = locale)).to_string(), }; valid = false; @@ -27,7 +27,7 @@ impl PutContentIdentifierRequest { if role_identifier_count.total > 0 { let error_message = ErrorMessage { key: String::from("email"), - message: t!("validation_count", attribute = t!("email")).to_string(), + message: t!("validation_count", locale = locale, attribute = t!("email", locale = locale)).to_string(), }; valid = false; diff --git a/src/requests/content_request/store_collection_request.rs b/src/requests/content_request/store_collection_request.rs index 8180c4ee..e7e22649 100644 --- a/src/requests/content_request/store_collection_request.rs +++ b/src/requests/content_request/store_collection_request.rs @@ -5,14 +5,14 @@ use rust_i18n::t; impl StoreCollectionRequest { /// validate - pub async fn validate(&self, state: &AvoRedState) -> crate::error::Result<()> { + pub async fn validate(&self, state: &AvoRedState, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.name.required()? { let error_message = ErrorMessage { key: String::from("name"), - message: t!("validation_required", attribute = t!("name")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("name", locale = locale)).to_string(), }; valid = false; errors.push(error_message); @@ -26,7 +26,7 @@ impl StoreCollectionRequest { if model_counte.total > 0 { let error_message = ErrorMessage { key: String::from("identifier"), - message: t!("validation_count", attribute = t!("identifier")).to_string(), + message: t!("validation_count", locale = locale, attribute = t!("identifier", locale = locale)).to_string(), }; errors.push(error_message); @@ -36,7 +36,7 @@ impl StoreCollectionRequest { if !self.identifier.required()? { let error_message = ErrorMessage { key: String::from("identifier"), - message: t!("validation_required", attribute = t!("identifier")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("identifier", locale = locale)).to_string(), }; valid = false; diff --git a/src/requests/content_request/store_content_request.rs b/src/requests/content_request/store_content_request.rs index 949b9ea6..347b3c54 100644 --- a/src/requests/content_request/store_content_request.rs +++ b/src/requests/content_request/store_content_request.rs @@ -5,14 +5,14 @@ use rust_i18n::t; impl StoreContentRequest { /// validate - pub async fn validate(&self, state: &AvoRedState) -> crate::error::Result<()> { + pub async fn validate(&self, state: &AvoRedState, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.name.required()? { let error_message = ErrorMessage { key: String::from("name"), - message: t!("validation_required", attribute = t!("name")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("name", locale = locale)).to_string(), }; valid = false; errors.push(error_message); @@ -26,7 +26,7 @@ impl StoreContentRequest { if model_counte.total > 0 { let error_message = ErrorMessage { key: String::from("identifier"), - message: t!("validation_count", attribute = t!("identifier")).to_string(), + message: t!("validation_count", locale = locale, attribute = t!("identifier", locale = locale)).to_string(), }; errors.push(error_message); @@ -36,7 +36,7 @@ impl StoreContentRequest { if !self.identifier.required()? { let error_message = ErrorMessage { key: String::from("identifier"), - message: t!("validation_required", attribute = t!("identifier")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("identifier", locale = locale)).to_string(), }; valid = false; diff --git a/src/requests/content_request/update_collection_request.rs b/src/requests/content_request/update_collection_request.rs index 86c20d3e..24d58fcc 100644 --- a/src/requests/content_request/update_collection_request.rs +++ b/src/requests/content_request/update_collection_request.rs @@ -4,14 +4,14 @@ use rust_i18n::t; impl UpdateCollectionRequest { /// validate - pub fn validate(&self) -> crate::error::Result<()> { + pub fn validate(&self, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.name.required()? { let error_message = ErrorMessage { key: String::from("name"), - message: t!("validation_required", attribute = t!("name")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("name", locale = locale)).to_string(), }; valid = false; errors.push(error_message); diff --git a/src/requests/content_request/update_content_request.rs b/src/requests/content_request/update_content_request.rs index 7649b7bc..d9927c92 100644 --- a/src/requests/content_request/update_content_request.rs +++ b/src/requests/content_request/update_content_request.rs @@ -4,14 +4,14 @@ use rust_i18n::t; impl UpdateContentRequest { /// validate - pub async fn validate(&self) -> crate::error::Result<()> { + pub async fn validate(&self, locale: String) -> crate::error::Result<()> { let mut errors: Vec = vec![]; let mut valid = true; if !self.name.required()? { let error_message = ErrorMessage { key: String::from("name"), - message: t!("validation_required", attribute = t!("name")).to_string(), + message: t!("validation_required", locale = locale, attribute = t!("name", locale = locale)).to_string(), }; valid = false; errors.push(error_message); diff --git a/ts-grpc-vite-admin/src/pages/admin_user/AdminUserEditPage.tsx b/ts-grpc-vite-admin/src/pages/admin_user/AdminUserEditPage.tsx index cb22f056..77f33f6d 100644 --- a/ts-grpc-vite-admin/src/pages/admin_user/AdminUserEditPage.tsx +++ b/ts-grpc-vite-admin/src/pages/admin_user/AdminUserEditPage.tsx @@ -99,9 +99,9 @@ export const AdminUserEditPage = () => { update_admin_user.setLocale(data.locale || "en") var profile_image_file_name = "" - const file: File = data.profile_image[0]; + const file: File | undefined = _.get(data, 'profile_image.0', undefined); - if (file) { + if (file instanceof File) { profile_image_file_name = _.get(data, "profile_image.0.name", "user_profile_image_name.jpg"); const reader = new FileReader() @@ -117,7 +117,6 @@ export const AdminUserEditPage = () => { } reader.readAsArrayBuffer(file) } else { - mutate(update_admin_user) }