From 1c19655959198665d33811e240e798d467254a9c Mon Sep 17 00:00:00 2001 From: rory Date: Tue, 30 Sep 2025 16:36:08 -0700 Subject: [PATCH 01/13] Add tmate for debugging --- .github/workflows/generateTranslations.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/generateTranslations.yml b/.github/workflows/generateTranslations.yml index 857d99d12aae..b835f145c614 100644 --- a/.github/workflows/generateTranslations.yml +++ b/.github/workflows/generateTranslations.yml @@ -50,6 +50,12 @@ jobs: - name: Setup Node uses: ./.github/actions/composite/setupNode + - name: Setup tmate + uses: mxschmitt/action-tmate@e5c7151931ca95bad1c6f4190c730ecf8c7dde48 + timeout-minutes: 60 + with: + limit-access-to-actor: true + - name: Check if English translations were modified id: check-en-changes uses: ./.github/actions/javascript/getPullRequestIncrementalChanges From c54ed9d101f42a5bfad5d892834ca50671229c2b Mon Sep 17 00:00:00 2001 From: rory Date: Tue, 30 Sep 2025 16:49:07 -0700 Subject: [PATCH 02/13] Add context annotation for closeAccount --- src/languages/en.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index 34a8723b7dfa..807c946cf0e7 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -1689,6 +1689,7 @@ const translations = { general: 'General', }, closeAccountPage: { + // @context close as a verb, not an adjective closeAccount: 'Close account', reasonForLeavingPrompt: 'We’d hate to see you go! Would you kindly tell us why, so we can improve?', enterMessageHere: 'Enter message here', From 55b86af62edb8d8e6ecf146bf2f5afd5e23babdb Mon Sep 17 00:00:00 2001 From: rory Date: Tue, 30 Sep 2025 17:18:43 -0700 Subject: [PATCH 03/13] Add type peeling to rev-parse verify --- .../javascript/getPullRequestIncrementalChanges/index.js | 2 +- scripts/utils/Git.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/javascript/getPullRequestIncrementalChanges/index.js b/.github/actions/javascript/getPullRequestIncrementalChanges/index.js index f6970b341eaa..88d16b09f87d 100644 --- a/.github/actions/javascript/getPullRequestIncrementalChanges/index.js +++ b/.github/actions/javascript/getPullRequestIncrementalChanges/index.js @@ -12560,7 +12560,7 @@ class Git { */ static isValidRef(ref) { try { - (0, child_process_1.execSync)(`git rev-parse --verify "${ref}"`, { + (0, child_process_1.execSync)(`git rev-parse --verify "${ref}^{commit}"`, { encoding: 'utf8', cwd: process.cwd(), stdio: 'pipe', // Suppress output diff --git a/scripts/utils/Git.ts b/scripts/utils/Git.ts index 1ba57f46f432..b855d9f75e4a 100644 --- a/scripts/utils/Git.ts +++ b/scripts/utils/Git.ts @@ -64,7 +64,7 @@ class Git { */ static isValidRef(ref: string): boolean { try { - execSync(`git rev-parse --verify "${ref}"`, { + execSync(`git rev-parse --verify "${ref}^{commit}"`, { encoding: 'utf8', cwd: process.cwd(), stdio: 'pipe', // Suppress output From ab35cab874abffcef51d84d5664e0761b466688a Mon Sep 17 00:00:00 2001 From: rory Date: Tue, 30 Sep 2025 17:21:29 -0700 Subject: [PATCH 04/13] Use more generic object type peeling operator --- .../javascript/getPullRequestIncrementalChanges/index.js | 2 +- scripts/utils/Git.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/javascript/getPullRequestIncrementalChanges/index.js b/.github/actions/javascript/getPullRequestIncrementalChanges/index.js index 88d16b09f87d..981dd5e14329 100644 --- a/.github/actions/javascript/getPullRequestIncrementalChanges/index.js +++ b/.github/actions/javascript/getPullRequestIncrementalChanges/index.js @@ -12560,7 +12560,7 @@ class Git { */ static isValidRef(ref) { try { - (0, child_process_1.execSync)(`git rev-parse --verify "${ref}^{commit}"`, { + (0, child_process_1.execSync)(`git rev-parse --verify "${ref}^{object}"`, { encoding: 'utf8', cwd: process.cwd(), stdio: 'pipe', // Suppress output diff --git a/scripts/utils/Git.ts b/scripts/utils/Git.ts index b855d9f75e4a..816904b69fd9 100644 --- a/scripts/utils/Git.ts +++ b/scripts/utils/Git.ts @@ -64,7 +64,7 @@ class Git { */ static isValidRef(ref: string): boolean { try { - execSync(`git rev-parse --verify "${ref}^{commit}"`, { + execSync(`git rev-parse --verify "${ref}^{object}"`, { encoding: 'utf8', cwd: process.cwd(), stdio: 'pipe', // Suppress output From 1cb1cc13f75279cca382418b6157c14bb54bf57a Mon Sep 17 00:00:00 2001 From: rory Date: Tue, 30 Sep 2025 17:24:42 -0700 Subject: [PATCH 05/13] Conditionally run tmate --- .github/workflows/generateTranslations.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/generateTranslations.yml b/.github/workflows/generateTranslations.yml index b835f145c614..e25fcc5f5c2f 100644 --- a/.github/workflows/generateTranslations.yml +++ b/.github/workflows/generateTranslations.yml @@ -51,6 +51,7 @@ jobs: uses: ./.github/actions/composite/setupNode - name: Setup tmate + if: runner.debug == '1' uses: mxschmitt/action-tmate@e5c7151931ca95bad1c6f4190c730ecf8c7dde48 timeout-minutes: 60 with: From 9904fa7ac42b3e559d4966193f9b3619aa202bc5 Mon Sep 17 00:00:00 2001 From: rory Date: Tue, 30 Sep 2025 17:32:53 -0700 Subject: [PATCH 06/13] Add another context annotation --- src/languages/en.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index 807c946cf0e7..d4ec8fe281b0 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -577,6 +577,7 @@ const translations = { tax: 'Tax', shared: 'Shared', drafts: 'Drafts', + // @context as a noun, not a verb draft: 'Draft', finished: 'Finished', upgrade: 'Upgrade', From c93b13d68e5a66252ee0df700c28f5eb992b55ac Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 1 Oct 2025 15:52:49 -0700 Subject: [PATCH 07/13] Skip context lines in git diff --- scripts/utils/Git.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/utils/Git.ts b/scripts/utils/Git.ts index 816904b69fd9..15100b948d2d 100644 --- a/scripts/utils/Git.ts +++ b/scripts/utils/Git.ts @@ -14,7 +14,7 @@ const GIT_ERRORS = { /** * Represents a single changed line in a git diff. - * With -U0, only added and removed lines are present (no context). + * Only added and removed lines are tracked (context lines are skipped during parsing). */ type DiffLine = { number: number; @@ -200,6 +200,9 @@ class Git { type: 'removed', content, }); + } else if (firstChar === ' ') { + // Context line - skip it (we only care about added/removed lines) + continue; } else { throw new Error(`Unknown line type! First character of line is ${firstChar}`); } From 5260919a5e35e99c5b3d710d3d6f842489f19de6 Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 1 Oct 2025 15:53:38 -0700 Subject: [PATCH 08/13] Add missing type peeling operator to test --- tests/unit/GitTest.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/GitTest.ts b/tests/unit/GitTest.ts index 90e380ddc6d0..88610a12d135 100644 --- a/tests/unit/GitTest.ts +++ b/tests/unit/GitTest.ts @@ -21,7 +21,7 @@ describe('Git', () => { const result = Git.isValidRef('main'); expect(result).toBe(true); - expect(mockExecSync).toHaveBeenCalledWith('git rev-parse --verify "main"', { + expect(mockExecSync).toHaveBeenCalledWith('git rev-parse --verify "main^{object}"', { encoding: 'utf8', cwd: process.cwd(), stdio: 'pipe', From d95bf47a0759a79cad80dbad893fa07208bfb433 Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 1 Oct 2025 15:55:12 -0700 Subject: [PATCH 09/13] Add missing context for outstanding --- src/languages/en.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index 12f051adc9ec..17304dc5339b 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -605,6 +605,7 @@ const translations = { disabled: 'Disabled', import: 'Import', offlinePrompt: "You can't take this action right now.", + // @context meaning "remaining to be paid, done, or dealt with", not "exceptionally good" outstanding: 'Outstanding', chats: 'Chats', tasks: 'Tasks', From 6a66acec666843f7512eacb3bb9c924f3ed075a2 Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 1 Oct 2025 15:58:27 -0700 Subject: [PATCH 10/13] Rebuild gh actions --- .../javascript/getPullRequestIncrementalChanges/index.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/actions/javascript/getPullRequestIncrementalChanges/index.js b/.github/actions/javascript/getPullRequestIncrementalChanges/index.js index 981dd5e14329..48bdf304a75c 100644 --- a/.github/actions/javascript/getPullRequestIncrementalChanges/index.js +++ b/.github/actions/javascript/getPullRequestIncrementalChanges/index.js @@ -12685,6 +12685,10 @@ class Git { content, }); } + else if (firstChar === ' ') { + // Context line - skip it (we only care about added/removed lines) + continue; + } else { throw new Error(`Unknown line type! First character of line is ${firstChar}`); } From 454cd097ac2f7264ee9a2ca16f09cc9d542daa4f Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 1 Oct 2025 15:59:10 -0700 Subject: [PATCH 11/13] Add rate context --- src/languages/en.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/languages/en.ts b/src/languages/en.ts index 17304dc5339b..cc4b824031c2 100755 --- a/src/languages/en.ts +++ b/src/languages/en.ts @@ -630,6 +630,7 @@ const translations = { downloadAsCSV: 'Download as CSV', help: 'Help', expenseReports: 'Expense Reports', + // @context Rate as a noun, not a verb rateOutOfPolicy: 'Rate out of policy', reimbursable: 'Reimbursable', editYourProfile: 'Edit your profile', From 304d069365c845fef56ad08659873466350f2848 Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 1 Oct 2025 15:59:45 -0700 Subject: [PATCH 12/13] Add missing workflow name --- .github/workflows/translationDryRun.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/translationDryRun.yml b/.github/workflows/translationDryRun.yml index 0b56203553cd..dd134d20a588 100644 --- a/.github/workflows/translationDryRun.yml +++ b/.github/workflows/translationDryRun.yml @@ -1,3 +1,5 @@ +name: Translation Dry Run + on: pull_request: types: [opened, synchronize] From ad596855310c058609c955e1e2d8d67d8993468c Mon Sep 17 00:00:00 2001 From: rory Date: Wed, 1 Oct 2025 16:02:44 -0700 Subject: [PATCH 13/13] Apply translation diff --- src/languages/de.ts | 4 ++-- src/languages/fr.ts | 4 ++-- src/languages/it.ts | 8 +++----- src/languages/ja.ts | 6 +++--- src/languages/nl.ts | 6 +++--- src/languages/pl.ts | 4 ++-- src/languages/pt-BR.ts | 2 +- src/languages/zh-hans.ts | 2 +- 8 files changed, 17 insertions(+), 19 deletions(-) diff --git a/src/languages/de.ts b/src/languages/de.ts index 8fea408a237e..b1a2e2a2bf75 100644 --- a/src/languages/de.ts +++ b/src/languages/de.ts @@ -611,7 +611,7 @@ const translations = { disabled: 'Deaktiviert', import: 'Importieren', offlinePrompt: 'Sie können diese Aktion momentan nicht ausführen.', - outstanding: 'Hervorragend', + outstanding: 'Ausstehend', chats: 'Chats', tasks: 'Aufgaben', unread: 'Ungelesen', @@ -636,7 +636,7 @@ const translations = { downloadAsCSV: 'Als CSV herunterladen', help: 'Hilfe', expenseReports: 'Spesenabrechnungen', - rateOutOfPolicy: 'Außerhalb der Richtlinie bewerten', + rateOutOfPolicy: 'Satz außerhalb der Richtlinien', reimbursable: 'Erstattungsfähig', editYourProfile: 'Bearbeiten Sie Ihr Profil', comments: 'Kommentare', diff --git a/src/languages/fr.ts b/src/languages/fr.ts index ddd47968853a..0ca6234fd55c 100644 --- a/src/languages/fr.ts +++ b/src/languages/fr.ts @@ -611,7 +611,7 @@ const translations = { disabled: 'Désactivé', import: 'Importation', offlinePrompt: 'Vous ne pouvez pas effectuer cette action pour le moment.', - outstanding: 'Exceptionnel', + outstanding: 'En attente', chats: 'Chats', tasks: 'Tâches', unread: 'Non lu', @@ -636,7 +636,7 @@ const translations = { downloadAsCSV: 'Télécharger en CSV', help: 'Aide', expenseReports: 'Rapports de dépenses', - rateOutOfPolicy: 'Évaluer hors politique', + rateOutOfPolicy: 'Taux hors politique', reimbursable: 'Remboursable', editYourProfile: 'Modifier votre profil', comments: 'Commentaires', diff --git a/src/languages/it.ts b/src/languages/it.ts index ee1f74654001..9db6cb97e92d 100644 --- a/src/languages/it.ts +++ b/src/languages/it.ts @@ -611,7 +611,7 @@ const translations = { disabled: 'Disabilitato', import: 'Importa', offlinePrompt: 'Non puoi eseguire questa azione in questo momento.', - outstanding: 'Eccezionale', + outstanding: 'In sospeso', chats: 'Chat', tasks: 'Attività', unread: 'Non letto', @@ -636,7 +636,7 @@ const translations = { downloadAsCSV: 'Scarica come CSV', help: 'Aiuto', expenseReports: 'Report di spesa', - rateOutOfPolicy: 'Valuta fuori politica', + rateOutOfPolicy: 'Tariffa fuori politica', reimbursable: 'Rimborsabile', editYourProfile: 'Modifica il tuo profilo', comments: 'Commenti', @@ -678,9 +678,7 @@ const translations = { }: { command?: string; } = {}) => - `Non sei autorizzato a eseguire questa azione quando il supporto è connesso (comando: ${ - command ?? '' - }). Se ritieni che Success debba essere in grado di eseguire questa azione, avvia una conversazione su Slack.`, + `Non sei autorizzato a eseguire questa azione quando il supporto è connesso (comando: ${command ?? ''}). Se ritieni che Success debba essere in grado di eseguire questa azione, avvia una conversazione su Slack.`, }, lockedAccount: { title: 'Account bloccato', diff --git a/src/languages/ja.ts b/src/languages/ja.ts index c09c40204ecc..92bff23b046a 100644 --- a/src/languages/ja.ts +++ b/src/languages/ja.ts @@ -583,7 +583,7 @@ const translations = { tax: '税金', shared: '共有', drafts: '下書き', - draft: 'ドラフト', + draft: '下書き', finished: '完了', upgrade: 'アップグレード', downgradeWorkspace: 'ワークスペースをダウングレードする', @@ -611,7 +611,7 @@ const translations = { disabled: '無効', import: 'インポート', offlinePrompt: '現在、この操作を行うことはできません。', - outstanding: '未払い', + outstanding: '未処理', chats: 'チャット', tasks: 'タスク', unread: '未読', @@ -636,7 +636,7 @@ const translations = { downloadAsCSV: 'CSVとしてダウンロード', help: '助けて', expenseReports: '経費報告書', - rateOutOfPolicy: 'ポリシー外の評価', + rateOutOfPolicy: 'ポリシー外のレート', reimbursable: '払い戻し可能', editYourProfile: 'プロフィールを編集', comments: 'コメント', diff --git a/src/languages/nl.ts b/src/languages/nl.ts index 05130d6ac1a1..ff6e8771516a 100644 --- a/src/languages/nl.ts +++ b/src/languages/nl.ts @@ -583,7 +583,7 @@ const translations = { tax: 'Belasting', shared: 'Gedeeld', drafts: 'Concepten', - draft: 'Ontwerp', + draft: 'Conceptversie', finished: 'Voltooid', upgrade: 'Upgrade', downgradeWorkspace: 'Werkruimte downgraden', @@ -611,7 +611,7 @@ const translations = { disabled: 'Uitgeschakeld', import: 'Importeren', offlinePrompt: 'Je kunt deze actie nu niet uitvoeren.', - outstanding: 'Uitstekend', + outstanding: 'Uitstaand', chats: 'Chats', tasks: 'Taken', unread: 'Ongelezen', @@ -635,7 +635,7 @@ const translations = { downloadAsCSV: 'Downloaden als CSV', help: 'Help', expenseReports: "Onkostennota's", - rateOutOfPolicy: 'Beoordeel buiten beleid', + rateOutOfPolicy: 'Tarief buiten beleid', reimbursable: 'Vergoedbaar', editYourProfile: 'Bewerk je profiel', comments: 'Opmerkingen', diff --git a/src/languages/pl.ts b/src/languages/pl.ts index a6c2eee19719..6aad33260c7c 100644 --- a/src/languages/pl.ts +++ b/src/languages/pl.ts @@ -611,7 +611,7 @@ const translations = { disabled: 'Wyłączony', import: 'Importuj', offlinePrompt: 'Nie możesz teraz podjąć tej akcji.', - outstanding: 'Zaległe', + outstanding: 'Zaległy', chats: 'Czaty', tasks: 'Zadania', unread: 'Nieprzeczytane', @@ -636,7 +636,7 @@ const translations = { downloadAsCSV: 'Pobierz jako CSV', help: 'Pomoc', expenseReports: 'Raporty wydatków', - rateOutOfPolicy: 'Oceń poza polityką', + rateOutOfPolicy: 'Stawka poza polityką', reimbursable: 'Podlegające zwrotowi', editYourProfile: 'Edytuj swój profil', comments: 'Komentarze', diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts index 3b050f23a4f9..c0bf08323339 100644 --- a/src/languages/pt-BR.ts +++ b/src/languages/pt-BR.ts @@ -612,7 +612,7 @@ const translations = { disabled: 'Desativado', import: 'Importar', offlinePrompt: 'Você não pode realizar esta ação no momento.', - outstanding: 'Excelente', + outstanding: 'Pendente', chats: 'Chats', tasks: 'Tarefas', unread: 'Não lido', diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts index 5aef698273ac..ff7d189fd026 100644 --- a/src/languages/zh-hans.ts +++ b/src/languages/zh-hans.ts @@ -611,7 +611,7 @@ const translations = { disabled: '禁用', import: '导入', offlinePrompt: '您现在无法执行此操作。', - outstanding: '优秀', + outstanding: '未完成的', chats: '聊天', tasks: '任务', unread: '未读',