@agent-native/core 0.75.5 → 0.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +7 -0
- package/corpus/core/docs/AGENTS.md +1 -0
- package/corpus/core/docs/content/client.md +15 -0
- package/corpus/core/docs/content/internationalization.md +145 -0
- package/corpus/core/docs/content/locales/ar-SA/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/de-DE/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/es-ES/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/fr-FR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/hi-IN/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/ja-JP/internationalization.md +114 -0
- package/corpus/core/docs/content/locales/ko-KR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/pt-BR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/zh-CN/internationalization.md +102 -0
- package/corpus/core/docs/content/skills-guide.md +19 -18
- package/corpus/core/package.json +7 -1
- package/corpus/core/src/client/CommandMenu.tsx +16 -0
- package/corpus/core/src/client/app-providers.tsx +26 -1
- package/corpus/core/src/client/i18n.tsx +605 -0
- package/corpus/core/src/client/index.ts +28 -0
- package/corpus/core/src/index.browser.ts +25 -0
- package/corpus/core/src/localization/actions/get-localization-preference.ts +23 -0
- package/corpus/core/src/localization/actions/set-localization-preference.ts +30 -0
- package/corpus/core/src/localization/index.ts +2 -0
- package/corpus/core/src/localization/server.ts +131 -0
- package/corpus/core/src/localization/shared.ts +163 -0
- package/corpus/core/src/server/action-discovery.ts +8 -0
- package/corpus/core/src/server/index.ts +8 -0
- package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/core/src/templates/default/AGENTS.md +16 -15
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +29 -0
- package/corpus/core/src/templates/default/app/i18n/index.ts +13 -0
- package/corpus/core/src/templates/default/app/root.tsx +20 -1
- package/corpus/core/src/templates/default/app/routes/_index.tsx +24 -9
- package/corpus/core/src/templates/default/app/routes/settings.tsx +67 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/core/src/vite/action-types-plugin.ts +10 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/analytics/app/components/layout/Header.tsx +18 -15
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
- package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +9 -3
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -3
- package/corpus/templates/analytics/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/analytics/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/analytics/app/i18n/en-US.ts +3 -0
- package/corpus/templates/analytics/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/analytics/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/analytics/app/i18n/index.ts +31 -0
- package/corpus/templates/analytics/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/analytics/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/analytics/app/i18n-data.ts +433 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +50 -16
- package/corpus/templates/analytics/app/root.tsx +14 -1
- package/corpus/templates/analytics/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/assets/app/components/layout/Header.tsx +17 -8
- package/corpus/templates/assets/app/components/layout/Layout.tsx +10 -6
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +40 -23
- package/corpus/templates/assets/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/assets/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/assets/app/i18n/en-US.ts +3 -0
- package/corpus/templates/assets/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/assets/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/assets/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/assets/app/i18n/index.ts +31 -0
- package/corpus/templates/assets/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/assets/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/assets/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/assets/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/assets/app/i18n-data.ts +668 -0
- package/corpus/templates/assets/app/root.tsx +40 -15
- package/corpus/templates/assets/app/routes/_index.tsx +9 -10
- package/corpus/templates/assets/app/routes/settings.tsx +37 -6
- package/corpus/templates/assets/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/assets/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +12 -8
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +23 -12
- package/corpus/templates/brain/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/brain/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/brain/app/i18n/en-US.ts +3 -0
- package/corpus/templates/brain/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/brain/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/brain/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/brain/app/i18n/index.ts +31 -0
- package/corpus/templates/brain/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/brain/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/brain/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/brain/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/brain/app/i18n-data.ts +624 -0
- package/corpus/templates/brain/app/root.tsx +27 -12
- package/corpus/templates/brain/app/routes/settings.tsx +45 -8
- package/corpus/templates/brain/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/brain/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +2 -0
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +16 -9
- package/corpus/templates/calendar/app/i18n/ar-SA.ts +57 -0
- package/corpus/templates/calendar/app/i18n/de-DE.ts +58 -0
- package/corpus/templates/calendar/app/i18n/en-US.ts +57 -0
- package/corpus/templates/calendar/app/i18n/es-ES.ts +58 -0
- package/corpus/templates/calendar/app/i18n/fr-FR.ts +58 -0
- package/corpus/templates/calendar/app/i18n/hi-IN.ts +57 -0
- package/corpus/templates/calendar/app/i18n/index.ts +31 -0
- package/corpus/templates/calendar/app/i18n/ja-JP.ts +58 -0
- package/corpus/templates/calendar/app/i18n/ko-KR.ts +57 -0
- package/corpus/templates/calendar/app/i18n/pt-BR.ts +57 -0
- package/corpus/templates/calendar/app/i18n/zh-CN.ts +57 -0
- package/corpus/templates/calendar/app/i18n-data.ts +516 -0
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +2 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +63 -28
- package/corpus/templates/calendar/app/root.tsx +78 -7
- package/corpus/templates/calendar/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/calendar/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/chat/app/components/layout/Header.tsx +17 -11
- package/corpus/templates/chat/app/components/layout/Layout.tsx +12 -8
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +47 -18
- package/corpus/templates/chat/app/i18n/ar-SA.ts +62 -0
- package/corpus/templates/chat/app/i18n/de-DE.ts +63 -0
- package/corpus/templates/chat/app/i18n/en-US.ts +63 -0
- package/corpus/templates/chat/app/i18n/es-ES.ts +63 -0
- package/corpus/templates/chat/app/i18n/fr-FR.ts +63 -0
- package/corpus/templates/chat/app/i18n/hi-IN.ts +63 -0
- package/corpus/templates/chat/app/i18n/index.ts +31 -0
- package/corpus/templates/chat/app/i18n/ja-JP.ts +63 -0
- package/corpus/templates/chat/app/i18n/ko-KR.ts +63 -0
- package/corpus/templates/chat/app/i18n/pt-BR.ts +63 -0
- package/corpus/templates/chat/app/i18n/zh-CN.ts +61 -0
- package/corpus/templates/chat/app/i18n-data.ts +475 -0
- package/corpus/templates/chat/app/root.tsx +18 -5
- package/corpus/templates/chat/app/routes/_index.tsx +9 -8
- package/corpus/templates/chat/app/routes/settings.tsx +86 -0
- package/corpus/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/clips/app/components/layout/Header.tsx +23 -17
- package/corpus/templates/clips/app/components/library/empty-state.tsx +10 -34
- package/corpus/templates/clips/app/components/library/library-layout.tsx +45 -34
- package/corpus/templates/clips/app/i18n/ar-SA.ts +182 -0
- package/corpus/templates/clips/app/i18n/de-DE.ts +184 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +179 -0
- package/corpus/templates/clips/app/i18n/es-ES.ts +183 -0
- package/corpus/templates/clips/app/i18n/fr-FR.ts +184 -0
- package/corpus/templates/clips/app/i18n/hi-IN.ts +180 -0
- package/corpus/templates/clips/app/i18n/index.ts +41 -0
- package/corpus/templates/clips/app/i18n/ja-JP.ts +180 -0
- package/corpus/templates/clips/app/i18n/ko-KR.ts +178 -0
- package/corpus/templates/clips/app/i18n/pt-BR.ts +183 -0
- package/corpus/templates/clips/app/i18n/zh-CN.ts +173 -0
- package/corpus/templates/clips/app/root.tsx +104 -10
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +154 -95
- package/corpus/templates/clips/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-24-clips-now-includes-a-language-picker-and-simplified-chinese-ui.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/content/app/components/EmptyState.tsx +7 -5
- package/corpus/templates/content/app/components/ThemeToggle.tsx +4 -2
- package/corpus/templates/content/app/components/layout/Header.tsx +2 -0
- package/corpus/templates/content/app/components/layout/Layout.tsx +8 -7
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +41 -1
- package/corpus/templates/content/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/content/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/content/app/i18n/en-US.ts +3 -0
- package/corpus/templates/content/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/content/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/content/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/content/app/i18n/index.ts +31 -0
- package/corpus/templates/content/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/content/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/content/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/content/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/content/app/i18n-data.ts +490 -0
- package/corpus/templates/content/app/root.tsx +110 -23
- package/corpus/templates/content/app/routes/_app.settings.tsx +84 -0
- package/corpus/templates/content/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/content/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/design/app/components/layout/Header.tsx +16 -8
- package/corpus/templates/design/app/components/layout/Layout.tsx +8 -6
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +25 -9
- package/corpus/templates/design/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/design/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/design/app/i18n/en-US.ts +3 -0
- package/corpus/templates/design/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/design/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/design/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/design/app/i18n/index.ts +31 -0
- package/corpus/templates/design/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/design/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/design/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/design/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +350 -0
- package/corpus/templates/design/app/root.tsx +40 -15
- package/corpus/templates/design/app/routes/settings.tsx +43 -0
- package/corpus/templates/design/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/design/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/dispatch/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/en-US.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/index.ts +31 -0
- package/corpus/templates/dispatch/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +267 -0
- package/corpus/templates/dispatch/app/root.tsx +18 -4
- package/corpus/templates/dispatch/app/routes/settings.tsx +86 -0
- package/corpus/templates/dispatch/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/forms/app/components/layout/Header.tsx +16 -9
- package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -4
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +34 -17
- package/corpus/templates/forms/app/i18n/ar-SA.ts +58 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +59 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +59 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +59 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +59 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +59 -0
- package/corpus/templates/forms/app/i18n/index.ts +31 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +59 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +59 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +59 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +56 -0
- package/corpus/templates/forms/app/root.tsx +65 -16
- package/corpus/templates/forms/app/routes/_app.settings.tsx +85 -0
- package/corpus/templates/forms/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/forms/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +29 -17
- package/corpus/templates/macros/app/components/layout/Header.tsx +16 -10
- package/corpus/templates/macros/app/i18n/ar-SA.ts +54 -0
- package/corpus/templates/macros/app/i18n/de-DE.ts +55 -0
- package/corpus/templates/macros/app/i18n/en-US.ts +55 -0
- package/corpus/templates/macros/app/i18n/es-ES.ts +55 -0
- package/corpus/templates/macros/app/i18n/fr-FR.ts +55 -0
- package/corpus/templates/macros/app/i18n/hi-IN.ts +55 -0
- package/corpus/templates/macros/app/i18n/index.ts +31 -0
- package/corpus/templates/macros/app/i18n/ja-JP.ts +55 -0
- package/corpus/templates/macros/app/i18n/ko-KR.ts +55 -0
- package/corpus/templates/macros/app/i18n/pt-BR.ts +55 -0
- package/corpus/templates/macros/app/i18n/zh-CN.ts +53 -0
- package/corpus/templates/macros/app/root.tsx +65 -15
- package/corpus/templates/macros/app/routes/settings.tsx +85 -0
- package/corpus/templates/macros/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/macros/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +9 -4
- package/corpus/templates/mail/app/i18n/ar-SA.ts +33 -0
- package/corpus/templates/mail/app/i18n/de-DE.ts +33 -0
- package/corpus/templates/mail/app/i18n/en-US.ts +32 -0
- package/corpus/templates/mail/app/i18n/es-ES.ts +33 -0
- package/corpus/templates/mail/app/i18n/fr-FR.ts +33 -0
- package/corpus/templates/mail/app/i18n/hi-IN.ts +32 -0
- package/corpus/templates/mail/app/i18n/index.ts +31 -0
- package/corpus/templates/mail/app/i18n/ja-JP.ts +32 -0
- package/corpus/templates/mail/app/i18n/ko-KR.ts +33 -0
- package/corpus/templates/mail/app/i18n/pt-BR.ts +34 -0
- package/corpus/templates/mail/app/i18n/zh-CN.ts +32 -0
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +67 -13
- package/corpus/templates/mail/app/root.tsx +20 -0
- package/corpus/templates/mail/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/mail/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/plan/app/components/layout/Header.tsx +19 -12
- package/corpus/templates/plan/app/components/layout/Layout.tsx +11 -7
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +41 -28
- package/corpus/templates/plan/app/i18n/ar-SA.ts +77 -0
- package/corpus/templates/plan/app/i18n/de-DE.ts +78 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +78 -0
- package/corpus/templates/plan/app/i18n/es-ES.ts +78 -0
- package/corpus/templates/plan/app/i18n/fr-FR.ts +78 -0
- package/corpus/templates/plan/app/i18n/hi-IN.ts +78 -0
- package/corpus/templates/plan/app/i18n/index.ts +31 -0
- package/corpus/templates/plan/app/i18n/ja-JP.ts +79 -0
- package/corpus/templates/plan/app/i18n/ko-KR.ts +77 -0
- package/corpus/templates/plan/app/i18n/pt-BR.ts +78 -0
- package/corpus/templates/plan/app/i18n/zh-CN.ts +74 -0
- package/corpus/templates/plan/app/root.tsx +45 -8
- package/corpus/templates/plan/app/routes/settings.tsx +86 -0
- package/corpus/templates/plan/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/slides/app/components/layout/Header.tsx +23 -11
- package/corpus/templates/slides/app/components/layout/Layout.tsx +7 -6
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +23 -11
- package/corpus/templates/slides/app/i18n/ar-SA.ts +54 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +56 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +55 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +55 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +55 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +55 -0
- package/corpus/templates/slides/app/i18n/index.ts +31 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +55 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +55 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +55 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +53 -0
- package/corpus/templates/slides/app/root.tsx +50 -8
- package/corpus/templates/slides/app/routes/settings.tsx +85 -0
- package/corpus/templates/slides/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/slides/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/videos/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +14 -9
- package/corpus/templates/videos/app/components/Sidebar.tsx +16 -9
- package/corpus/templates/videos/app/components/StudioHeader.tsx +12 -8
- package/corpus/templates/videos/app/components/layout/Header.tsx +21 -15
- package/corpus/templates/videos/app/components/layout/Layout.tsx +10 -7
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +21 -6
- package/corpus/templates/videos/app/i18n/ar-SA.ts +73 -0
- package/corpus/templates/videos/app/i18n/de-DE.ts +75 -0
- package/corpus/templates/videos/app/i18n/en-US.ts +74 -0
- package/corpus/templates/videos/app/i18n/es-ES.ts +75 -0
- package/corpus/templates/videos/app/i18n/fr-FR.ts +75 -0
- package/corpus/templates/videos/app/i18n/hi-IN.ts +74 -0
- package/corpus/templates/videos/app/i18n/index.ts +31 -0
- package/corpus/templates/videos/app/i18n/ja-JP.ts +74 -0
- package/corpus/templates/videos/app/i18n/ko-KR.ts +74 -0
- package/corpus/templates/videos/app/i18n/pt-BR.ts +75 -0
- package/corpus/templates/videos/app/i18n/zh-CN.ts +72 -0
- package/corpus/templates/videos/app/pages/Index.tsx +11 -9
- package/corpus/templates/videos/app/root.tsx +45 -7
- package/corpus/templates/videos/app/routes/settings.tsx +85 -0
- package/corpus/templates/videos/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/videos/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/dist/client/CommandMenu.d.ts +3 -0
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +9 -0
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/app-providers.d.ts +8 -1
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +7 -5
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/i18n.d.ts +54 -0
- package/dist/client/i18n.d.ts.map +1 -0
- package/dist/client/i18n.js +354 -0
- package/dist/client/i18n.js.map +1 -0
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/localization/actions/get-localization-preference.d.ts +4 -0
- package/dist/localization/actions/get-localization-preference.d.ts.map +1 -0
- package/dist/localization/actions/get-localization-preference.js +16 -0
- package/dist/localization/actions/get-localization-preference.js.map +1 -0
- package/dist/localization/actions/set-localization-preference.d.ts +6 -0
- package/dist/localization/actions/set-localization-preference.d.ts.map +1 -0
- package/dist/localization/actions/set-localization-preference.js +24 -0
- package/dist/localization/actions/set-localization-preference.js.map +1 -0
- package/dist/localization/index.d.ts +3 -0
- package/dist/localization/index.d.ts.map +1 -0
- package/dist/localization/index.js +3 -0
- package/dist/localization/index.js.map +1 -0
- package/dist/localization/server.d.ts +25 -0
- package/dist/localization/server.d.ts.map +1 -0
- package/dist/localization/server.js +69 -0
- package/dist/localization/server.js.map +1 -0
- package/dist/localization/shared.d.ts +25 -0
- package/dist/localization/shared.d.ts.map +1 -0
- package/dist/localization/shared.js +134 -0
- package/dist/localization/shared.js.map +1 -0
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +8 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/dist/templates/default/AGENTS.md +16 -15
- package/dist/templates/default/app/i18n/en-US.ts +29 -0
- package/dist/templates/default/app/i18n/index.ts +13 -0
- package/dist/templates/default/app/root.tsx +20 -1
- package/dist/templates/default/app/routes/_index.tsx +24 -9
- package/dist/templates/default/app/routes/settings.tsx +67 -0
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +8 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/AGENTS.md +1 -0
- package/docs/content/client.md +15 -0
- package/docs/content/internationalization.md +145 -0
- package/docs/content/locales/ar-SA/internationalization.md +102 -0
- package/docs/content/locales/de-DE/internationalization.md +102 -0
- package/docs/content/locales/es-ES/internationalization.md +102 -0
- package/docs/content/locales/fr-FR/internationalization.md +102 -0
- package/docs/content/locales/hi-IN/internationalization.md +102 -0
- package/docs/content/locales/ja-JP/internationalization.md +114 -0
- package/docs/content/locales/ko-KR/internationalization.md +102 -0
- package/docs/content/locales/pt-BR/internationalization.md +102 -0
- package/docs/content/locales/zh-CN/internationalization.md +102 -0
- package/docs/content/skills-guide.md +19 -18
- package/package.json +7 -1
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/src/templates/default/AGENTS.md +16 -15
- package/src/templates/default/app/i18n/en-US.ts +29 -0
- package/src/templates/default/app/i18n/index.ts +13 -0
- package/src/templates/default/app/root.tsx +20 -1
- package/src/templates/default/app/routes/_index.tsx +24 -9
- package/src/templates/default/app/routes/settings.tsx +67 -0
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
|
@@ -10,8 +10,10 @@ import {
|
|
|
10
10
|
appPath,
|
|
11
11
|
configureTracking,
|
|
12
12
|
createAgentNativeQueryClient,
|
|
13
|
+
getLocaleInitScript,
|
|
13
14
|
getThemeInitScript,
|
|
14
15
|
useCommandMenuShortcut,
|
|
16
|
+
useT,
|
|
15
17
|
} from "@agent-native/core/client";
|
|
16
18
|
import { IconSun, IconMoon } from "@tabler/icons-react";
|
|
17
19
|
import { TAB_ID } from "@/lib/tab-id";
|
|
@@ -19,6 +21,7 @@ import { AppLayout } from "@/components/layout/AppLayout";
|
|
|
19
21
|
import type { LinksFunction } from "react-router";
|
|
20
22
|
import changelog from "../CHANGELOG.md?raw";
|
|
21
23
|
import stylesheet from "./global.css?url";
|
|
24
|
+
import { i18nCatalog } from "./i18n";
|
|
22
25
|
|
|
23
26
|
configureTracking({
|
|
24
27
|
getDefaultProps: (_name, properties) => ({
|
|
@@ -32,7 +35,31 @@ export const links: LinksFunction = () => [
|
|
|
32
35
|
];
|
|
33
36
|
|
|
34
37
|
// Dark default: macros defaults to dark mode; enableSystem respects OS preference.
|
|
35
|
-
const
|
|
38
|
+
const THEME_INIT_SCRIPT_SELECTOR = "script[data-agent-native-theme-init]";
|
|
39
|
+
const LOCALE_INIT_SCRIPT_SELECTOR = "script[data-agent-native-locale-init]";
|
|
40
|
+
|
|
41
|
+
function getHydrationStableThemeInitScript() {
|
|
42
|
+
if (typeof document !== "undefined") {
|
|
43
|
+
const existing = document.querySelector<HTMLScriptElement>(
|
|
44
|
+
THEME_INIT_SCRIPT_SELECTOR,
|
|
45
|
+
);
|
|
46
|
+
if (existing?.innerHTML) return existing.innerHTML;
|
|
47
|
+
}
|
|
48
|
+
return getThemeInitScript("dark", true);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function getHydrationStableLocaleInitScript() {
|
|
52
|
+
if (typeof document !== "undefined") {
|
|
53
|
+
const existing = document.querySelector<HTMLScriptElement>(
|
|
54
|
+
LOCALE_INIT_SCRIPT_SELECTOR,
|
|
55
|
+
);
|
|
56
|
+
if (existing?.innerHTML) return existing.innerHTML;
|
|
57
|
+
}
|
|
58
|
+
return getLocaleInitScript();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const THEME_INIT_SCRIPT = getHydrationStableThemeInitScript();
|
|
62
|
+
const LOCALE_INIT_SCRIPT = getHydrationStableLocaleInitScript();
|
|
36
63
|
|
|
37
64
|
export function Layout({ children }: { children: React.ReactNode }) {
|
|
38
65
|
return (
|
|
@@ -44,9 +71,15 @@ export function Layout({ children }: { children: React.ReactNode }) {
|
|
|
44
71
|
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
|
|
45
72
|
/>
|
|
46
73
|
<script
|
|
74
|
+
data-agent-native-theme-init
|
|
47
75
|
suppressHydrationWarning
|
|
48
76
|
dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }}
|
|
49
77
|
/>
|
|
78
|
+
<script
|
|
79
|
+
data-agent-native-locale-init
|
|
80
|
+
suppressHydrationWarning
|
|
81
|
+
dangerouslySetInnerHTML={{ __html: LOCALE_INIT_SCRIPT }}
|
|
82
|
+
/>
|
|
50
83
|
<link rel="icon" type="image/svg+xml" href={appPath("/favicon.svg")} />
|
|
51
84
|
<meta name="theme-color" content="#0a0a0a" />
|
|
52
85
|
<Meta />
|
|
@@ -87,6 +120,7 @@ function DbSyncSetup() {
|
|
|
87
120
|
|
|
88
121
|
function ThemeToggleItem() {
|
|
89
122
|
const { resolvedTheme, setTheme } = useTheme();
|
|
123
|
+
const t = useT();
|
|
90
124
|
const isDark = resolvedTheme === "dark";
|
|
91
125
|
return (
|
|
92
126
|
<CommandMenu.Item
|
|
@@ -94,11 +128,38 @@ function ThemeToggleItem() {
|
|
|
94
128
|
keywords={["theme", "dark", "light", "mode"]}
|
|
95
129
|
>
|
|
96
130
|
{isDark ? <IconSun size={16} /> : <IconMoon size={16} />}
|
|
97
|
-
|
|
131
|
+
{t("root.toggleTheme")}
|
|
98
132
|
</CommandMenu.Item>
|
|
99
133
|
);
|
|
100
134
|
}
|
|
101
135
|
|
|
136
|
+
function MacrosCommandMenu({
|
|
137
|
+
open,
|
|
138
|
+
onOpenChange,
|
|
139
|
+
}: {
|
|
140
|
+
open: boolean;
|
|
141
|
+
onOpenChange: (open: boolean) => void;
|
|
142
|
+
}) {
|
|
143
|
+
const t = useT();
|
|
144
|
+
return (
|
|
145
|
+
<CommandMenu
|
|
146
|
+
open={open}
|
|
147
|
+
onOpenChange={onOpenChange}
|
|
148
|
+
changelog={changelog}
|
|
149
|
+
changelogKey="macros"
|
|
150
|
+
>
|
|
151
|
+
<CommandMenu.Group heading={t("root.commandActions")}>
|
|
152
|
+
<CommandMenu.Item onSelect={() => {}}>
|
|
153
|
+
{t("root.search")}
|
|
154
|
+
</CommandMenu.Item>
|
|
155
|
+
</CommandMenu.Group>
|
|
156
|
+
<CommandMenu.Group heading={t("root.appearance")}>
|
|
157
|
+
<ThemeToggleItem />
|
|
158
|
+
</CommandMenu.Group>
|
|
159
|
+
</CommandMenu>
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
|
|
102
163
|
export default function Root() {
|
|
103
164
|
const [queryClient] = useState(() =>
|
|
104
165
|
createAgentNativeQueryClient({
|
|
@@ -123,21 +184,10 @@ export default function Root() {
|
|
|
123
184
|
defaultTheme="dark"
|
|
124
185
|
tooltipDelayDuration={300}
|
|
125
186
|
toaster={<Toaster richColors position="bottom-left" />}
|
|
187
|
+
i18n={{ catalog: i18nCatalog }}
|
|
126
188
|
>
|
|
127
189
|
<DbSyncSetup />
|
|
128
|
-
<
|
|
129
|
-
open={cmdkOpen}
|
|
130
|
-
onOpenChange={setCmdkOpen}
|
|
131
|
-
changelog={changelog}
|
|
132
|
-
changelogKey="macros"
|
|
133
|
-
>
|
|
134
|
-
<CommandMenu.Group heading="Actions">
|
|
135
|
-
<CommandMenu.Item onSelect={() => {}}>Search</CommandMenu.Item>
|
|
136
|
-
</CommandMenu.Group>
|
|
137
|
-
<CommandMenu.Group heading="Appearance">
|
|
138
|
-
<ThemeToggleItem />
|
|
139
|
-
</CommandMenu.Group>
|
|
140
|
-
</CommandMenu>
|
|
190
|
+
<MacrosCommandMenu open={cmdkOpen} onOpenChange={setCmdkOpen} />
|
|
141
191
|
<AppLayout>
|
|
142
192
|
<Outlet />
|
|
143
193
|
</AppLayout>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Link } from "react-router";
|
|
2
|
+
import {
|
|
3
|
+
ChangelogSettingsCard,
|
|
4
|
+
LanguagePicker,
|
|
5
|
+
openAgentSettings,
|
|
6
|
+
useT,
|
|
7
|
+
} from "@agent-native/core/client";
|
|
8
|
+
import { useSetPageTitle } from "@/components/layout/HeaderActions";
|
|
9
|
+
import { Button } from "@/components/ui/button";
|
|
10
|
+
import {
|
|
11
|
+
Card,
|
|
12
|
+
CardContent,
|
|
13
|
+
CardDescription,
|
|
14
|
+
CardHeader,
|
|
15
|
+
CardTitle,
|
|
16
|
+
} from "@/components/ui/card";
|
|
17
|
+
import { Label } from "@/components/ui/label";
|
|
18
|
+
import changelog from "../../CHANGELOG.md?raw";
|
|
19
|
+
|
|
20
|
+
export function meta() {
|
|
21
|
+
return [{ title: "Settings - Macros" }];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default function SettingsRoute() {
|
|
25
|
+
const t = useT();
|
|
26
|
+
useSetPageTitle(t("settings.title"));
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<main className="mx-auto w-full max-w-3xl space-y-6 px-4 py-6 sm:px-6 sm:py-10">
|
|
30
|
+
<div className="space-y-1">
|
|
31
|
+
<h1 className="text-2xl font-semibold tracking-tight">
|
|
32
|
+
{t("settings.title")}
|
|
33
|
+
</h1>
|
|
34
|
+
<p className="text-sm leading-6 text-muted-foreground">
|
|
35
|
+
{t("settings.description")}
|
|
36
|
+
</p>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<Card>
|
|
40
|
+
<CardHeader>
|
|
41
|
+
<CardTitle className="text-base">
|
|
42
|
+
{t("settings.languageTitle")}
|
|
43
|
+
</CardTitle>
|
|
44
|
+
<CardDescription>{t("settings.languageDescription")}</CardDescription>
|
|
45
|
+
</CardHeader>
|
|
46
|
+
<CardContent className="max-w-xs space-y-1.5">
|
|
47
|
+
<Label>{t("settings.languageLabel")}</Label>
|
|
48
|
+
<LanguagePicker label={t("settings.languageLabel")} />
|
|
49
|
+
</CardContent>
|
|
50
|
+
</Card>
|
|
51
|
+
|
|
52
|
+
<Card>
|
|
53
|
+
<CardHeader>
|
|
54
|
+
<CardTitle className="text-base">
|
|
55
|
+
{t("settings.workspaceTitle")}
|
|
56
|
+
</CardTitle>
|
|
57
|
+
<CardDescription>
|
|
58
|
+
{t("settings.workspaceDescription")}
|
|
59
|
+
</CardDescription>
|
|
60
|
+
</CardHeader>
|
|
61
|
+
<CardContent>
|
|
62
|
+
<Button variant="outline" asChild>
|
|
63
|
+
<Link to="/team">{t("settings.openTeamSettings")}</Link>
|
|
64
|
+
</Button>
|
|
65
|
+
</CardContent>
|
|
66
|
+
</Card>
|
|
67
|
+
|
|
68
|
+
<Card>
|
|
69
|
+
<CardHeader>
|
|
70
|
+
<CardTitle className="text-base">
|
|
71
|
+
{t("settings.agentTitle")}
|
|
72
|
+
</CardTitle>
|
|
73
|
+
<CardDescription>{t("settings.agentDescription")}</CardDescription>
|
|
74
|
+
</CardHeader>
|
|
75
|
+
<CardContent>
|
|
76
|
+
<Button variant="outline" onClick={() => openAgentSettings()}>
|
|
77
|
+
{t("settings.openAgentSettings")}
|
|
78
|
+
</Button>
|
|
79
|
+
</CardContent>
|
|
80
|
+
</Card>
|
|
81
|
+
|
|
82
|
+
<ChangelogSettingsCard markdown={changelog} />
|
|
83
|
+
</main>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
@@ -66,6 +66,11 @@ el.dataset.selectedId = selectedItem?.id || "";
|
|
|
66
66
|
|
|
67
67
|
**Use configuration-driven rendering** — Extract visual decisions (colors, layouts, sizes) into JSON config files in `data/`. The agent can modify the config (Tier 1) instead of the component source (Tier 2).
|
|
68
68
|
|
|
69
|
+
**Keep localized copy in catalogs** — When editing visible UI copy, labels,
|
|
70
|
+
toasts, empty states, prompts, or formatting, read `internationalization` and
|
|
71
|
+
update `app/i18n/en-US.ts` plus existing locale catalogs instead of leaving new
|
|
72
|
+
inline strings in components.
|
|
73
|
+
|
|
69
74
|
## Don't
|
|
70
75
|
|
|
71
76
|
- Don't modify `.env` files or files containing secrets
|
|
@@ -80,3 +85,4 @@ el.dataset.selectedId = selectedItem?.id || "";
|
|
|
80
85
|
- **actions** — The agent can create or modify actions to add new capabilities
|
|
81
86
|
- **delegate-to-agent** — Self-modification requests come through the agent chat
|
|
82
87
|
- **real-time-sync** — Database writes trigger change events to update the UI
|
|
88
|
+
- **internationalization** — UI copy, language catalogs, locale switching, and RTL-safe edits
|
|
@@ -51,8 +51,10 @@ import {
|
|
|
51
51
|
AgentToggleButton,
|
|
52
52
|
DevDatabaseLink,
|
|
53
53
|
FeedbackButton,
|
|
54
|
+
LanguagePicker,
|
|
54
55
|
NotificationsBell,
|
|
55
56
|
agentNativePath,
|
|
57
|
+
useT,
|
|
56
58
|
} from "@agent-native/core/client";
|
|
57
59
|
import { InvitationBanner, OrgSwitcher } from "@agent-native/core/client/org";
|
|
58
60
|
import { ExtensionsSidebarSection } from "@agent-native/core/client/extensions";
|
|
@@ -161,6 +163,7 @@ const collapsibleViews = [
|
|
|
161
163
|
export function AppLayout({ children }: AppLayoutProps) {
|
|
162
164
|
const location = useLocation();
|
|
163
165
|
const isMobile = useIsMobile();
|
|
166
|
+
const t = useT();
|
|
164
167
|
if (BARE_ROUTES.has(location.pathname)) {
|
|
165
168
|
return <>{children}</>;
|
|
166
169
|
}
|
|
@@ -175,11 +178,11 @@ export function AppLayout({ children }: AppLayoutProps) {
|
|
|
175
178
|
<AgentSidebar
|
|
176
179
|
position="right"
|
|
177
180
|
defaultOpen={!isMobile}
|
|
178
|
-
emptyStateText="
|
|
181
|
+
emptyStateText={t("agent.emptyState")}
|
|
179
182
|
suggestions={[
|
|
180
|
-
"
|
|
181
|
-
"
|
|
182
|
-
"
|
|
183
|
+
t("agent.suggestionSummarize"),
|
|
184
|
+
t("agent.suggestionReplies"),
|
|
185
|
+
t("agent.suggestionWidget"),
|
|
183
186
|
]}
|
|
184
187
|
>
|
|
185
188
|
{content}
|
|
@@ -1199,6 +1202,7 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
|
|
1199
1202
|
</Tooltip>
|
|
1200
1203
|
|
|
1201
1204
|
<NotificationsBell />
|
|
1205
|
+
<LanguagePicker variant="icon" />
|
|
1202
1206
|
|
|
1203
1207
|
{/* Compose — prominent outline button */}
|
|
1204
1208
|
<Tooltip>
|
|
@@ -1773,6 +1777,7 @@ function StandardLayout({ children }: AppLayoutProps) {
|
|
|
1773
1777
|
<div className="flex shrink-0 items-center gap-2">
|
|
1774
1778
|
{headerActions}
|
|
1775
1779
|
<NotificationsBell />
|
|
1780
|
+
<LanguagePicker variant="icon" />
|
|
1776
1781
|
<AgentToggleButton />
|
|
1777
1782
|
</div>
|
|
1778
1783
|
</header>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "اسألني أي شيء عن رسائلك",
|
|
4
|
+
suggestionSummarize: "لخص رسائلي غير المقروءة",
|
|
5
|
+
suggestionReplies: "ما الذي يحتاج إلى ردي اليوم؟",
|
|
6
|
+
suggestionWidget: "أنشئ لي ويدجت مخصصا لصندوق الوارد",
|
|
7
|
+
},
|
|
8
|
+
settings: {
|
|
9
|
+
openAgentSettings: "فتح إعدادات الوكيل",
|
|
10
|
+
agentDescription:
|
|
11
|
+
"افتح إعدادات الوكيل في الشريط الجانبي لإدارة النموذج ومفاتيح API والأتمتة والصوت وعناصر التحكم الأخرى.",
|
|
12
|
+
agentTitle: "إعدادات الوكيل",
|
|
13
|
+
title: "الإعدادات",
|
|
14
|
+
general: "عام",
|
|
15
|
+
generalDescription: "اللغة وتفضيلات مستوى الحساب في Mail.",
|
|
16
|
+
languageTitle: "اللغة",
|
|
17
|
+
languageDescription:
|
|
18
|
+
"اختر لغة الواجهة لهذا الحساب. يتذكر Mail اختيارك عبر الأجهزة.",
|
|
19
|
+
languageLabel: "لغة الواجهة",
|
|
20
|
+
whatsNew: "ما الجديد",
|
|
21
|
+
whatsNewDescription:
|
|
22
|
+
"التغييرات الأخيرة الموجهة للمستخدمين في Agent-Native Mail.",
|
|
23
|
+
drafting: "الكتابة",
|
|
24
|
+
automations: "الأتمتة",
|
|
25
|
+
gmailFilters: "فلاتر Gmail",
|
|
26
|
+
aliases: "الأسماء المستعارة",
|
|
27
|
+
tracking: "التتبع",
|
|
28
|
+
slack: "Slack",
|
|
29
|
+
team: "الفريق",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default messages;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "Frag mich alles zu deinen E-Mails",
|
|
4
|
+
suggestionSummarize: "Fasse meine ungelesenen E-Mails zusammen",
|
|
5
|
+
suggestionReplies: "Was braucht heute meine Antwort?",
|
|
6
|
+
suggestionWidget: "Baue ein eigenes Widget fur meinen Posteingang",
|
|
7
|
+
},
|
|
8
|
+
settings: {
|
|
9
|
+
openAgentSettings: "Agent-Einstellungen öffnen",
|
|
10
|
+
agentDescription:
|
|
11
|
+
"Öffne die Agent-Einstellungen in der Seitenleiste für Modell, API-Schlüssel, Automatisierungen, Sprache und weitere Steuerungen.",
|
|
12
|
+
agentTitle: "Agent-Einstellungen",
|
|
13
|
+
title: "Einstellungen",
|
|
14
|
+
general: "Allgemein",
|
|
15
|
+
generalDescription: "Sprache und kontoweite Einstellungen fur Mail.",
|
|
16
|
+
languageTitle: "Sprache",
|
|
17
|
+
languageDescription:
|
|
18
|
+
"Wahle die Sprache der Oberflache fur dieses Konto. Mail merkt sie sich gerateubergreifend.",
|
|
19
|
+
languageLabel: "Sprache der Oberflache",
|
|
20
|
+
whatsNew: "Neuigkeiten",
|
|
21
|
+
whatsNewDescription:
|
|
22
|
+
"Aktuelle nutzerseitige Anderungen in Agent-Native Mail.",
|
|
23
|
+
drafting: "Entwurfe",
|
|
24
|
+
automations: "Automatisierungen",
|
|
25
|
+
gmailFilters: "Gmail-Filter",
|
|
26
|
+
aliases: "Aliasse",
|
|
27
|
+
tracking: "Tracking",
|
|
28
|
+
slack: "Slack",
|
|
29
|
+
team: "Team",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default messages;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "Ask me anything about your emails",
|
|
4
|
+
suggestionSummarize: "Summarize my unread emails",
|
|
5
|
+
suggestionReplies: "What needs my reply today?",
|
|
6
|
+
suggestionWidget: "Build me a custom widget for my inbox",
|
|
7
|
+
},
|
|
8
|
+
settings: {
|
|
9
|
+
openAgentSettings: "Open agent settings",
|
|
10
|
+
agentDescription:
|
|
11
|
+
"Open the agent sidebar settings for model, API keys, automations, voice, and other agent controls.",
|
|
12
|
+
agentTitle: "Agent settings",
|
|
13
|
+
title: "Settings",
|
|
14
|
+
general: "General",
|
|
15
|
+
generalDescription: "Language and account-level preferences for Mail.",
|
|
16
|
+
languageTitle: "Language",
|
|
17
|
+
languageDescription:
|
|
18
|
+
"Choose the interface language for this account. Mail remembers it across devices.",
|
|
19
|
+
languageLabel: "Interface language",
|
|
20
|
+
whatsNew: "What's new",
|
|
21
|
+
whatsNewDescription: "Recent user-facing changes to Agent-Native Mail.",
|
|
22
|
+
drafting: "Drafting",
|
|
23
|
+
automations: "Automations",
|
|
24
|
+
gmailFilters: "Gmail Filters",
|
|
25
|
+
aliases: "Aliases",
|
|
26
|
+
tracking: "Tracking",
|
|
27
|
+
slack: "Slack",
|
|
28
|
+
team: "Team",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default messages;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "Preguntame cualquier cosa sobre tus correos",
|
|
4
|
+
suggestionSummarize: "Resume mis correos no leidos",
|
|
5
|
+
suggestionReplies: "Que necesita mi respuesta hoy?",
|
|
6
|
+
suggestionWidget: "Crea un widget personalizado para mi bandeja",
|
|
7
|
+
},
|
|
8
|
+
settings: {
|
|
9
|
+
openAgentSettings: "Abrir ajustes del agente",
|
|
10
|
+
agentDescription:
|
|
11
|
+
"Abre los ajustes del agente en la barra lateral para modelos, claves API, automatizaciones, voz y otros controles.",
|
|
12
|
+
agentTitle: "Ajustes del agente",
|
|
13
|
+
title: "Configuracion",
|
|
14
|
+
general: "General",
|
|
15
|
+
generalDescription: "Idioma y preferencias de cuenta para Mail.",
|
|
16
|
+
languageTitle: "Idioma",
|
|
17
|
+
languageDescription:
|
|
18
|
+
"Elige el idioma de la interfaz para esta cuenta. Mail lo recuerda en todos tus dispositivos.",
|
|
19
|
+
languageLabel: "Idioma de la interfaz",
|
|
20
|
+
whatsNew: "Novedades",
|
|
21
|
+
whatsNewDescription:
|
|
22
|
+
"Cambios recientes para usuarios en Agent-Native Mail.",
|
|
23
|
+
drafting: "Redaccion",
|
|
24
|
+
automations: "Automatizaciones",
|
|
25
|
+
gmailFilters: "Filtros de Gmail",
|
|
26
|
+
aliases: "Alias",
|
|
27
|
+
tracking: "Seguimiento",
|
|
28
|
+
slack: "Slack",
|
|
29
|
+
team: "Equipo",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default messages;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "Posez-moi vos questions sur vos e-mails",
|
|
4
|
+
suggestionSummarize: "Resumer mes e-mails non lus",
|
|
5
|
+
suggestionReplies: "A quoi dois-je repondre aujourd'hui?",
|
|
6
|
+
suggestionWidget: "Creer un widget personnalise pour ma boite de reception",
|
|
7
|
+
},
|
|
8
|
+
settings: {
|
|
9
|
+
openAgentSettings: "Ouvrir les paramètres de l’agent",
|
|
10
|
+
agentDescription:
|
|
11
|
+
"Ouvrez les paramètres de l’agent dans la barre latérale pour les modèles, clés API, automatisations, voix et autres contrôles.",
|
|
12
|
+
agentTitle: "Paramètres de l’agent",
|
|
13
|
+
title: "Parametres",
|
|
14
|
+
general: "General",
|
|
15
|
+
generalDescription: "Langue et preferences de compte pour Mail.",
|
|
16
|
+
languageTitle: "Langue",
|
|
17
|
+
languageDescription:
|
|
18
|
+
"Choisissez la langue de l'interface pour ce compte. Mail la memorise sur tous les appareils.",
|
|
19
|
+
languageLabel: "Langue de l'interface",
|
|
20
|
+
whatsNew: "Nouveautes",
|
|
21
|
+
whatsNewDescription:
|
|
22
|
+
"Changements recents visibles par les utilisateurs dans Agent-Native Mail.",
|
|
23
|
+
drafting: "Redaction",
|
|
24
|
+
automations: "Automatisations",
|
|
25
|
+
gmailFilters: "Filtres Gmail",
|
|
26
|
+
aliases: "Alias",
|
|
27
|
+
tracking: "Suivi",
|
|
28
|
+
slack: "Slack",
|
|
29
|
+
team: "Equipe",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default messages;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "अपने emails के बारे में कुछ भी पूछें",
|
|
4
|
+
suggestionSummarize: "मेरे unread emails का सारांश दें",
|
|
5
|
+
suggestionReplies: "आज किन चीजों पर मेरा reply चाहिए?",
|
|
6
|
+
suggestionWidget: "मेरे inbox के लिए custom widget बनाएं",
|
|
7
|
+
},
|
|
8
|
+
settings: {
|
|
9
|
+
openAgentSettings: "एजेंट सेटिंग्स खोलें",
|
|
10
|
+
agentDescription:
|
|
11
|
+
"मॉडल, API कुंजियों, ऑटोमेशन, आवाज़ और अन्य एजेंट नियंत्रणों के लिए साइडबार सेटिंग्स खोलें।",
|
|
12
|
+
agentTitle: "एजेंट सेटिंग्स",
|
|
13
|
+
title: "सेटिंग्स",
|
|
14
|
+
general: "General",
|
|
15
|
+
generalDescription: "Mail की भाषा और account-level preferences.",
|
|
16
|
+
languageTitle: "भाषा",
|
|
17
|
+
languageDescription:
|
|
18
|
+
"इस account के लिए interface language चुनें। Mail इसे सभी devices पर याद रखता है।",
|
|
19
|
+
languageLabel: "Interface language",
|
|
20
|
+
whatsNew: "नया क्या है",
|
|
21
|
+
whatsNewDescription: "Agent-Native Mail में हाल के user-facing बदलाव।",
|
|
22
|
+
drafting: "Drafting",
|
|
23
|
+
automations: "Automations",
|
|
24
|
+
gmailFilters: "Gmail Filters",
|
|
25
|
+
aliases: "Aliases",
|
|
26
|
+
tracking: "Tracking",
|
|
27
|
+
slack: "Slack",
|
|
28
|
+
team: "टीम",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default messages;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import enUS from "./en-US";
|
|
2
|
+
import type { AgentNativeI18nCatalog } from "@agent-native/core/client";
|
|
3
|
+
|
|
4
|
+
export const i18nCatalog = {
|
|
5
|
+
sourceLocale: "en-US",
|
|
6
|
+
messages: enUS,
|
|
7
|
+
loadMessages: async (locale) => {
|
|
8
|
+
switch (locale) {
|
|
9
|
+
case "zh-CN":
|
|
10
|
+
return (await import("./zh-CN")).default;
|
|
11
|
+
case "es-ES":
|
|
12
|
+
return (await import("./es-ES")).default;
|
|
13
|
+
case "fr-FR":
|
|
14
|
+
return (await import("./fr-FR")).default;
|
|
15
|
+
case "de-DE":
|
|
16
|
+
return (await import("./de-DE")).default;
|
|
17
|
+
case "ja-JP":
|
|
18
|
+
return (await import("./ja-JP")).default;
|
|
19
|
+
case "ko-KR":
|
|
20
|
+
return (await import("./ko-KR")).default;
|
|
21
|
+
case "pt-BR":
|
|
22
|
+
return (await import("./pt-BR")).default;
|
|
23
|
+
case "hi-IN":
|
|
24
|
+
return (await import("./hi-IN")).default;
|
|
25
|
+
case "ar-SA":
|
|
26
|
+
return (await import("./ar-SA")).default;
|
|
27
|
+
default:
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
} satisfies AgentNativeI18nCatalog;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "メールについて何でも聞いてください",
|
|
4
|
+
suggestionSummarize: "未読メールを要約して",
|
|
5
|
+
suggestionReplies: "今日返信が必要なものは?",
|
|
6
|
+
suggestionWidget: "受信トレイ用のカスタムウィジェットを作成して",
|
|
7
|
+
},
|
|
8
|
+
settings: {
|
|
9
|
+
openAgentSettings: "エージェント設定を開く",
|
|
10
|
+
agentDescription:
|
|
11
|
+
"右サイドバーのエージェント設定を開き、モデル、API キー、自動化、音声などを管理します。",
|
|
12
|
+
agentTitle: "エージェント設定",
|
|
13
|
+
title: "設定",
|
|
14
|
+
general: "一般",
|
|
15
|
+
generalDescription: "Mail の言語とアカウント全体の設定です。",
|
|
16
|
+
languageTitle: "言語",
|
|
17
|
+
languageDescription:
|
|
18
|
+
"このアカウントの表示言語を選択します。Mail はデバイス間で設定を記憶します。",
|
|
19
|
+
languageLabel: "表示言語",
|
|
20
|
+
whatsNew: "新着情報",
|
|
21
|
+
whatsNewDescription: "Agent-Native Mail の最近のユーザー向け変更です。",
|
|
22
|
+
drafting: "下書き",
|
|
23
|
+
automations: "自動化",
|
|
24
|
+
gmailFilters: "Gmail フィルター",
|
|
25
|
+
aliases: "エイリアス",
|
|
26
|
+
tracking: "トラッキング",
|
|
27
|
+
slack: "Slack",
|
|
28
|
+
team: "チーム",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default messages;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "이메일에 대해 무엇이든 물어보세요",
|
|
4
|
+
suggestionSummarize: "읽지 않은 이메일 요약하기",
|
|
5
|
+
suggestionReplies: "오늘 답장해야 할 것은 무엇인가요?",
|
|
6
|
+
suggestionWidget: "내 받은편지함용 맞춤 위젯 만들기",
|
|
7
|
+
},
|
|
8
|
+
settings: {
|
|
9
|
+
openAgentSettings: "에이전트 설정 열기",
|
|
10
|
+
agentDescription:
|
|
11
|
+
"오른쪽 사이드바의 에이전트 설정을 열어 모델, API 키, 자동화, 음성 및 기타 제어를 관리합니다.",
|
|
12
|
+
agentTitle: "에이전트 설정",
|
|
13
|
+
title: "설정",
|
|
14
|
+
general: "일반",
|
|
15
|
+
generalDescription: "Mail의 언어 및 계정 수준 기본 설정입니다.",
|
|
16
|
+
languageTitle: "언어",
|
|
17
|
+
languageDescription:
|
|
18
|
+
"이 계정의 인터페이스 언어를 선택하세요. Mail은 기기 간에 이 설정을 기억합니다.",
|
|
19
|
+
languageLabel: "인터페이스 언어",
|
|
20
|
+
whatsNew: "새 소식",
|
|
21
|
+
whatsNewDescription:
|
|
22
|
+
"Agent-Native Mail의 최근 사용자 대상 변경 사항입니다.",
|
|
23
|
+
drafting: "작성",
|
|
24
|
+
automations: "자동화",
|
|
25
|
+
gmailFilters: "Gmail 필터",
|
|
26
|
+
aliases: "별칭",
|
|
27
|
+
tracking: "추적",
|
|
28
|
+
slack: "Slack",
|
|
29
|
+
team: "팀",
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default messages;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
agent: {
|
|
3
|
+
emptyState: "Pergunte qualquer coisa sobre seus emails",
|
|
4
|
+
suggestionSummarize: "Resuma meus emails nao lidos",
|
|
5
|
+
suggestionReplies: "O que precisa da minha resposta hoje?",
|
|
6
|
+
suggestionWidget:
|
|
7
|
+
"Crie um widget personalizado para minha caixa de entrada",
|
|
8
|
+
},
|
|
9
|
+
settings: {
|
|
10
|
+
openAgentSettings: "Abrir configurações do agente",
|
|
11
|
+
agentDescription:
|
|
12
|
+
"Abra as configurações do agente na barra lateral para modelos, chaves de API, automações, voz e outros controles.",
|
|
13
|
+
agentTitle: "Configurações do agente",
|
|
14
|
+
title: "Configuracoes",
|
|
15
|
+
general: "Geral",
|
|
16
|
+
generalDescription: "Idioma e preferencias de nivel de conta para Mail.",
|
|
17
|
+
languageTitle: "Idioma",
|
|
18
|
+
languageDescription:
|
|
19
|
+
"Escolha o idioma da interface para esta conta. O Mail lembra em todos os dispositivos.",
|
|
20
|
+
languageLabel: "Idioma da interface",
|
|
21
|
+
whatsNew: "Novidades",
|
|
22
|
+
whatsNewDescription:
|
|
23
|
+
"Mudancas recentes voltadas a usuarios no Agent-Native Mail.",
|
|
24
|
+
drafting: "Rascunhos",
|
|
25
|
+
automations: "Automacoes",
|
|
26
|
+
gmailFilters: "Filtros do Gmail",
|
|
27
|
+
aliases: "Aliases",
|
|
28
|
+
tracking: "Rastreamento",
|
|
29
|
+
slack: "Slack",
|
|
30
|
+
team: "Equipe",
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
export default messages;
|