feat: Created in-product Help landing page and updated Settings navigation#86187
feat: Created in-product Help landing page and updated Settings navigation#86187Valforte merged 16 commits intoExpensify:mainfrom
Conversation
|
Hey, I noticed you changed If you want to automatically generate translations for other locales, an Expensify employee will have to:
Alternatively, if you are an external contributor, you can run the translation script locally with your own OpenAI API key. To learn more, try running: npx ts-node ./scripts/generateTranslations.ts --helpTypically, you'd want to translate only what you changed by running |
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
|
@Krishna2323 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] |
|
@FitseTLT will review this. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 84147abd24
ℹ️ 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".
|
Can anyone plz run translations workflow here |
|
Let me know when it is ready for review 👍 |
|
It is ready @FitseTLT , I am about to add screenshots for all platforms. |
|
It's related to missing translations, someone needs to run that workflow. |
|
Did you confirm spanish translations? @Pujan92 |
|
Update test steps
|
Reviewer Checklist
Screenshots/VideosAndroid: HybridApp2026-03-27.01-10-59.mp4Android: mWeb Chrome2026-03-27.18-12-15.mp4iOS: HybridAppiOS: mWeb Safari2026-03-27.18-10-49.mp4MacOS: Chrome / Safari2026-03-27.18-09-27.mp4 |
FitseTLT
left a comment
There was a problem hiding this comment.
LGTM except the missing translations
|
Running translations |
|
You can tag me directly for translations next time |
🦜 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 ee06f7ab..d0944ba0 100644
--- a/src/languages/de.ts
+++ b/src/languages/de.ts
@@ -1965,6 +1965,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Kontoeinstellungen',
account: 'Konto',
general: 'Allgemein',
+ helpPage: {title: 'Hilfe und Support', description: 'Wir sind rund um die Uhr für Sie da', helpSite: 'Hilfeseite'},
},
closeAccountPage: {
closeAccount: 'Konto schließen',
@@ -7441,7 +7442,14 @@ Fordern Sie Spesendetails wie Belege und Beschreibungen an, legen Sie Limits und
searchIn: 'Suchen in',
searchPlaceholder: 'Nach etwas suchen',
suggestions: 'Vorschläge',
- suggestionsAvailable: ({count}: {count: number}, query = '') => ({
+ suggestionsAvailable: (
+ {
+ count,
+ }: {
+ count: number;
+ },
+ query = '',
+ ) => ({
one: `Vorschläge verfügbar${query ? ` für ${query}` : ''}. ${count} Ergebnis.`,
other: (resultCount: number) => `Vorschläge verfügbar${query ? ` für ${query}` : ''}. ${resultCount} Ergebnisse.`,
}),
diff --git a/src/languages/fr.ts b/src/languages/fr.ts
index 0aa9dbb4..fe2c55b1 100644
--- a/src/languages/fr.ts
+++ b/src/languages/fr.ts
@@ -1970,6 +1970,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Paramètres du compte',
account: 'Compte',
general: 'Général',
+ helpPage: {title: 'Aide et assistance', description: 'Nous sommes là pour vous aider 24 h/24, 7 j/7', helpSite: 'Site d’aide'},
},
closeAccountPage: {
closeAccount: 'Fermer le compte',
@@ -7465,7 +7466,14 @@ Rendez obligatoires des informations de dépense comme les reçus et les descrip
searchIn: 'Rechercher dans',
searchPlaceholder: 'Rechercher quelque chose',
suggestions: 'Suggestions',
- suggestionsAvailable: ({count}: {count: number}, query = '') => ({
+ suggestionsAvailable: (
+ {
+ count,
+ }: {
+ count: number;
+ },
+ query = '',
+ ) => ({
one: `Suggestions disponibles${query ? ` pour ${query}` : ''}. ${count} résultat.`,
other: (resultCount: number) => `Suggestions disponibles${query ? ` pour ${query}` : ''}. ${resultCount} résultats.`,
}),
diff --git a/src/languages/it.ts b/src/languages/it.ts
index 2d5abf1a..d562ab3a 100644
--- a/src/languages/it.ts
+++ b/src/languages/it.ts
@@ -1963,6 +1963,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Impostazioni account',
account: 'Account',
general: 'Generale',
+ helpPage: {title: 'Aiuto e supporto', description: 'Siamo qui per aiutarti 24 ore su 24, 7 giorni su 7', helpSite: 'Sito di assistenza'},
},
closeAccountPage: {
closeAccount: 'Chiudi account',
@@ -7429,7 +7430,14 @@ Richiedi dettagli sulle spese come ricevute e descrizioni, imposta limiti e valo
searchIn: 'Cerca in',
searchPlaceholder: 'Cerca qualcosa',
suggestions: 'Suggerimenti',
- suggestionsAvailable: ({count}: {count: number}, query = '') => ({
+ suggestionsAvailable: (
+ {
+ count,
+ }: {
+ count: number;
+ },
+ query = '',
+ ) => ({
one: `Suggerimenti disponibili${query ? ` per ${query}` : ''}. ${count} risultato.`,
other: (resultCount: number) => `Suggerimenti disponibili${query ? ` per ${query}` : ''}. ${resultCount} risultati.`,
}),
diff --git a/src/languages/ja.ts b/src/languages/ja.ts
index 467532ad..f4c66008 100644
--- a/src/languages/ja.ts
+++ b/src/languages/ja.ts
@@ -1942,6 +1942,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'アカウント設定',
account: 'アカウント',
general: '一般',
+ helpPage: {title: 'ヘルプとサポート', description: '24時間365日いつでもサポートいたします', helpSite: 'ヘルプサイト'},
},
closeAccountPage: {
closeAccount: 'アカウントを閉じる',
@@ -7337,7 +7338,14 @@ ${reportName}
searchIn: '検索対象',
searchPlaceholder: '何かを検索',
suggestions: '提案',
- suggestionsAvailable: ({count}: {count: number}, query = '') => ({
+ suggestionsAvailable: (
+ {
+ count,
+ }: {
+ count: number;
+ },
+ query = '',
+ ) => ({
one: `候補があります${query ? `: ${query}` : ''}。${count}件の結果。`,
other: (resultCount: number) => `候補があります${query ? `: ${query}` : ''}。${resultCount}件の結果。`,
}),
diff --git a/src/languages/nl.ts b/src/languages/nl.ts
index 3632a49b..f48035a8 100644
--- a/src/languages/nl.ts
+++ b/src/languages/nl.ts
@@ -1959,6 +1959,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Accountinstellingen',
account: 'Account',
general: 'Algemeen',
+ helpPage: {title: 'Hulp en ondersteuning', description: 'We zijn er om je 24/7 te helpen', helpSite: 'Helppagina'},
},
closeAccountPage: {
closeAccount: 'Account sluiten',
@@ -7395,7 +7396,14 @@ Vereis onkostendetails zoals bonnen en beschrijvingen, stel limieten en standaar
searchIn: 'Zoeken in',
searchPlaceholder: 'Zoek iets',
suggestions: 'Suggesties',
- suggestionsAvailable: ({count}: {count: number}, query = '') => ({
+ suggestionsAvailable: (
+ {
+ count,
+ }: {
+ count: number;
+ },
+ query = '',
+ ) => ({
one: `Suggesties beschikbaar${query ? ` voor ${query}` : ''}. ${count} resultaat.`,
other: (resultCount: number) => `Suggesties beschikbaar${query ? ` voor ${query}` : ''}. ${resultCount} resultaten.`,
}),
diff --git a/src/languages/pl.ts b/src/languages/pl.ts
index ff381913..55d8f24f 100644
--- a/src/languages/pl.ts
+++ b/src/languages/pl.ts
@@ -1959,6 +1959,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Ustawienia konta',
account: 'Konto',
general: 'Ogólne',
+ helpPage: {title: 'Pomoc i wsparcie', description: 'Jesteśmy tu, żeby pomagać ci 24/7', helpSite: 'Centrum pomocy'},
},
closeAccountPage: {
closeAccount: 'Zamknij konto',
@@ -7396,7 +7397,14 @@ Wymagaj szczegółów wydatków, takich jak paragony i opisy, ustawiaj limity i
searchIn: 'Szukaj w',
searchPlaceholder: 'Wyszukaj coś',
suggestions: 'Sugestie',
- suggestionsAvailable: ({count}: {count: number}, query = '') => ({
+ suggestionsAvailable: (
+ {
+ count,
+ }: {
+ count: number;
+ },
+ query = '',
+ ) => ({
one: `Dostępne sugestie${query ? ` dla ${query}` : ''}. ${count} wynik.`,
other: (resultCount: number) => `Dostępne sugestie${query ? ` dla ${query}` : ''}. ${resultCount} wyniki.`,
}),
diff --git a/src/languages/pt-BR.ts b/src/languages/pt-BR.ts
index 53322002..a8411733 100644
--- a/src/languages/pt-BR.ts
+++ b/src/languages/pt-BR.ts
@@ -1955,6 +1955,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: 'Configurações da conta',
account: 'Conta',
general: 'Geral',
+ helpPage: {title: 'Ajuda e suporte', description: 'Estamos aqui para ajudar você 24 horas por dia, 7 dias por semana', helpSite: 'Site de ajuda'},
},
closeAccountPage: {
closeAccount: 'Encerrar conta',
@@ -7383,7 +7384,14 @@ Exija dados de despesas como recibos e descrições, defina limites e padrões e
searchIn: 'Pesquisar em',
searchPlaceholder: 'Pesquisar algo',
suggestions: 'Sugestões',
- suggestionsAvailable: ({count}: {count: number}, query = '') => ({
+ suggestionsAvailable: (
+ {
+ count,
+ }: {
+ count: number;
+ },
+ query = '',
+ ) => ({
one: `Sugestões disponíveis${query ? ` para ${query}` : ''}. ${count} resultado.`,
other: (resultCount: number) => `Sugestões disponíveis${query ? ` para ${query}` : ''}. ${resultCount} resultados.`,
}),
diff --git a/src/languages/zh-hans.ts b/src/languages/zh-hans.ts
index e16a92be..b922ccf6 100644
--- a/src/languages/zh-hans.ts
+++ b/src/languages/zh-hans.ts
@@ -1912,6 +1912,7 @@ const translations: TranslationDeepObject<typeof en> = {
accountSettings: '账户设置',
account: '账户',
general: '常规',
+ helpPage: {title: '帮助与支持', description: '我们全天候 24/7 为您提供帮助', helpSite: '帮助网站'},
},
closeAccountPage: {
closeAccount: '关闭账户',
@@ -7212,7 +7213,14 @@ ${reportName}
searchIn: '搜索范围',
searchPlaceholder: '搜索内容',
suggestions: '建议',
- suggestionsAvailable: ({count}: {count: number}, query = '') => ({
+ suggestionsAvailable: (
+ {
+ count,
+ }: {
+ count: number;
+ },
+ query = '',
+ ) => ({
one: `有可用建议${query ? `:${query}` : ''}。共${count}条结果。`,
other: (resultCount: number) => `有可用建议${query ? `:${query}` : ''}。共${resultCount}条结果。`,
}),
Note You can apply these changes to your branch by copying the patch to your clipboard, then running |
| searchPlaceholder: 'Cerca qualcosa', | ||
| suggestions: 'Suggerimenti', | ||
| suggestionsAvailable: ({count}: {count: number}, query = '') => ({ | ||
| suggestionsAvailable: ( |
There was a problem hiding this comment.
Where did these changes came from?
There was a problem hiding this comment.
That format diff came in the translations patch.
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 @Valforte has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/Valforte in version: 9.3.51-0 🚀
Bundle Size Analysis (Sentry): |
|
🤖 Help Site Review Complete I reviewed the changes in this PR and found one help site article that needs updating: File: What changed: The Help menu item description previously said "browse Expensify's help site" — which was accurate when Help opened the external site directly. Since this PR introduces an in-product Help landing page, I updated the description to "access help and support resources, including a link to the help site." PR created: #86776 No other help site articles were affected by this change. |
|
Deploy Blocker #86801 was identified to be related to this PR. |
|
🚀 Deployed to production by https://github.com/jasperhuangg in version: 9.3.51-10 🚀
|
Explanation of Change
Created a new Help landing page screen and updated the Settings menu to navigate to it instead of opening the Help Site externally. In the new page, I added the link to the Help website.
Fixed Issues
$ #85991
PROPOSAL:
Tests
Offline tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
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
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari