Repository navigation
Conversation
Render POLICYCHANGELOG_SET_CATEGORY_VISIBILITY entries as a translated sentence built from categoryNames, accountIDs, hadRestriction and reason. Long lists show a count, and the full lists show at the top of the entry's thread. Co-authored-by: huult <huult@users.noreply.github.com>
|
I created this PR from an upstream branch since I don't have push access to your fork. To take ownership of this branch and be able to push updates, run: Then you can close this PR and open a new one from your fork. |
🦜 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 c0ab2100..82d85bd0 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -9973,12 +9973,12 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
return `hat die Positionenbelege der Kategorie „${categoryName}“ auf ${newValue} geändert (zuvor ${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `hat die Kategorie „${oldName}“ in „${newName}“ umbenannt`,
- setCategoryVisibility: (members: string, categories: string) => `hat ${members} so eingestellt, dass sie nur ${categories} sehen`,
- changedCategoryVisibility: (members: string, categories: string) => `hat ${members} so geändert, dass sie nur ${categories} sehen`,
- clearedCategoryVisibility: (members: string) => `hat ${members} so geändert, dass sie alle Kategorien sehen`,
+ setCategoryVisibility: (members: string, categories: string) => `Legen Sie fest, dass ${members} nur ${categories} sehen können`,
+ changedCategoryVisibility: (members: string, categories: string) => `hat ${members} so geändert, dass sie nur noch ${categories} sehen`,
+ clearedCategoryVisibility: (members: string) => `${members} können jetzt alle Kategorien sehen`,
quotedCategoryName: (categoryName: string) => `„${categoryName}“`,
oneCategory: (categoryName: string) => `die Kategorie ${categoryName}`,
- someCategories: (categoryList: string) => `die Kategorien ${categoryList}`,
+ someCategories: (categoryList: string) => `die ${categoryList} Kategorien`,
everyone: 'alle',
categoryCount: ({count}: {count: number}) => ({
one: '1 Kategorie',
@@ -9990,8 +9990,8 @@ Fügen Sie weitere Ausgabelimits hinzu, um den Cashflow Ihres Unternehmens zu sc
}),
categoryVisibilityCategoriesList: (categoryList: string) => `Kategorien: ${categoryList}`,
categoryVisibilityMembersList: (memberList: string) => `Mitglieder: ${memberList}`,
- categoryVisibilityReasonDeleted: ', da ihre einzige Kategorie gelöscht wurde. Aktualisiere bei Bedarf ihre Kategoriesichtbarkeit.',
- categoryVisibilityReasonDisabled: ', da ihre einzige Kategorie deaktiviert wurde. Aktualisiere bei Bedarf ihre Kategoriesichtbarkeit.',
+ categoryVisibilityReasonDeleted: ', da ihre einzige Kategorie gelöscht wurde. Aktualisieren Sie bei Bedarf ihre Kategoriesichtbarkeit.',
+ categoryVisibilityReasonDisabled: ', da ihre einzige Kategorie deaktiviert war. Aktualisieren Sie bei Bedarf deren Kategoriesichtbarkeit.',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `hat den Beschreibungshinweis „${oldValue}“ aus der Kategorie „${categoryName}“ entfernt`;
diff --git a/src/languages/el.ts b/src/languages/el.ts
index e4b63e77..ef11fae4 100644
--- a/src/languages/el.ts
+++ b/src/languages/el.ts
@@ -10132,12 +10132,12 @@ ${reportName}`,
return `άλλαξε τις αναλυτικές αποδείξεις της κατηγορίας «${categoryName}» σε ${newValue} (προηγουμένως ${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `μετονόμασε την κατηγορία «${oldName}» σε «${newName}»`,
- setCategoryVisibility: (members: string, categories: string) => `όρισε ώστε ${members} να βλέπουν μόνο ${categories}`,
- changedCategoryVisibility: (members: string, categories: string) => `άλλαξε ώστε ${members} να βλέπουν μόνο ${categories}`,
- clearedCategoryVisibility: (members: string) => `άλλαξε ώστε ${members} να βλέπουν όλες τις κατηγορίες`,
+ setCategoryVisibility: (members: string, categories: string) => `ορίστε ώστε τα μέλη ${members} να βλέπουν μόνο τις κατηγορίες ${categories}`,
+ changedCategoryVisibility: (members: string, categories: string) => `άλλαξε τα ${members} ώστε να βλέπουν μόνο τις ${categories}`,
+ clearedCategoryVisibility: (members: string) => `άλλαξε τα δικαιώματα των ${members} ώστε να βλέπουν όλες τις κατηγορίες`,
quotedCategoryName: (categoryName: string) => `«${categoryName}»`,
- oneCategory: (categoryName: string) => `την κατηγορία ${categoryName}`,
- someCategories: (categoryList: string) => `τις κατηγορίες ${categoryList}`,
+ oneCategory: (categoryName: string) => `η κατηγορία ${categoryName}`,
+ someCategories: (categoryList: string) => `οι κατηγορίες ${categoryList}`,
everyone: 'όλοι',
categoryCount: ({count}: {count: number}) => ({
one: '1 κατηγορία',
@@ -10149,8 +10149,8 @@ ${reportName}`,
}),
categoryVisibilityCategoriesList: (categoryList: string) => `Κατηγορίες: ${categoryList}`,
categoryVisibilityMembersList: (memberList: string) => `Μέλη: ${memberList}`,
- categoryVisibilityReasonDeleted: ', επειδή η μοναδική τους κατηγορία διαγράφηκε. Ενημερώστε την ορατότητα κατηγοριών τους αν χρειάζεται.',
- categoryVisibilityReasonDisabled: ', επειδή η μοναδική τους κατηγορία απενεργοποιήθηκε. Ενημερώστε την ορατότητα κατηγοριών τους αν χρειάζεται.',
+ categoryVisibilityReasonDeleted: ', επειδή η μοναδική τους κατηγορία διαγράφηκε. Ενημερώστε, αν χρειάζεται, την ορατότητα της κατηγορίας τους.',
+ categoryVisibilityReasonDisabled: ', καθώς η μοναδική τους κατηγορία ήταν απενεργοποιημένη. Ενημερώστε την ορατότητα της κατηγορίας τους, αν χρειάζεται.',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `αφαίρεσε την υπόδειξη περιγραφής «${oldValue}» από την κατηγορία «${categoryName}»`;
diff --git a/src/languages/es.ts b/src/languages/es.ts
index 6e7e6011..f9496ad8 100644
--- a/src/languages/es.ts
+++ b/src/languages/es.ts
@@ -9793,12 +9793,12 @@ ${reportName}`,
return `cambió los Recibos detallados de la categoría "${categoryName}" a ${newValue} (previamente ${oldValue})`;
},
setCategoryName: (oldName, newName) => `renombró la categoría "${oldName}" a "${newName}"`,
- setCategoryVisibility: (members, categories) => `configuró a ${members} para que solo vean ${categories}`,
- changedCategoryVisibility: (members, categories) => `cambió a ${members} para que solo vean ${categories}`,
- clearedCategoryVisibility: (members) => `cambió a ${members} para que vean todas las categorías`,
+ setCategoryVisibility: (members: string, categories: string) => `configura ${members} para que solo vean ${categories}`,
+ changedCategoryVisibility: (members: string, categories: string) => `cambió ${members} para que solo vean ${categories}`,
+ clearedCategoryVisibility: (members: string) => `cambió ${members} para que vean todas las categorías`,
quotedCategoryName: (categoryName) => `"${categoryName}"`,
- oneCategory: (categoryName) => `la categoría ${categoryName}`,
- someCategories: (categoryList) => `las categorías ${categoryList}`,
+ oneCategory: (categoryName: string) => `la categoría ${categoryName}`,
+ someCategories: (categoryList: string) => `las ${categoryList} categorías`,
everyone: 'todos',
categoryCount: ({count}: {count: number}) => ({
one: '1 categoría',
@@ -9808,10 +9808,10 @@ ${reportName}`,
one: '1 miembro',
other: `${count} miembros`,
}),
- categoryVisibilityCategoriesList: (categoryList) => `Categorías: ${categoryList}`,
- categoryVisibilityMembersList: (memberList) => `Miembros: ${memberList}`,
- categoryVisibilityReasonDeleted: ', ya que su única categoría fue eliminada. Actualiza su visibilidad de categorías si es necesario.',
- categoryVisibilityReasonDisabled: ', ya que su única categoría fue deshabilitada. Actualiza su visibilidad de categorías si es necesario.',
+ categoryVisibilityCategoriesList: (categoryList: string) => `Categorías: ${categoryList}`,
+ categoryVisibilityMembersList: (memberList: string) => `Miembros: ${memberList}`,
+ categoryVisibilityReasonDeleted: ', ya que su única categoría se eliminó. Actualiza la visibilidad de su categoría si es necesario.',
+ categoryVisibilityReasonDisabled: ', ya que su única categoría estaba deshabilitada. Actualiza la visibilidad de su categoría si es necesario.',
updateCategories: (count) => `actualizó ${count} categorías`,
updateTagListName: (oldName, newName) => `cambió el nombre de la lista de etiquetas a "${newName}" (previamente "${oldName}")`,
updateTagList: (tagListName) => `actualizó las etiquetas de la lista "${tagListName}"`,
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index ce238e21..c269cec1 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -9997,25 +9997,25 @@ Ajoutez davantage de règles de dépenses pour protéger la trésorerie de l’e
return `a modifié les reçus détaillés de la catégorie « ${categoryName} » en ${newValue} (auparavant ${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `a renommé la catégorie « ${oldName} » en « ${newName} »`,
- setCategoryVisibility: (members: string, categories: string) => `a configuré ${members} pour ne voir que ${categories}`,
- changedCategoryVisibility: (members: string, categories: string) => `a modifié ${members} pour ne voir que ${categories}`,
+ setCategoryVisibility: (members: string, categories: string) => `définir ${members} pour ne voir que ${categories}`,
+ changedCategoryVisibility: (members: string, categories: string) => `a modifié ${members} pour qu'ils ne voient que ${categories}`,
clearedCategoryVisibility: (members: string) => `a modifié ${members} pour voir toutes les catégories`,
quotedCategoryName: (categoryName: string) => `« ${categoryName} »`,
oneCategory: (categoryName: string) => `la catégorie ${categoryName}`,
- someCategories: (categoryList: string) => `les catégories ${categoryList}`,
+ someCategories: (categoryList: string) => `les ${categoryList} catégories`,
everyone: 'tout le monde',
categoryCount: ({count}: {count: number}) => ({
- one: `${count} catégorie`,
+ one: '1 catégorie',
other: `${count} catégories`,
}),
memberCount: ({count}: {count: number}) => ({
- one: `${count} membre`,
+ one: '1 membre',
other: `${count} membres`,
}),
- categoryVisibilityCategoriesList: (categoryList: string) => `Catégories : ${categoryList}`,
- categoryVisibilityMembersList: (memberList: string) => `Membres : ${memberList}`,
- categoryVisibilityReasonDeleted: ', car leur seule catégorie a été supprimée. Mettez à jour leur visibilité des catégories si nécessaire.',
- categoryVisibilityReasonDisabled: ', car leur seule catégorie a été désactivée. Mettez à jour leur visibilité des catégories si nécessaire.',
+ categoryVisibilityCategoriesList: (categoryList: string) => `Catégories : ${categoryList}`,
+ categoryVisibilityMembersList: (memberList: string) => `Membres : ${memberList}`,
+ categoryVisibilityReasonDeleted: ', car leur seule catégorie a été supprimée. Mettez à jour la visibilité de leur catégorie si nécessaire.',
+ categoryVisibilityReasonDisabled: ', car leur seule catégorie a été désactivée. Mettez à jour la visibilité de leurs catégories si nécessaire.',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `a supprimé l’indication de description « ${oldValue} » de la catégorie « ${categoryName} »`;
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 9e01a1e1..ff8b5106 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -9917,8 +9917,8 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
return `ha modificato le ricevute con voce di dettaglio della categoria "${categoryName}" in ${newValue} (in precedenza ${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `ha rinominato la categoria "${oldName}" in "${newName}"`,
- setCategoryVisibility: (members: string, categories: string) => `ha impostato ${members} per vedere solo ${categories}`,
- changedCategoryVisibility: (members: string, categories: string) => `ha modificato ${members} per vedere solo ${categories}`,
+ setCategoryVisibility: (members: string, categories: string) => `imposta ${members} in modo che vedano solo ${categories}`,
+ changedCategoryVisibility: (members: string, categories: string) => `ha modificato ${members} in modo che possano vedere solo ${categories}`,
clearedCategoryVisibility: (members: string) => `ha modificato ${members} per vedere tutte le categorie`,
quotedCategoryName: (categoryName: string) => `"${categoryName}"`,
oneCategory: (categoryName: string) => `la categoria ${categoryName}`,
@@ -9934,8 +9934,8 @@ Aggiungi altre regole di spesa per proteggere il flusso di cassa aziendale.`,
}),
categoryVisibilityCategoriesList: (categoryList: string) => `Categorie: ${categoryList}`,
categoryVisibilityMembersList: (memberList: string) => `Membri: ${memberList}`,
- categoryVisibilityReasonDeleted: ', poiché la loro unica categoria è stata eliminata. Aggiorna la loro visibilità delle categorie se necessario.',
- categoryVisibilityReasonDisabled: ', poiché la loro unica categoria è stata disattivata. Aggiorna la loro visibilità delle categorie se necessario.',
+ categoryVisibilityReasonDeleted: ', perché la loro unica categoria è stata eliminata. Aggiorna la visibilità della loro categoria se necessario.',
+ categoryVisibilityReasonDisabled: ', perché la loro unica categoria è stata disattivata. Aggiorna la visibilità della loro categoria se necessario.',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `ha rimosso il suggerimento di descrizione "${oldValue}" dalla categoria "${categoryName}"`;
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index e102450d..ab69fad1 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -7454,7 +7454,6 @@ _詳しい手順については、[ヘルプサイトをご覧ください](${CO
title: 'メンバーをコピー',
prompt: ({count, targetWorkspaceName}: {count: number; targetWorkspaceName: string}) => ({
one: `${targetWorkspaceName}のメンバーをこのワークスペースのメンバーで置き換えてもよろしいですか?`,
- // Japanese has no "one" plural category, so handle the single-workspace case here
other:
count === 1
? `${targetWorkspaceName}のメンバーをこのワークスペースのメンバーで置き換えてもよろしいですか?`
@@ -9778,25 +9777,25 @@ ${reportName}`,
return `「${categoryName}」カテゴリの明細付きレシートを${newValue}に変更しました(以前は${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `カテゴリ名を「${oldName}」から「${newName}」に変更しました`,
- setCategoryVisibility: (members: string, categories: string) => `${members}が${categories}のみを表示できるように設定しました`,
- changedCategoryVisibility: (members: string, categories: string) => `${members}が${categories}のみを表示できるように変更しました`,
- clearedCategoryVisibility: (members: string) => `${members}がすべてのカテゴリを表示できるように変更しました`,
+ setCategoryVisibility: (members: string, categories: string) => `${members} が ${categories} だけを表示できるように設定します`,
+ changedCategoryVisibility: (members: string, categories: string) => `${members} が ${categories} のみを表示するように変更しました`,
+ clearedCategoryVisibility: (members: string) => `${members} がすべてのカテゴリを表示できるように変更しました`,
quotedCategoryName: (categoryName: string) => `「${categoryName}」`,
- oneCategory: (categoryName: string) => `カテゴリ${categoryName}`,
- someCategories: (categoryList: string) => `カテゴリ${categoryList}`,
+ oneCategory: (categoryName: string) => `${categoryName} カテゴリ`,
+ someCategories: (categoryList: string) => `${categoryList} 件のカテゴリー`,
everyone: '全員',
categoryCount: ({count}: {count: number}) => ({
one: '1 件のカテゴリ',
- other: `${count} 件のカテゴリ`,
+ other: `${count} 個のカテゴリ`,
}),
memberCount: ({count}: {count: number}) => ({
- one: '1 人のメンバー',
- other: `${count} 人のメンバー`,
+ one: 'メンバー 1 人',
+ other: `${count} 名のメンバー`,
}),
- categoryVisibilityCategoriesList: (categoryList: string) => `カテゴリ: ${categoryList}`,
- categoryVisibilityMembersList: (memberList: string) => `メンバー: ${memberList}`,
- categoryVisibilityReasonDeleted: '。唯一のカテゴリが削除されたためです。必要に応じてカテゴリの表示設定を更新してください。',
- categoryVisibilityReasonDisabled: '。唯一のカテゴリが無効化されたためです。必要に応じてカテゴリの表示設定を更新してください。',
+ categoryVisibilityCategoriesList: (categoryList: string) => `カテゴリ:${categoryList}`,
+ categoryVisibilityMembersList: (memberList: string) => `メンバー:${memberList}`,
+ categoryVisibilityReasonDeleted: 'は、そのユーザーの唯一のカテゴリが削除されたためです。必要に応じて、そのユーザーのカテゴリの表示設定を更新してください。',
+ categoryVisibilityReasonDisabled: '、そのユーザーの唯一のカテゴリが無効になっているためです。必要に応じてカテゴリの表示設定を更新してください。',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `カテゴリ「${categoryName}」から説明のヒント「${oldValue}」を削除しました`;
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 2aba237f..4a8a8760 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -9894,12 +9894,12 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
return `heeft de categorie „${categoryName}” Itemized receipts gewijzigd naar ${newValue} (voorheen ${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `heeft de categorie "${oldName}" hernoemd naar "${newName}"`,
- setCategoryVisibility: (members: string, categories: string) => `heeft ${members} zo ingesteld dat ze alleen ${categories} zien`,
- changedCategoryVisibility: (members: string, categories: string) => `heeft ${members} zo gewijzigd dat ze alleen ${categories} zien`,
- clearedCategoryVisibility: (members: string) => `heeft ${members} zo gewijzigd dat ze alle categorieën zien`,
+ setCategoryVisibility: (members: string, categories: string) => `stel ${members} in om alleen ${categories} te zien`,
+ changedCategoryVisibility: (members: string, categories: string) => `heeft ${members} gewijzigd zodat ze alleen ${categories} zien`,
+ clearedCategoryVisibility: (members: string) => `heeft ${members} gewijzigd zodat ze alle categorieën kunnen zien`,
quotedCategoryName: (categoryName: string) => `"${categoryName}"`,
oneCategory: (categoryName: string) => `de categorie ${categoryName}`,
- someCategories: (categoryList: string) => `de categorieën ${categoryList}`,
+ someCategories: (categoryList: string) => `de ${categoryList} categorieën`,
everyone: 'iedereen',
categoryCount: ({count}: {count: number}) => ({
one: '1 categorie',
@@ -9912,7 +9912,7 @@ er bestedingsregels toe om de kasstroom van het bedrijf te beschermen.`,
categoryVisibilityCategoriesList: (categoryList: string) => `Categorieën: ${categoryList}`,
categoryVisibilityMembersList: (memberList: string) => `Leden: ${memberList}`,
categoryVisibilityReasonDeleted: ', omdat hun enige categorie is verwijderd. Werk hun categoriezichtbaarheid bij indien nodig.',
- categoryVisibilityReasonDisabled: ', omdat hun enige categorie is uitgeschakeld. Werk hun categoriezichtbaarheid bij indien nodig.',
+ categoryVisibilityReasonDisabled: ', omdat hun enige categorie was uitgeschakeld. Werk indien nodig hun categoriezichtbaarheid bij.',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `heeft de beschrijvingshint "${oldValue}" verwijderd uit de categorie "${categoryName}"`;
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index 133b6905..56131965 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -9915,29 +9915,25 @@ Dodaj więcej zasad wydatków, żeby chronić płynność finansową firmy.`,
return `zmienił(a) pozycjonowanie paragonów dla kategorii „${categoryName}” na ${newValue} (wcześniej ${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `zmieniono nazwę kategorii „${oldName}” na „${newName}”`,
- setCategoryVisibility: (members: string, categories: string) => `ustawiono, aby ${members} widzieli tylko ${categories}`,
- changedCategoryVisibility: (members: string, categories: string) => `zmieniono, aby ${members} widzieli tylko ${categories}`,
- clearedCategoryVisibility: (members: string) => `zmieniono, aby ${members} widzieli wszystkie kategorie`,
+ setCategoryVisibility: (members: string, categories: string) => `ustaw, by ${members} widzieli tylko ${categories}`,
+ changedCategoryVisibility: (members: string, categories: string) => `zmienił(a) ustawienia, aby ${members} widzieli tylko ${categories}`,
+ clearedCategoryVisibility: (members: string) => `zmieniono uprawnienia ${members}, aby widzieli wszystkie kategorie`,
quotedCategoryName: (categoryName: string) => `„${categoryName}”`,
- oneCategory: (categoryName: string) => `kategorię ${categoryName}`,
- someCategories: (categoryList: string) => `kategorie ${categoryList}`,
+ oneCategory: (categoryName: string) => `kategoria ${categoryName}`,
+ someCategories: (categoryList: string) => `${categoryList} kategorie`,
everyone: 'wszyscy',
categoryCount: ({count}: {count: number}) => ({
- one: '1 kategorię',
- few: `${count} kategorie`,
- many: `${count} kategorii`,
- other: `${count} kategorii`,
+ one: '1 kategoria',
+ other: `${count} kategorie`,
}),
memberCount: ({count}: {count: number}) => ({
one: '1 członek',
- few: `${count} członków`,
- many: `${count} członków`,
other: `${count} członków`,
}),
categoryVisibilityCategoriesList: (categoryList: string) => `Kategorie: ${categoryList}`,
categoryVisibilityMembersList: (memberList: string) => `Członkowie: ${memberList}`,
- categoryVisibilityReasonDeleted: ', ponieważ ich jedyna kategoria została usunięta. W razie potrzeby zaktualizuj ich widoczność kategorii.',
- categoryVisibilityReasonDisabled: ', ponieważ ich jedyna kategoria została wyłączona. W razie potrzeby zaktualizuj ich widoczność kategorii.',
+ categoryVisibilityReasonDeleted: ', ponieważ ich jedyna kategoria została usunięta. Zaktualizuj w razie potrzeby widoczność ich kategorii.',
+ categoryVisibilityReasonDisabled: ', ponieważ ich jedyna kategoria została wyłączona. Zaktualizuj widoczność ich kategorii, jeśli to konieczne.',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `usunięto podpowiedź opisu „${oldValue}” z kategorii „${categoryName}”`;
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 4b3239d9..bef9748c 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -9902,25 +9902,25 @@ Adicione mais regras de gasto para proteger o fluxo de caixa da empresa.`,
return `alterou a categoria "${categoryName}" Itens detalhados de recibos para ${newValue} (antes ${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `renomeou a categoria "${oldName}" para "${newName}"`,
- setCategoryVisibility: (members: string, categories: string) => `configurou ${members} para ver apenas ${categories}`,
- changedCategoryVisibility: (members: string, categories: string) => `alterou ${members} para ver apenas ${categories}`,
+ setCategoryVisibility: (members: string, categories: string) => `definir ${members} para ver apenas ${categories}`,
+ changedCategoryVisibility: (members: string, categories: string) => `alterou ${members} para verem apenas ${categories}`,
clearedCategoryVisibility: (members: string) => `alterou ${members} para ver todas as categorias`,
quotedCategoryName: (categoryName: string) => `"${categoryName}"`,
oneCategory: (categoryName: string) => `a categoria ${categoryName}`,
someCategories: (categoryList: string) => `as categorias ${categoryList}`,
everyone: 'todos',
categoryCount: ({count}: {count: number}) => ({
- one: `${count} categoria`,
+ one: '1 categoria',
other: `${count} categorias`,
}),
memberCount: ({count}: {count: number}) => ({
- one: `${count} membro`,
+ one: '1 membro',
other: `${count} membros`,
}),
categoryVisibilityCategoriesList: (categoryList: string) => `Categorias: ${categoryList}`,
categoryVisibilityMembersList: (memberList: string) => `Membros: ${memberList}`,
- categoryVisibilityReasonDeleted: ', pois a única categoria deles foi excluída. Atualize a visibilidade de categorias deles, se necessário.',
- categoryVisibilityReasonDisabled: ', pois a única categoria deles foi desativada. Atualize a visibilidade de categorias deles, se necessário.',
+ categoryVisibilityReasonDeleted: ', já que a única categoria deles foi excluída. Atualize a visibilidade da categoria deles, se necessário.',
+ categoryVisibilityReasonDisabled: ', já que a única categoria deles foi desativada. Atualize a visibilidade da categoria, se necessário.',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `removeu a dica de descrição "${oldValue}" da categoria "${categoryName}"`;
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index de530f89..a5383b12 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -7281,7 +7281,6 @@ _如需更详细的说明,请[访问我们的帮助网站](${CONST.NETSUITE_IM
title: '复制成员',
prompt: ({count, targetWorkspaceName}: {count: number; targetWorkspaceName: string}) => ({
one: `确定要用此工作区的成员替换 ${targetWorkspaceName} 的成员吗?`,
- // Chinese has no "one" plural category, so handle the single-workspace case here
other: count === 1 ? `确定要用此工作区的成员替换 ${targetWorkspaceName} 的成员吗?` : `确定要用此工作区的成员替换 ${count} 个工作区的成员吗?`,
}),
},
@@ -9533,12 +9532,12 @@ ${reportName}`,
return `将“${categoryName}”类别的分项收据更改为 ${newValue}(之前为 ${oldValue})`;
},
setCategoryName: (oldName: string, newName: string) => `已将类别“${oldName}”重命名为“${newName}”`,
- setCategoryVisibility: (members: string, categories: string) => `已将${members}设置为仅可查看${categories}`,
- changedCategoryVisibility: (members: string, categories: string) => `已将${members}更改为仅可查看${categories}`,
- clearedCategoryVisibility: (members: string) => `已将${members}更改为可查看所有类别`,
+ setCategoryVisibility: (members: string, categories: string) => `将 ${members} 设置为只能看到(使用)${categories}`,
+ changedCategoryVisibility: (members: string, categories: string) => `已更改${members}为仅能看到${categories}`,
+ clearedCategoryVisibility: (members: string) => `已更改${members}为可查看所有类别`,
quotedCategoryName: (categoryName: string) => `“${categoryName}”`,
- oneCategory: (categoryName: string) => `类别${categoryName}`,
- someCategories: (categoryList: string) => `类别${categoryList}`,
+ oneCategory: (categoryName: string) => `${categoryName} 类别`,
+ someCategories: (categoryList: string) => `${categoryList} 个类别`,
everyone: '所有人',
categoryCount: ({count}: {count: number}) => ({
one: '1 个类别',
@@ -9550,8 +9549,8 @@ ${reportName}`,
}),
categoryVisibilityCategoriesList: (categoryList: string) => `类别:${categoryList}`,
categoryVisibilityMembersList: (memberList: string) => `成员:${memberList}`,
- categoryVisibilityReasonDeleted: ',因为其唯一的类别已被删除。如有需要,请更新其类别可见性。',
- categoryVisibilityReasonDisabled: ',因为其唯一的类别已被禁用。如有需要,请更新其类别可见性。',
+ categoryVisibilityReasonDeleted: ',因为他们唯一的类别已被删除。如有需要,请更新其类别可见性。',
+ categoryVisibilityReasonDisabled: ',因为他们唯一的类别已被禁用。如有需要,请更新其类别可见性。',
updatedDescriptionHint: (categoryName: string, newValue?: string, oldValue?: string) => {
if (!newValue) {
return `已从类别“${categoryName}”中移除描述提示“${oldValue}”`;
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
|
🤖 Android test steps verification results: ✅ pass The workspace #admins room and its LHN entry render normally on Android with no error banners or crash screens. The new category visibility message itself wasn't tested, because the backend doesn't send that action yet.
|
|
@MelvinBot ready for review |
|
🤖 Done. This PR is now marked as ready for review. The |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 76a0e4a973
ℹ️ About Codex in GitHub
Codex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| const getQuotedCategoryNames = () => categoryNames.map((name) => translate('workspaceActions.quotedCategoryName', getDecodedCategoryName(name))); | ||
| const getMemberNames = () => { | ||
| const hiddenTranslation = translate('common.hidden'); | ||
| return accountIDs.map((accountID) => getDisplayNameForParticipant({accountID, formatPhoneNumber, hiddenTranslation})); |
There was a problem hiding this comment.
Subscribe to the affected members' personal details
When a visibility action renders before the target members’ personal details are populated, or when their display names later change, getDisplayNameForParticipant() reads the module-scoped PersonalDetailsStore cache, but PolicyChangeLogContent never subscribes to those account IDs. The row can therefore continue showing Hidden or stale names until an unrelated render occurs; subscribe with usePersonalDetailsByIDs(accountIDs) and pass the selected details into this formatter.
AGENTS.md reference: AGENTS.md:L47-L49
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Valid finding, fixed in fd5ef92.
PolicyChangeLogContent now subscribes to the members in the action with usePersonalDetailsByIDs(accountIDs) (PolicyChangeLogContent.tsx:334-335). This matches how MemberChangeContent handles targetAccountIDs. The details go through getWorkspaceCategoryUpdateMessage to getDisplayNameForParticipant as personalDetailsData (ReportActionsUtils.ts:3846). The row now re-renders when a member's details load or change, instead of staying on "Hidden" or an old name.
Details
- The new
personalDetailsparam is optional. Non-React callers (LHN preview, thread title, copy to clipboard) don't pass it and keep using the cache, as before. - For other policy change log actions,
accountIDsisundefined, so the selector returns an empty map and those rows don't re-render. - Added a unit test showing that subscribed details take precedence over the cache.
- Checks:
npm run typecheckpassed. ESLint on the changed files passed. The React Compiler check onPolicyChangeLogContent.tsxpassed.ReportActionsUtilsTest,PolicyChangeLogContentTest, andReportActionItemTestpassed (1078 tests). The App's inline code review found no rule violations.
|
@MelvinBot Please add |
Co-authored-by: huult <huult@users.noreply.github.com>
|
@chiragsalian Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
Result using mock data |
Co-authored-by: huult <huult@users.noreply.github.com>
|
Done. I added
Nobody has run these steps yet. They need the backend to post this action, so please run them and add screenshots once it does. |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
The failing check is unrelated to this PR. Analysis: The only real failure is
Evidence
|
|
The failing What to do: Re-run all jobs in the Reassure Performance Tests run. Re-running only the failed job reuses the same results and fails again. You can also wait for [No QA] Mock fetch in ReportActionsListRowWrites perf test to merge. That PR fixes the flaky test suite.
Evidence
|
JmillsExpensify
left a comment
There was a problem hiding this comment.
All the cases LGTM so going to approve
|
The failing check is unrelated to this PR, so I didn't push a fix. Analysis:
Evidence: This PR only changes how The other failing check, |
|
The code looks good overall, but it seems the translations are still MelvinBot's first pass and the Polyglot Parrot translations haven't been applied yet. @MelvinBot please update the translations to match the diff in this comment: #105465 (comment) |
|
You're right: the branch still has my first-pass translations. For example, Before applying the diff as-is, note that a few Parrot strings look worse than the current ones:
I can only make code changes when directed by the PR author, an assignee, or an existing co-author. To have me implement this, the PR assignee or author should reply with a request tagging me. @huult, should I apply the Polyglot Parrot translations? |
|
@MelvinBot, please apply the suggested changes above. |
Co-authored-by: huult <huult@users.noreply.github.com>
|
I applied the Polyglot Parrot translations in d3244a8. I kept the current string only where the Parrot version breaks the sentence, as listed below. Strings I kept unchanged, and why
I also switched fr Checks: typecheck passed, and |
|
The failing check is unrelated to this PR. No code fix is needed. Please re-run the Analysis:
Evidence: The test writes only to an unrelated The other failing checks ( |
|
@MelvinBot could you sync with main? |
…lityChangeLogs Co-authored-by: huult <huult@users.noreply.github.com>
|
MelvinBot has made 5 consecutive commits trying to fix CI failures. Automatic CI fix dispatches are now paused for this PR. Next steps: A human should review the recent commits and resolve the conflicting CI errors manually. |
|
@MelvinBot @huult Please add [HOLD BE] to the title since we need the BE to be deployed before we can test this properly |
|
🤖 Done. The title is now |




Explanation of Change
Auth will post
POLICYCHANGELOG_SET_CATEGORY_VISIBILITYentries to #admins as data (categoryNames,accountIDs,hadRestriction,reason), not as text. The App had no handler for this action, so it would fall back to the raw message text. This PR builds the sentence when the entry renders, like the other category change logs, so it uses the viewer's language and members' current names.SET_CATEGORY_VISIBILITYtoCONST.REPORT.ACTIONS.TYPE.POLICY_CHANGE_LOG, the neworiginalMessagefields, andCONST.POLICY.CATEGORY_VISIBILITY(the 10-item threshold and the reason values).isCategoryModificationAction, so the LHN preview, thread title, and copy-to-clipboard show the same text. Also maps it tocategoryResolverinPolicyChangeLogContent.SYSTEM_POLICY_CHANGE_LOG_ACTION_TYPES, so it's treated as passive audit content and collapses with neighboring system messages like the other category change logs.getCategoryVisibilityUpdateMessage, called fromgetWorkspaceCategoryUpdateMessage:formatList/ "everyone" (empty list) / "12 members" (10 or more).hadRestriction, and appends the reason sentence forcategoriesDeletedandcategoriesDisabled.getWorkspaceCategoryUpdateMessagetakes a newshouldShowFullListparam. When it's true and a list has 10 or more items, the message is "Categories: …" and/or "Members: …" naming every item. Instead of adding a new flag inReportActionItemParentAction, this reuses the existingisThreadReportParentActionprop, whichAncestorReportActionItemalready sets. It goesReportActionItem→ActionContentRouter→PolicyChangeLogContent→categoryResolver.quotedCategoryNametranslation, so each locale uses its own quote marks instead of English quotes in shared code.enand typecheck fails without them. The non-English copy is a first pass; please review or regenerate it.Fixed Issues
$ #105085
PROPOSAL: #105085 (comment)
Tests
Precondition: the backend must post
POLICYCHANGELOG_SET_CATEGORY_VISIBILITYentries to #admins (the Auth work in step 1.17). The App has no UI that creates this action, so these steps can't run in dev until that ships. Use a workspace with at least 12 members and 14 enabled categories, including "Meals" and "Fuel".Offline tests
QA Steps
Same as tests. This needs the backend to post
POLICYCHANGELOG_SET_CATEGORY_VISIBILITYentries on staging first.AI Tests
npm run typecheck: passednpm run lint-changed: passednpm run spell-changed: passednpm run fmt(oxfmt): no changes outside this PRnpm test -- tests/unit/ReportActionsUtilsTest.ts tests/unit/PolicyChangeLogContentTest.tsx tests/ui/ReportActionItemTest.tsx tests/ui/AncestorReportActionItemTest.tsx tests/unit/ReportNameUtilsTest.ts tests/unit/OptionsListUtilsTest.tsx: 1551 passed. New cases cover every row of the issue's example table.npm test -- tests/unit/SystemMessageDisplayStateTest.ts tests/unit/ReportActionsUtilsTest.ts: 669 passed, including a new case that classifiesSET_CATEGORY_VISIBILITYas a system message.npm run react-compiler-compliance-check check-changed: could not run in this environment (the base ref couldn't be resolved). The TSX changes only pass a prop through.PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)npm run compress-svg)Avataris modified, I verified thatAvataris working as expected)Designlabel and/or tagged@Expensify/designso the design team can review the changes.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
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari