Update generic remove member error message to be more actionable#87249
Update generic remove member error message to be more actionable#87249
Conversation
The generic remove member error now indicates that the failure may be caused by an issue with another member, guiding users to resolve errors before retrying. Updated across all locale files. Co-authored-by: Pujan Shah <Pujan92@users.noreply.github.com>
🦜 Polyglot Parrot! 🦜Squawk! Looks like you added some shiny new English strings. Allow me to parrot them back to you in other tongues: View the translation diffdiff --git a/src/languages/de.ts b/src/languages/de.ts
index 9b7d7878..6ac7cc47 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -5871,7 +5871,7 @@ _Für ausführlichere Anweisungen [besuchen Sie unsere Hilfeseite](${CONST.NETSU
genericAdd: 'Beim Hinzufügen dieses Workspace-Mitglieds ist ein Problem aufgetreten',
cannotRemove: 'Du kannst dich selbst oder den/die Workspace-Inhaber:in nicht entfernen',
genericRemove:
- 'Dieses Mitglied konnte nicht entfernt werden. Dies kann an einem Problem mit einem anderen Mitglied liegen. Bitte beheben Sie alle Fehler und versuchen Sie es erneut.',
+ 'Dieses Mitglied konnte nicht entfernt werden. Dies kann durch ein Problem mit einem anderen Mitglied verursacht werden. Bitte beheben Sie alle Fehler und versuchen Sie es erneut.',
},
addedWithPrimary: 'Einige Mitglieder wurden mit ihren primären Anmeldungen hinzugefügt.',
invitedBySecondaryLogin: (secondaryLogin: string) => `Hinzugefügt durch sekundären Login ${secondaryLogin}.`,
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 43cadcbe..41e92a34 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -5890,7 +5890,7 @@ _Pour des instructions plus détaillées, [visitez notre site d’aide](${CONST.
error: {
genericAdd: 'Un problème est survenu lors de l’ajout de ce membre de l’espace de travail',
cannotRemove: 'Vous ne pouvez pas vous supprimer vous-même ni supprimer le responsable de l’espace de travail',
- genericRemove: 'Impossible de supprimer ce membre. Cela peut être dû à un problème avec un autre membre. Veuillez résoudre les erreurs et réessayer.',
+ genericRemove: 'Impossible de supprimer ce membre. Cela peut être dû à un problème avec un autre membre. Veuillez résoudre toutes les erreurs, puis réessayer.',
},
addedWithPrimary: 'Certains membres ont été ajoutés avec leurs identifiants principaux.',
invitedBySecondaryLogin: (secondaryLogin: string) => `Ajouté par la connexion secondaire ${secondaryLogin}.`,
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 8f129ed4..8dcd8860 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -1096,15 +1096,12 @@ const translations: TranslationDeepObject<typeof en> = {
if (!added && !updated) {
return 'Nessuna categoria è stata aggiunta o aggiornata.';
}
-
if (added && updated) {
return `${added} ${added === 1 ? 'categoria aggiunta' : 'categorie aggiunte'}, ${updated} ${updated === 1 ? 'categoria aggiornata' : 'categorie aggiornate'}.`;
}
-
if (added) {
return added === 1 ? 'È stata aggiunta 1 categoria.' : `Sono state aggiunte ${added} categorie.`;
}
-
return updated === 1 ? 'È stata aggiornata 1 categoria.' : `Sono state aggiornate ${updated} categorie.`;
},
importCompanyCardTransactionsSuccessfulDescription: ({transactions}: {transactions: number}) =>
@@ -5861,7 +5858,7 @@ _Per istruzioni più dettagliate, [visita il nostro sito di assistenza](${CONST.
error: {
genericAdd: "Si è verificato un problema nell'aggiungere questo membro dello spazio di lavoro",
cannotRemove: 'Non puoi rimuovere te stessə o il proprietario dello spazio di lavoro',
- genericRemove: 'Impossibile rimuovere questo membro. Potrebbe essere causato da un problema con un altro membro. Risolvi eventuali errori e riprova.',
+ genericRemove: 'Impossibile rimuovere questo membro. Questo potrebbe essere dovuto a un problema con un altro membro. Risolvi eventuali errori e riprova.',
},
addedWithPrimary: 'Alcuni membri sono stati aggiunti con i loro accessi principali.',
invitedBySecondaryLogin: (secondaryLogin: string) => `Aggiunto dall’accesso secondario ${secondaryLogin}.`,
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index fb2ed68a..b3f13543 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -1079,15 +1079,12 @@ const translations: TranslationDeepObject<typeof en> = {
if (!added && !updated) {
return 'カテゴリーは追加も更新もされていません。';
}
-
if (added && updated) {
return `${added}件のカテゴリーを追加し、${updated}件のカテゴリーを更新しました。`;
}
-
if (added) {
return added === 1 ? 'カテゴリーを1件追加しました。' : `${added}件のカテゴリーを追加しました。`;
}
-
return updated === 1 ? 'カテゴリーを1件更新しました。' : `${updated}件のカテゴリーを更新しました。`;
},
importCompanyCardTransactionsSuccessfulDescription: ({transactions}: {transactions: number}) =>
@@ -5796,7 +5793,7 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO
error: {
genericAdd: 'このワークスペースメンバーを追加する際に問題が発生しました',
cannotRemove: '自分自身またはワークスペースのオーナーを削除することはできません',
- genericRemove: 'このメンバーを削除できませんでした。他のメンバーに問題がある可能性があります。エラーを解決してから再度お試しください。',
+ genericRemove: 'このメンバーを削除できませんでした。他のメンバーに問題がある可能性があります。すべてのエラーを解決してから、もう一度お試しください。',
},
addedWithPrimary: '一部のメンバーは、プライマリーログインで追加されました。',
invitedBySecondaryLogin: (secondaryLogin: string) => `セカンダリログイン${secondaryLogin}によって追加されました。`,
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 4effa255..7029e07a 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -1095,15 +1095,12 @@ const translations: TranslationDeepObject<typeof en> = {
if (!added && !updated) {
return 'Er zijn geen categorieën toegevoegd of bijgewerkt.';
}
-
if (added && updated) {
return `${added} ${added === 1 ? 'categorie' : 'categorieën'} toegevoegd, ${updated} ${updated === 1 ? 'categorie' : 'categorieën'} bijgewerkt.`;
}
-
if (added) {
return added === 1 ? '1 categorie is toegevoegd.' : `${added} categorieën zijn toegevoegd.`;
}
-
return updated === 1 ? '1 categorie is bijgewerkt.' : `${updated} categorieën zijn bijgewerkt.`;
},
importCompanyCardTransactionsSuccessfulDescription: ({transactions}: {transactions: number}) =>
@@ -5843,7 +5840,7 @@ _Voor meer gedetailleerde instructies, [bezoek onze help-site](${CONST.NETSUITE_
error: {
genericAdd: 'Er is een probleem opgetreden bij het toevoegen van dit werkruimtelid',
cannotRemove: 'Je kunt jezelf of de eigenaar van de werkruimte niet verwijderen',
- genericRemove: 'Dit lid kon niet worden verwijderd. Dit kan veroorzaakt zijn door een probleem met een ander lid. Los eventuele fouten op en probeer het opnieuw.',
+ genericRemove: 'Kon dit lid niet verwijderen. Dit kan veroorzaakt zijn door een probleem met een ander lid. Los eventuele fouten op en probeer het opnieuw.',
},
addedWithPrimary: 'Sommige leden zijn toegevoegd met hun primaire login.',
invitedBySecondaryLogin: (secondaryLogin: string) => `Toegevoegd door secundair login ${secondaryLogin}.`,
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 1ef6ec23..f2854f02 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -1096,15 +1096,12 @@ const translations: TranslationDeepObject<typeof en> = {
if (!added && !updated) {
return 'Nie dodano ani nie zaktualizowano żadnych kategorii.';
}
-
if (added && updated) {
return `Dodano ${added} ${added === 1 ? 'kategorię' : 'kategorie'}, zaktualizowano ${updated} ${updated === 1 ? 'kategorię' : 'kategorie'}.`;
}
-
if (added) {
return added === 1 ? 'Dodano 1 kategorię.' : `Dodano ${added} kategorie.`;
}
-
return updated === 1 ? 'Zaktualizowano 1 kategorię.' : `Zaktualizowano ${updated} kategorie.`;
},
importCompanyCardTransactionsSuccessfulDescription: ({transactions}: {transactions: number}) => (transactions > 1 ? `Dodano ${transactions} transakcji.` : 'Dodano 1 transakcję.'),
@@ -5836,7 +5833,7 @@ _Aby uzyskać bardziej szczegółowe instrukcje, [odwiedź naszą stronę pomocy
error: {
genericAdd: 'Wystąpił problem z dodaniem tego członka przestrzeni roboczej',
cannotRemove: 'Nie możesz usunąć siebie ani właściciela przestrzeni roboczej',
- genericRemove: 'Nie udało się usunąć tego członka. Może to być spowodowane problemem z innym członkiem. Rozwiąż wszelkie błędy i spróbuj ponownie.',
+ genericRemove: 'Nie udało się usunąć tego członka. Może to być spowodowane problemem z innym członkiem. Rozwiąż wszystkie błędy i spróbuj ponownie.',
},
addedWithPrimary: 'Niektóre osoby zostały dodane za pomocą swoich głównych loginów.',
invitedBySecondaryLogin: (secondaryLogin: string) => `Dodane przez dodatkowy login ${secondaryLogin}.`,
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 3f33de35..e206cf0f 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -1094,15 +1094,12 @@ const translations: TranslationDeepObject<typeof en> = {
if (!added && !updated) {
return 'Nenhuma categoria foi adicionada ou atualizada.';
}
-
if (added && updated) {
return `${added} ${added === 1 ? 'categoria' : 'categorias'} adicionada${added === 1 ? '' : 's'}, ${updated} ${updated === 1 ? 'categoria' : 'categorias'} atualizada${updated === 1 ? '' : 's'}.`;
}
-
if (added) {
return added === 1 ? '1 categoria foi adicionada.' : `${added} categorias foram adicionadas.`;
}
-
return updated === 1 ? '1 categoria foi atualizada.' : `${updated} categorias foram atualizadas.`;
},
importCompanyCardTransactionsSuccessfulDescription: ({transactions}: {transactions: number}) =>
@@ -5842,7 +5839,7 @@ _Para instruções mais detalhadas, [visite nossa central de ajuda](${CONST.NETS
error: {
genericAdd: 'Ocorreu um problema ao adicionar este membro do workspace',
cannotRemove: 'Você não pode remover a si mesmo nem o proprietário do workspace',
- genericRemove: 'Não foi possível remover este membro. Isso pode ser causado por um problema com outro membro. Resolva os erros e tente novamente.',
+ genericRemove: 'Não foi possível remover este membro. Isso pode ter sido causado por um problema com outro membro. Resolva quaisquer erros e tente novamente.',
},
addedWithPrimary: 'Alguns membros foram adicionados com seus logins principais.',
invitedBySecondaryLogin: (secondaryLogin: string) => `Adicionado pelo login secundário ${secondaryLogin}.`,
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index 0d8b6e85..a5962ac2 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -5691,7 +5691,7 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM
error: {
genericAdd: '添加此工作区成员时出现问题',
cannotRemove: '你无法将自己或工作区所有者移除',
- genericRemove: '无法移除此成员。这可能是由其他成员的问题引起的。请解决所有错误后重试。',
+ genericRemove: '无法移除此成员。可能是由另一位成员的问题导致的。请先解决所有错误,然后重试。',
},
addedWithPrimary: '某些成员已通过其主登录名添加。',
invitedBySecondaryLogin: (secondaryLogin: string) => `由次要登录账号 ${secondaryLogin} 添加。`,
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
@MelvinBot Plz mark it ready for review |
|
🤖 I attempted to mark this PR as ready for review, but I don't have the necessary permissions to execute that action in this environment. You can mark it as ready for review yourself by:
|
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
|
@stitesExpensify it looks like now a BE is removing the members partially, even though there is an error thrown for Screen.Recording.2026-04-16.at.23.02.42.mov |
|
Hey @Pujan92 to clarify, are you saying that the backend functionality is no longer correct? or that we need to change our frontend approach? |
I think so, can you plz check why backend is removing the members partially for DeleteMembersFromWorkspace api, even though it is responding with errors. |
|
FYI I am going OOO, I will look into this next week |
Explanation of Change
When removing workspace members fails, the generic error message "There was a problem removing that workspace member" gives no indication of why the removal failed or what the user can do about it. This is especially confusing for migrate customers who see a wall of identical RBR errors across many members.
This PR updates the
genericRemovetranslation string across all 10 locale files to a more informative and actionable message: "Couldn't remove this member. This may be caused by an issue with another member. Please resolve any errors and try again." The wording uses "may be caused" to account for cases where the issue may or may not be related to other members.Fixed Issues
$ #84326
PROPOSAL: #84326 (comment)
Tests
Offline tests
N/A — this is a copy-only change to error message strings. Offline behavior is unchanged.
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Copy-only change — no visual UI changes.
Android: mWeb Chrome
Copy-only change — no visual UI changes.
iOS: Native
Copy-only change — no visual UI changes.
iOS: mWeb Safari
Copy-only change — no visual UI changes.
MacOS: Chrome / Safari
Copy-only change — no visual UI changes.