From 50f19663d45e1d02f75e4579dfdad8ea0a2b01c6 Mon Sep 17 00:00:00 2001 From: himself65 Date: Mon, 2 Jan 2023 00:57:08 +0800 Subject: [PATCH 1/9] build: enhance debugging with blocksuite --- packages/app/next.config.js | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/app/next.config.js b/packages/app/next.config.js index 20f12e5770..6d7225864c 100644 --- a/packages/app/next.config.js +++ b/packages/app/next.config.js @@ -4,6 +4,11 @@ const { dependencies } = require('./package.json'); const path = require('node:path'); const printer = require('./scripts/printer').printer; +const enableDebugLocal = path.isAbsolute(process.env.LOCAL_BLOCK_SUITE ?? ''); +const EDITOR_VERSION = enableDebugLocal + ? 'local-version' + : dependencies['@blocksuite/editor']; + /** @type {import('next').NextConfig} */ const nextConfig = { productionBrowserSourceMaps: true, @@ -16,7 +21,7 @@ const nextConfig = { CI: process.env.CI || null, VERSION: getGitVersion(), COMMIT_HASH: getCommitHash(), - EDITOR_VERSION: dependencies['@blocksuite/editor'], + EDITOR_VERSION, }, webpack: config => { config.experiments = { ...config.experiments, topLevelAwait: true }; @@ -63,11 +68,25 @@ const baseDir = process.env.LOCAL_BLOCK_SUITE ?? '/'; const withDebugLocal = require('next-debug-local')( { '@blocksuite/editor': path.resolve(baseDir, 'packages', 'editor'), + '@blocksuite/blocks/models': path.resolve( + baseDir, + 'packages', + 'blocks', + 'src', + 'models' + ), + '@blocksuite/blocks/std': path.resolve( + baseDir, + 'packages', + 'blocks', + 'src', + 'std' + ), '@blocksuite/blocks': path.resolve(baseDir, 'packages', 'blocks'), '@blocksuite/store': path.resolve(baseDir, 'packages', 'store'), }, { - enable: path.isAbsolute(process.env.LOCAL_BLOCK_SUITE ?? ''), + enable: enableDebugLocal, } ); From 1bc2dcd6610eec24d60517c2ccadb0d2b86223ae Mon Sep 17 00:00:00 2001 From: JimmFly Date: Wed, 4 Jan 2023 16:57:21 +0800 Subject: [PATCH 2/9] feat: init i18n --- packages/app/src/libs/i18n/resources/en.json | 87 ++++++++++++++------ packages/app/src/pages/_app.tsx | 1 + 2 files changed, 63 insertions(+), 25 deletions(-) diff --git a/packages/app/src/libs/i18n/resources/en.json b/packages/app/src/libs/i18n/resources/en.json index c2716448f7..45822ea009 100644 --- a/packages/app/src/libs/i18n/resources/en.json +++ b/packages/app/src/libs/i18n/resources/en.json @@ -1,28 +1,65 @@ { - "Sync to Disk": "Sync to Disk", - "Share": "Share", - "WarningTips": { - "IsNotfsApiSupported": "Welcome to the AFFiNE demo. To begin saving changes you can SYNC DATA TO DISK with the latest version of Chromium based browser like Chrome/Edge", - "IsNotLocalWorkspace": "Welcome to the AFFiNE demo. To begin saving changes you can SYNC TO DISK.", - "DoNotStore": "AFFiNE is under active development and the current version is UNSTABLE. Please DO NOT store information or data" - }, - "Layout": "Layout", - "Comment": "Comment", - "Settings": "Settings", - "ComingSoon": "Layout Settings Coming Soon...", - "Duplicate Page": "Duplicate Page", - "Copy Page Link": "Copy Page Link", - "Language": "Language", - "Clear Workspace": "Clear Workspace", - "Export As Markdown": "Export As Markdown", - "Export As HTML": "Export As HTML", - "Export As PDF (Unsupported)": "Export As PDF (Unsupported)", - "Import Workspace": "Import Workspace", - "Export Workspace": "Export Workspace", - "Last edited by": "Last edited by {{name}}", - "Logout": "Logout", + "Quick search": "Quick search", + "All pages": "All pages", + "Favourites": "Favourites", + "No item": "No item", + "Import": "Import", + "Trash": "Trash", + "New Page": "New Page", + "New Keyword Page": "New '{{query}}' page", + "Find 0 result": "Find 0 result", + "Find results": "Find {{number}} results", + "Collapse sidebar": "Collapse sidebar", + "Expand sidebar": "Expand sidebar", + "Removed to Favourites": "Removed to Favourites", + "Remove to favourites": "Remove to favourites", + "Added to Favourites": "Added to Favourites", + "Add to favourites": "Add to favourites", + "Paper": "Paper", + "Edgeless": "Edgeless", + "Switch to": "Switch to", + "Convert to ": "Convert to ", + "Page": "Page", + "Export": "Export", + "Export to HTML": "Export to HTML", + "Export to Markdown": "Export to Markdown", "Delete": "Delete", - "Turn into": "Turn into", - "Add A Below Block": "Add A Below Block", - "Divide Here As A New Group": "Divide Here As A New Group" + "Title": "Title", + "Untitled": "Untitled", + "Created": "Created", + "Updated": "Updated", + "Open in new tab": "Open in new tab", + "Favourite": "Favourite", + "Favourited": "Favourited", + "Delete page?": "Delete page?", + "Delete permanently?": "Delete permanently?", + "will be moved to Trash": "{{title}} will be moved to Trash", + "Once deleted, you can't undo this action.": "Once deleted,you can't undo this action.", + "Moved to Trash": "Moved to Trash", + "Permanently deleted": "Permanently deleted", + "restored": "{{title}} restored", + "Cancel": "Cancel", + "Keyboard Shortcuts": "Keyboard Shortcuts", + "Contact Us": "Contact Us", + "Official Website": "Official Website", + "Get in touch!": "Get in touch!", + "AFFiNE Community": "AFFiNE Community", + "How is AFFiNE Alpha different?": "How is AFFiNE Alpha different?", + "Shortcuts": "Shortcuts", + "Undo": "Undo", + "Redo": "Redo", + "Bold": "Bold", + "Italic": "Italic", + "Underline": "Underline", + "Strikethrough": "Strikethrough", + "Inline code": "Inline code", + "Code block": "Code block", + "Link": "Link", + "Body text": "Body text", + "Heading": "Heading {{number}}", + "Increase indent": "Increase indent", + "Reduce indent": "Reduce indent", + "Markdown Syntax": "Markdown Syntax", + "Divider": "Divider", + "404 - Page Not Found": "404 - Page Not Found" } diff --git a/packages/app/src/pages/_app.tsx b/packages/app/src/pages/_app.tsx index bb56e9acef..c7cbd78d4b 100644 --- a/packages/app/src/pages/_app.tsx +++ b/packages/app/src/pages/_app.tsx @@ -18,6 +18,7 @@ import { useEffect } from 'react'; import { useAppState } from '@/providers/app-state-provider'; import { PageLoading } from '@/components/loading'; import Head from 'next/head'; +import '@/libs/i18n'; const ThemeProvider = dynamic(() => import('@/providers/themeProvider'), { ssr: false, From 0b61f4a2a04a83d3dd3616aaf87d649330ae51ba Mon Sep 17 00:00:00 2001 From: JimmFly Date: Wed, 4 Jan 2023 17:10:47 +0800 Subject: [PATCH 3/9] feat: add translation --- packages/app/src/components/404/index.tsx | 5 +-- .../src/components/contact-modal/index.tsx | 35 +++++++++--------- .../components/editor-mode-switch/index.tsx | 8 ++--- .../header-right-items/editor-option-menu.tsx | 30 +++++++++------- .../components/header/quick-search-button.tsx | 6 ++-- .../app/src/components/help-island/index.tsx | 7 ++-- packages/app/src/components/import/index.tsx | 4 ++- .../components/page-list/operation-cell.tsx | 36 ++++++++++--------- .../src/components/quick-search/footer.tsx | 7 ++-- .../src/components/quick-search/results.tsx | 10 ++++-- .../src/components/shortcuts-modal/index.tsx | 16 +++++---- .../components/workspace-slider-bar/index.tsx | 22 ++++++------ .../src/pages/workspace/[workspaceId]/all.tsx | 6 ++-- .../workspace/[workspaceId]/favorite.tsx | 7 ++-- .../pages/workspace/[workspaceId]/trash.tsx | 5 +-- packages/app/src/ui/confirm/Confirm.tsx | 4 ++- 16 files changed, 118 insertions(+), 90 deletions(-) diff --git a/packages/app/src/components/404/index.tsx b/packages/app/src/components/404/index.tsx index e2f828ad9f..7df644bbfe 100644 --- a/packages/app/src/components/404/index.tsx +++ b/packages/app/src/components/404/index.tsx @@ -1,9 +1,10 @@ import { NotFoundTitle, PageContainer } from './styles'; - +import { useTranslation } from 'react-i18next'; export const NotfoundPage = () => { + const { t } = useTranslation(); return ( - 404 - Page Not Found + {t('404 - Page Not Found')} ); }; diff --git a/packages/app/src/components/contact-modal/index.tsx b/packages/app/src/components/contact-modal/index.tsx index a182f3e047..50c1e1b530 100644 --- a/packages/app/src/components/contact-modal/index.tsx +++ b/packages/app/src/components/contact-modal/index.tsx @@ -23,7 +23,7 @@ import { StyledModalFooter, } from './style'; import bg from '@/components/contact-modal/bg.png'; - +import { useTranslation } from 'react-i18next'; const linkList = [ { icon: , @@ -51,20 +51,6 @@ const linkList = [ link: 'https://discord.gg/Arn7TqJBvG', }, ]; -const rightLinkList = [ - { - icon: , - title: 'Official Website ', - subTitle: 'AFFiNE.pro', - link: 'https://affine.pro', - }, - { - icon: , - title: 'AFFiNE Community', - subTitle: 'community.affine.pro', - link: 'https://community.affine.pro', - }, -]; type TransitionsModalProps = { open: boolean; @@ -72,6 +58,21 @@ type TransitionsModalProps = { }; export const ContactModal = ({ open, onClose }: TransitionsModalProps) => { + const { t } = useTranslation(); + const rightLinkList = [ + { + icon: , + title: t('Official Website'), + subTitle: 'AFFiNE.pro', + link: 'https://affine.pro', + }, + { + icon: , + title: t('AFFiNE Community'), + subTitle: 'community.affine.pro', + link: 'https://community.affine.pro', + }, + ]; return ( { })} - Get in touch! + {t('Get in touch!')} {linkList.map(({ icon, title, link }) => { return ( @@ -128,7 +129,7 @@ export const ContactModal = ({ open, onClose }: TransitionsModalProps) => { target="_blank" rel="noreferrer" > - How is AFFiNE Alpha different? + {t('How is AFFiNE Alpha different?')}

Copyright © 2022 Toeverything

diff --git a/packages/app/src/components/editor-mode-switch/index.tsx b/packages/app/src/components/editor-mode-switch/index.tsx index 8a219e4757..86a54d8606 100644 --- a/packages/app/src/components/editor-mode-switch/index.tsx +++ b/packages/app/src/components/editor-mode-switch/index.tsx @@ -15,7 +15,7 @@ import { useTheme } from '@/providers/themeProvider'; import { EdgelessIcon, PaperIcon } from './icons'; import useCurrentPageMeta from '@/hooks/use-current-page-meta'; import { usePageHelper } from '@/hooks/use-page-helper'; - +import { useTranslation } from 'react-i18next'; const PaperItem = ({ active }: { active?: boolean }) => { const { theme: { @@ -96,7 +96,7 @@ export const EditorModeSwitch = ({ setRadioItemStatus(modifyRadioItemStatus()); // eslint-disable-next-line react-hooks/exhaustive-deps }, [isHover, mode]); - + const { t } = useTranslation(); return ( } active={mode === 'page'} status={radioItemStatus.left} @@ -126,7 +126,7 @@ export const EditorModeSwitch = ({