From aaa208cef451eb58ef26003e3ed2dda8f6972107 Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Tue, 5 Sep 2023 18:15:59 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Add=20pt=5FBR=20and=20more=20tra?= =?UTF-8?q?nslations=20(#767)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original PR: https://github.com/baptisteArno/typebot.io/pull/694 --------- Co-authored-by: Daniel Oliveira Co-authored-by: Daniel Oliveira --- apps/builder/next.config.mjs | 2 +- .../components/UserPreferencesForm.tsx | 9 +- .../components/CurrentSubscriptionSummary.tsx | 3 +- .../billing/components/UsageProgressBars.tsx | 4 +- .../audio/components/AudioBubbleForm.tsx | 14 +- .../audio/components/AudioBubbleNode.tsx | 9 +- .../embed/components/EmbedBubbleContent.tsx | 13 +- .../embed/components/EmbedUploadContent.tsx | 8 +- .../image/components/ImageBubbleContent.tsx | 10 +- .../image/components/ImageBubbleSettings.tsx | 8 +- .../components/TextBubbleEditor.tsx | 8 +- .../video/components/VideoBubbleContent.tsx | 10 +- .../video/components/VideoUploadContent.tsx | 6 +- .../features/editor/components/BlockCard.tsx | 31 +- .../features/editor/components/BlockLabel.tsx | 71 ++-- .../editor/components/BlocksSideBar.tsx | 24 +- .../editor/components/EditableTypebotName.tsx | 4 +- .../editor/components/GettingStartedModal.tsx | 32 +- .../editor/components/TypebotHeader.tsx | 18 +- .../editor/providers/TypebotProvider.tsx | 18 +- .../editor/providers/typebotActions/groups.ts | 8 +- .../nodes/block/BlockNodeContent.tsx | 4 +- .../components/CreateNewTypebotButtons.tsx | 10 +- .../ImportTypebotFromFileButton.tsx | 4 +- .../templates/components/TemplatesModal.tsx | 16 +- apps/builder/src/locales/de.ts | 133 ++++++++ apps/builder/src/locales/en.ts | 127 +++++++ apps/builder/src/locales/fr.ts | 136 ++++++++ apps/builder/src/locales/index.ts | 13 +- apps/builder/src/locales/pt.ts | 237 ++++++++++--- apps/builder/src/locales/pt_BR.ts | 323 ++++++++++++++++++ apps/builder/src/pages/_app.tsx | 2 +- apps/docs/openapi/builder/_spec_.json | 21 ++ apps/docs/openapi/chat/_spec_.json | 6 + 34 files changed, 1153 insertions(+), 189 deletions(-) create mode 100644 apps/builder/src/locales/pt_BR.ts diff --git a/apps/builder/next.config.mjs b/apps/builder/next.config.mjs index 094f7a8f6..f842162b3 100644 --- a/apps/builder/next.config.mjs +++ b/apps/builder/next.config.mjs @@ -22,7 +22,7 @@ const nextConfig = { ], i18n: { defaultLocale: 'en', - locales: ['en', 'fr', 'pt', 'de'], + locales: ['en', 'fr', 'pt', 'pt_BR', 'de'], }, experimental: { outputFileTracingRoot: join(__dirname, '../../'), diff --git a/apps/builder/src/features/account/components/UserPreferencesForm.tsx b/apps/builder/src/features/account/components/UserPreferencesForm.tsx index b95e99f9a..12d3e833a 100644 --- a/apps/builder/src/features/account/components/UserPreferencesForm.tsx +++ b/apps/builder/src/features/account/components/UserPreferencesForm.tsx @@ -19,10 +19,11 @@ import { ChevronDownIcon } from '@/components/icons' import { MoreInfoTooltip } from '@/components/MoreInfoTooltip' const localeHumanReadable = { - en: 'English', - fr: 'Français', - de: 'Deutsch', - pt: 'Português', + en: 'English', + fr: 'Français', + de: 'Deutsch', + pt: 'Português', + pt_BR: 'Português (BR)' } as const export const UserPreferencesForm = () => { diff --git a/apps/builder/src/features/billing/components/CurrentSubscriptionSummary.tsx b/apps/builder/src/features/billing/components/CurrentSubscriptionSummary.tsx index d31bd474b..93c8caad7 100644 --- a/apps/builder/src/features/billing/components/CurrentSubscriptionSummary.tsx +++ b/apps/builder/src/features/billing/components/CurrentSubscriptionSummary.tsx @@ -30,7 +30,8 @@ export const CurrentSubscriptionSummary = ({ workspace }: Props) => { {data?.subscription?.cancelDate && ( - (Will be cancelled on {data.subscription.cancelDate.toDateString()}) + ({scopedT('cancelDate')}{' '} + {data.subscription.cancelDate.toDateString()}) )} diff --git a/apps/builder/src/features/billing/components/UsageProgressBars.tsx b/apps/builder/src/features/billing/components/UsageProgressBars.tsx index 06ba08367..30b5c9fdc 100644 --- a/apps/builder/src/features/billing/components/UsageProgressBars.tsx +++ b/apps/builder/src/features/billing/components/UsageProgressBars.tsx @@ -88,7 +88,7 @@ export const UsageProgressBars = ({ workspace }: Props) => { /{' '} {workspaceChatsLimit === -1 - ? 'Unlimited' + ? scopedT('unlimited') : parseNumberWithCommas(workspaceChatsLimit)} @@ -141,7 +141,7 @@ export const UsageProgressBars = ({ workspace }: Props) => { /{' '} {workspaceStorageLimit === -1 - ? 'Unlimited' + ? scopedT('unlimited') : `${workspaceStorageLimit} GB`} diff --git a/apps/builder/src/features/blocks/bubbles/audio/components/AudioBubbleForm.tsx b/apps/builder/src/features/blocks/bubbles/audio/components/AudioBubbleForm.tsx index cc8471862..403251134 100644 --- a/apps/builder/src/features/blocks/bubbles/audio/components/AudioBubbleForm.tsx +++ b/apps/builder/src/features/blocks/bubbles/audio/components/AudioBubbleForm.tsx @@ -4,6 +4,7 @@ import { TextInput } from '@/components/inputs' import { useState } from 'react' import { UploadButton } from '@/components/ImageUploadContent/UploadButton' import { SwitchWithLabel } from '@/components/inputs/SwitchWithLabel' +import { useScopedI18n } from '@/locales' type Props = { fileUploadPath: string @@ -16,6 +17,7 @@ export const AudioBubbleForm = ({ content, onContentChange, }: Props) => { + const scopedT = useScopedI18n('editor.blocks.bubbles.audio.settings') const [currentTab, setCurrentTab] = useState<'link' | 'upload'>('link') const updateUrl = (url: string) => onContentChange({ ...content, url }) @@ -31,14 +33,14 @@ export const AudioBubbleForm = ({ onClick={() => setCurrentTab('upload')} size="sm" > - Upload + {scopedT('upload.label')} @@ -51,25 +53,25 @@ export const AudioBubbleForm = ({ onFileUploaded={updateUrl} colorScheme="blue" > - Choose a file + {scopedT('chooseFile.label')} )} {currentTab === 'link' && ( <> - Works with .MP3s and .WAVs + {scopedT('worksWith.text')} )} diff --git a/apps/builder/src/features/blocks/bubbles/audio/components/AudioBubbleNode.tsx b/apps/builder/src/features/blocks/bubbles/audio/components/AudioBubbleNode.tsx index 9ad1f75a9..a9eff45e5 100644 --- a/apps/builder/src/features/blocks/bubbles/audio/components/AudioBubbleNode.tsx +++ b/apps/builder/src/features/blocks/bubbles/audio/components/AudioBubbleNode.tsx @@ -1,14 +1,17 @@ import { Text } from '@chakra-ui/react' import { AudioBubbleContent } from '@typebot.io/schemas' import { isDefined } from '@typebot.io/lib' +import { useScopedI18n } from '@/locales' type Props = { url: AudioBubbleContent['url'] } -export const AudioBubbleNode = ({ url }: Props) => - isDefined(url) ? ( +export const AudioBubbleNode = ({ url }: Props) => { + const scopedT = useScopedI18n('editor.blocks.bubbles.audio.node') + return isDefined(url) ? (