diff --git a/create-pages/doc.js b/create-pages/doc.js index 220c75853..68f9d0094 100644 --- a/create-pages/doc.js +++ b/create-pages/doc.js @@ -8,6 +8,8 @@ const { genVersionChunks, } = require('./utils') +const languages = ['en', 'zh', 'ja'] + const createDocs = async ({ graphql, createPage, createRedirect }) => { const docTemplate = path.resolve(`${__dirname}/../src/templates/doc.js`) @@ -69,6 +71,35 @@ const createDocs = async ({ graphql, createPage, createRedirect }) => { } `) + const docsJa = await graphql(` + query { + allMdx( + filter: { + fields: { langCollection: { eq: "markdown-pages/contents/ja" } } + fileAbsolutePath: { regex: "/^(?!.*TOC).*$/" } + frontmatter: { draft: { ne: true } } + } + ) { + nodes { + id + fields { + langCollection + } + frontmatter { + aliases + } + parent { + ... on File { + relativeDirectory + relativePath + base + } + } + } + } + } + `) + // create pages for different language docs function _createDocs(docs, locale, pathPrefix = '') { const nodes = docs.data.allMdx.nodes @@ -83,12 +114,23 @@ const createDocs = async ({ graphql, createPage, createRedirect }) => { const _fullPath = `${replacePath(relativeDir, base)}` const fullPath = `${pathPrefix}${_fullPath}` node.path = fullPath - const filePathInDiffLang = path.resolve( - `${__dirname}/../markdown-pages/contents${ - locale === 'en' ? '/zh/' : '/en/' - }${relativePath}` - ) - node.langSwitchable = fs.existsSync(filePathInDiffLang) ? true : false + const switchableLangs = {} + + languages.forEach((lang) => { + if (locale != lang) { + const filePathInDiffLang = path.resolve( + `${__dirname}/../markdown-pages/contents/${lang}/${relativePath}` + ) + + iSSwitchable = fs.existsSync(filePathInDiffLang) ? true : false + + switchableLangs[lang] = iSSwitchable + } else { + switchableLangs[lang] = true + } + }) + + node.switchableLangs = switchableLangs const vChunks = genVersionChunks(_fullPath) node.version = vChunks[0] node.pathWithoutVersion = vChunks[1] @@ -115,7 +157,7 @@ const createDocs = async ({ graphql, createPage, createRedirect }) => { pathPrefix, tocPath, parent, - langSwitchable, + switchableLangs, } = node createPage({ path: path, @@ -131,7 +173,7 @@ const createDocs = async ({ graphql, createPage, createRedirect }) => { downloadURL, fullPath: path, versions: versionsMap[node.pathWithoutVersion], - langSwitchable, + switchableLangs, }, }) @@ -152,6 +194,7 @@ const createDocs = async ({ graphql, createPage, createRedirect }) => { _createDocs(docsEn, 'en') _createDocs(docsZh, 'zh', '/zh') + _createDocs(docsJa, 'ja', '/ja') } module.exports = createDocs diff --git a/create-pages/intl.js b/create-pages/intl.js index 9477b46de..d8df83f98 100644 --- a/create-pages/intl.js +++ b/create-pages/intl.js @@ -35,6 +35,17 @@ const createIntlPages = ({ page, actions }) => { }, }) ) + + if (pagePath === '/search/') { + createPage({ + ...page, + path: `/ja${pagePath}`, + context: { + ...page.context, + locale: 'ja', + }, + }) + } } module.exports = createIntlPages diff --git a/gatsby-config.js b/gatsby-config.js index 24cc5c1e7..8f1b5b624 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -40,6 +40,13 @@ module.exports = { path: `${__dirname}/markdown-pages/contents/zh`, }, }, + { + resolve: `gatsby-source-filesystem`, + options: { + name: `markdown-pages/contents/ja`, + path: `${__dirname}/markdown-pages/contents/ja`, + }, + }, { resolve: `gatsby-plugin-mdx`, options: { @@ -87,7 +94,7 @@ module.exports = { resolve: `gatsby-plugin-sitemap`, options: { output: `/sitemap.xml`, - exclude: ['/404', '/zh/404', '/search', '/zh/search'], + exclude: ['/404', '/zh/404', '/search', '/zh/search', '/jp/search'], }, }, { diff --git a/markdown-pages/cli.js b/markdown-pages/cli.js index 1aee15e90..e2d5d6942 100644 --- a/markdown-pages/cli.js +++ b/markdown-pages/cli.js @@ -179,7 +179,7 @@ function main(argv) { ref, path: path, }, - `${__dirname}/contents/${path}/docs-appdev/${ref}`, + `${__dirname}/contents/${path}/docs-appdev/master`, [ () => createReplaceImagePathStream(DEV_GUIDE_IMAGE_CDN_URL), () => createReplaceCopyableStream(), diff --git a/markdown-pages/contents/en/docs-appdev/master/.gitkeep b/markdown-pages/contents/en/docs-appdev/master/.gikeep similarity index 100% rename from markdown-pages/contents/en/docs-appdev/master/.gitkeep rename to markdown-pages/contents/en/docs-appdev/master/.gikeep diff --git a/markdown-pages/contents/ja/docs-appdev/master/.gitkeep b/markdown-pages/contents/ja/docs-appdev/master/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/package.json b/package.json index f9b1a0298..ef0b6654f 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ "download:docs-appdev:all": "./scripts/download-docs-appdev.sh", "download:docs-appdev:zh:all": "./scripts/download-docs-appdev-zh.sh", "download:docs-appdev:en:all": "./scripts/download-docs-appdev-en.sh", + "download:docs-appdev:ja:all": "./scripts/download-docs-appdev-ja.sh", "sync": "node markdown-pages/cli.js sync" }, "lint-staged": { diff --git a/scripts/download-docs-appdev-ja.sh b/scripts/download-docs-appdev-ja.sh new file mode 100755 index 000000000..58f63a805 --- /dev/null +++ b/scripts/download-docs-appdev-ja.sh @@ -0,0 +1 @@ +yarn download:docs-appdev ja add-tdds-documents diff --git a/scripts/download-docs-appdev.sh b/scripts/download-docs-appdev.sh index 1e33f49e1..44675e7cd 100755 --- a/scripts/download-docs-appdev.sh +++ b/scripts/download-docs-appdev.sh @@ -1,2 +1,3 @@ -yarn download:docs-appdev zh -yarn download:docs-appdev en +yarn download:docs-appdev zh add-tdds-documents +yarn download:docs-appdev en add-tdds-documents +yarn download:docs-appdev ja add-tdds-documents diff --git a/src/components/footer.js b/src/components/footer.js index 0485aad89..c5564d0df 100644 --- a/src/components/footer.js +++ b/src/components/footer.js @@ -12,7 +12,7 @@ import { FormattedMessage } from 'react-intl' const Footer = React.memo((prop) => { const locale = prop.locale - const langSwitchable = prop.langSwitchable + const switchableLangs = prop.switchableLangs const location = useLocation() const currentPathname = location.pathname const footerColumns = locale === 'zh' ? footerColumnsZh : footerColumnsEn @@ -55,22 +55,13 @@ const Footer = React.memo((prop) => { const switchToLang = (lang) => { let currentPathnameArr = currentPathname.split('/') - let preLang - switch (lang) { - case 'zh': - preLang = '/zh' - break - - case 'en': - preLang = '' - currentPathnameArr.splice(1, 1) - break - - default: - break + + const preLang = lang === 'en' ? '' : lang + if (locale !== 'en') { + currentPathnameArr.splice(1, 1) } - return langSwitchable + return switchableLangs[lang] ? preLang + currentPathnameArr.join('/') : docInfo.type === 'tidbcloud' ? preLang + '/tidb/stable/' @@ -95,7 +86,7 @@ const Footer = React.memo((prop) => { className="dropdown-item" > English - {!langSwitchable && locale === 'zh' && ( + {locale !== 'en' && !switchableLangs['en'] && ( @@ -106,7 +97,7 @@ const Footer = React.memo((prop) => { className="dropdown-item" > 简体中文 - {!langSwitchable && locale === 'en' && ( + {locale !== 'zh' && !switchableLangs['zh'] && ( { )} + {docInfo.type === 'appdev' && ( + + 日本語 + {locale !== 'ja' && !switchableLangs['ja'] && ( + + + + )} + + )} diff --git a/src/components/layout.js b/src/components/layout.js index 89d938a3e..9c50c9c6d 100644 --- a/src/components/layout.js +++ b/src/components/layout.js @@ -15,7 +15,7 @@ const Layout = ({ locale, children, forbidResetDocInfo = false, - langSwitchable, + switchableLangs = { en: true, zh: true }, }) => { const dispatch = useDispatch() @@ -49,7 +49,7 @@ const Layout = ({
{children}
-