diff --git a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts index f465459d9c..cfa1b0c9b5 100644 --- a/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts +++ b/packages/docusaurus-plugin-content-blog/src/__tests__/index.test.ts @@ -12,7 +12,7 @@ import { posixPath, getFileCommitDate, LAST_UPDATE_FALLBACK, - getCurrentLocaleConfig, + getLocaleConfig, } from '@docusaurus/utils'; import {DEFAULT_FUTURE_CONFIG} from '@docusaurus/core/src/server/configValidation'; import pluginContentBlog from '../index'; @@ -108,7 +108,7 @@ const getPlugin = async ( const localizationDir = path.join( siteDir, i18n.path, - getCurrentLocaleConfig(i18n).path, + getLocaleConfig(i18n).path, ); const siteConfig = { title: 'Hello', diff --git a/packages/docusaurus-plugin-content-blog/src/index.ts b/packages/docusaurus-plugin-content-blog/src/index.ts index def2c1331c..e19969ab22 100644 --- a/packages/docusaurus-plugin-content-blog/src/index.ts +++ b/packages/docusaurus-plugin-content-blog/src/index.ts @@ -19,7 +19,7 @@ import { getDataFilePath, DEFAULT_PLUGIN_ID, resolveMarkdownLinkPathname, - getCurrentLocaleConfig, + getLocaleConfig, } from '@docusaurus/utils'; import {getTagsFilePathsToWatch} from '@docusaurus/utils-validation'; import {createMDXLoaderItem} from '@docusaurus/mdx-loader'; @@ -74,7 +74,7 @@ export default async function pluginContentBlog( const {baseUrl} = siteConfig; - const shouldTranslate = getCurrentLocaleConfig(context.i18n).translate; + const shouldTranslate = getLocaleConfig(context.i18n).translate; const contentPaths: BlogContentPaths = { contentPath: path.resolve(siteDir, options.path), contentPathLocalized: shouldTranslate diff --git a/packages/docusaurus-plugin-content-docs/src/__tests__/cli.test.ts b/packages/docusaurus-plugin-content-docs/src/__tests__/cli.test.ts index c8c28dfca3..98d73c52ea 100644 Binary files a/packages/docusaurus-plugin-content-docs/src/__tests__/cli.test.ts and b/packages/docusaurus-plugin-content-docs/src/__tests__/cli.test.ts differ diff --git a/packages/docusaurus-plugin-content-docs/src/cli.ts b/packages/docusaurus-plugin-content-docs/src/cli.ts index 3d267da223..d19d3f5fbd 100644 --- a/packages/docusaurus-plugin-content-docs/src/cli.ts +++ b/packages/docusaurus-plugin-content-docs/src/cli.ts @@ -8,7 +8,7 @@ import fs from 'fs-extra'; import path from 'path'; import logger from '@docusaurus/logger'; -import {DEFAULT_PLUGIN_ID, getCurrentLocaleConfig} from '@docusaurus/utils'; +import {DEFAULT_PLUGIN_ID, getLocaleConfig} from '@docusaurus/utils'; import { getVersionsFilePath, getVersionDocsDirPath, @@ -89,7 +89,7 @@ async function cliDocsVersionCommand( const localizationDir = path.resolve( siteDir, i18n.path, - getCurrentLocaleConfig(i18n).path, + getLocaleConfig(i18n, locale).path, ); // Copy docs files. const docsDir = diff --git a/packages/docusaurus-plugin-content-docs/src/versions/files.ts b/packages/docusaurus-plugin-content-docs/src/versions/files.ts index 71c8b885db..d7b8115432 100644 --- a/packages/docusaurus-plugin-content-docs/src/versions/files.ts +++ b/packages/docusaurus-plugin-content-docs/src/versions/files.ts @@ -9,8 +9,8 @@ import path from 'path'; import fs from 'fs-extra'; import { getPluginI18nPath, + getLocaleConfig, DEFAULT_PLUGIN_ID, - getCurrentLocaleConfig, } from '@docusaurus/utils'; import { VERSIONS_JSON_FILE, @@ -191,7 +191,7 @@ export async function getVersionMetadataPaths({ > { const isCurrent = versionName === CURRENT_VERSION_NAME; - const shouldTranslate = getCurrentLocaleConfig(context.i18n).translate; + const shouldTranslate = getLocaleConfig(context.i18n).translate; const contentPathLocalized = shouldTranslate ? getDocsDirPathLocalized({ localizationDir: context.localizationDir, diff --git a/packages/docusaurus-plugin-content-pages/src/content.ts b/packages/docusaurus-plugin-content-pages/src/content.ts index 625bc18eca..65f1d9b420 100644 --- a/packages/docusaurus-plugin-content-pages/src/content.ts +++ b/packages/docusaurus-plugin-content-pages/src/content.ts @@ -22,8 +22,8 @@ import { posixPath, getPluginI18nPath, getContentPathList, + getLocaleConfig, type ContentPaths, - getCurrentLocaleConfig, } from '@docusaurus/utils'; import {validatePageFrontMatter} from './frontMatter'; import type {LoadContext} from '@docusaurus/types'; @@ -42,7 +42,7 @@ export function createPagesContentPaths({ }): ContentPaths { const {siteDir, localizationDir} = context; - const shouldTranslate = getCurrentLocaleConfig(context.i18n).translate; + const shouldTranslate = getLocaleConfig(context.i18n).translate; return { contentPath: path.resolve(siteDir, options.path), contentPathLocalized: shouldTranslate diff --git a/packages/docusaurus-utils/src/__tests__/i18nUtils.test.ts b/packages/docusaurus-utils/src/__tests__/i18nUtils.test.ts index 3ebeeaa03d..527aa21379 100644 --- a/packages/docusaurus-utils/src/__tests__/i18nUtils.test.ts +++ b/packages/docusaurus-utils/src/__tests__/i18nUtils.test.ts @@ -11,7 +11,7 @@ import { updateTranslationFileMessages, getPluginI18nPath, localizePath, - getCurrentLocaleConfig, + getLocaleConfig, } from '../i18nUtils'; import type {I18n, I18nLocaleConfig} from '@docusaurus/types'; @@ -182,7 +182,7 @@ describe('localizePath', () => { }); }); -describe('getCurrentLocaleConfig', () => { +describe('getLocaleConfig', () => { const localeConfigEn: I18nLocaleConfig = { path: 'path', direction: 'rtl', @@ -213,7 +213,7 @@ describe('getCurrentLocaleConfig', () => { it('returns single locale config', () => { expect( - getCurrentLocaleConfig( + getLocaleConfig( i18n({currentLocale: 'en', localeConfigs: {en: localeConfigEn}}), ), ).toEqual(localeConfigEn); @@ -221,7 +221,7 @@ describe('getCurrentLocaleConfig', () => { it('returns correct locale config among 2', () => { expect( - getCurrentLocaleConfig( + getLocaleConfig( i18n({ currentLocale: 'fr', localeConfigs: {en: localeConfigEn, fr: localeConfigFr}, @@ -230,9 +230,21 @@ describe('getCurrentLocaleConfig', () => { ).toEqual(localeConfigFr); }); + it('accepts locale to look for as param', () => { + expect( + getLocaleConfig( + i18n({ + currentLocale: 'fr', + localeConfigs: {en: localeConfigEn, fr: localeConfigFr}, + }), + 'en', + ), + ).toEqual(localeConfigEn); + }); + it('throws for locale config that does not exist', () => { expect(() => - getCurrentLocaleConfig( + getLocaleConfig( i18n({ currentLocale: 'fr', localeConfigs: {en: localeConfigEn}, diff --git a/packages/docusaurus-utils/src/i18nUtils.ts b/packages/docusaurus-utils/src/i18nUtils.ts index 0c0a788400..8e7080b962 100644 --- a/packages/docusaurus-utils/src/i18nUtils.ts +++ b/packages/docusaurus-utils/src/i18nUtils.ts @@ -118,11 +118,12 @@ export function localizePath({ // TODO we may extract this to a separate package // we want to use it on the frontend too // but "docusaurus-utils-common" (agnostic utils) is not an ideal place since -export function getCurrentLocaleConfig(i18n: I18n): I18nLocaleConfig { - const localeConfig = i18n.localeConfigs[i18n.currentLocale]; +export function getLocaleConfig(i18n: I18n, locale?: string): I18nLocaleConfig { + const localeToLookFor = locale ?? i18n.currentLocale; + const localeConfig = i18n.localeConfigs[localeToLookFor]; if (!localeConfig) { throw new Error( - `Can't find locale config for locale ${logger.code(i18n.currentLocale)}`, + `Can't find locale config for locale ${logger.code(localeToLookFor)}`, ); } return localeConfig; diff --git a/packages/docusaurus-utils/src/index.ts b/packages/docusaurus-utils/src/index.ts index df4afbed78..74b66ca3a9 100644 --- a/packages/docusaurus-utils/src/index.ts +++ b/packages/docusaurus-utils/src/index.ts @@ -34,7 +34,7 @@ export { updateTranslationFileMessages, getPluginI18nPath, localizePath, - getCurrentLocaleConfig, + getLocaleConfig, } from './i18nUtils'; export {mapAsyncSequential, findAsyncSequential} from './jsUtils'; export { diff --git a/packages/docusaurus/src/server/plugins/plugins.ts b/packages/docusaurus/src/server/plugins/plugins.ts index e8d4aeb7e5..b697878624 100644 --- a/packages/docusaurus/src/server/plugins/plugins.ts +++ b/packages/docusaurus/src/server/plugins/plugins.ts @@ -6,7 +6,7 @@ */ import {PerfLogger} from '@docusaurus/logger'; -import {getCurrentLocaleConfig} from '@docusaurus/utils'; +import {getLocaleConfig} from '@docusaurus/utils'; import {initPlugins} from './init'; import {createBootstrapPlugin, createMDXFallbackPlugin} from './synthetic'; import {localizePluginTranslationFile} from '../translations/translations'; @@ -82,7 +82,7 @@ async function executePluginContentLoading({ plugin.loadContent?.(), ); - const shouldTranslate = getCurrentLocaleConfig(context.i18n).translate; + const shouldTranslate = getLocaleConfig(context.i18n).translate; if (shouldTranslate) { content = await PerfLogger.async('translatePluginContent()', () => diff --git a/packages/docusaurus/src/server/site.ts b/packages/docusaurus/src/server/site.ts index a9b6787333..a38c9fda9c 100644 --- a/packages/docusaurus/src/server/site.ts +++ b/packages/docusaurus/src/server/site.ts @@ -10,7 +10,7 @@ import { localizePath, DEFAULT_BUILD_DIR_NAME, GENERATED_FILES_DIR_NAME, - getCurrentLocaleConfig, + getLocaleConfig, } from '@docusaurus/utils'; import {PerfLogger} from '@docusaurus/logger'; import combinePromises from 'combine-promises'; @@ -114,7 +114,7 @@ export async function loadContext( const localizationDir = path.resolve( siteDir, i18n.path, - getCurrentLocaleConfig(i18n).path, + getLocaleConfig(i18n).path, ); const siteConfig: DocusaurusConfig = {...initialSiteConfig, baseUrl}; diff --git a/packages/docusaurus/src/webpack/client.ts b/packages/docusaurus/src/webpack/client.ts index 5f5b5b66d7..660e7f8119 100644 --- a/packages/docusaurus/src/webpack/client.ts +++ b/packages/docusaurus/src/webpack/client.ts @@ -11,7 +11,7 @@ import {BundleAnalyzerPlugin} from 'webpack-bundle-analyzer'; import ReactLoadableSSRAddon from 'react-loadable-ssr-addon-v5-slorber'; import HtmlWebpackPlugin from 'html-webpack-plugin'; import {getProgressBarPlugin} from '@docusaurus/bundler'; -import {getCurrentLocaleConfig} from '@docusaurus/utils'; +import {getLocaleConfig} from '@docusaurus/utils'; import {createBaseConfig} from './base'; import ChunkAssetPlugin from './plugins/ChunkAssetPlugin'; import ForceTerminatePlugin from './plugins/ForceTerminatePlugin'; @@ -118,7 +118,7 @@ export async function createStartClientConfig({ headTags, preBodyTags, postBodyTags, - lang: getCurrentLocaleConfig(props.i18n).htmlLang, + lang: getLocaleConfig(props.i18n).htmlLang, }), ], },