Files
documentation/node_modules/@docusaurus/plugin-content-docs/lib/translations.js
2024-03-22 03:47:51 +05:30

169 lines
6.9 KiB
JavaScript

"use strict";
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.translateLoadedContent = exports.getLoadedContentTranslationFiles = void 0;
const tslib_1 = require("tslib");
const lodash_1 = tslib_1.__importDefault(require("lodash"));
const utils_1 = require("@docusaurus/utils");
const constants_1 = require("./constants");
const utils_2 = require("./sidebars/utils");
function getVersionFileName(versionName) {
if (versionName === constants_1.CURRENT_VERSION_NAME) {
return versionName;
}
// I don't like this "version-" prefix,
// but it's for consistency with site/versioned_docs
return `version-${versionName}`;
}
function getSidebarTranslationFileContent(sidebar, sidebarName) {
const categories = (0, utils_2.collectSidebarCategories)(sidebar);
const categoryContent = Object.fromEntries(categories.flatMap((category) => {
const entries = [];
entries.push([
`sidebar.${sidebarName}.category.${category.label}`,
{
message: category.label,
description: `The label for category ${category.label} in sidebar ${sidebarName}`,
},
]);
if (category.link?.type === 'generated-index') {
if (category.link.title) {
entries.push([
`sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`,
{
message: category.link.title,
description: `The generated-index page title for category ${category.label} in sidebar ${sidebarName}`,
},
]);
}
if (category.link.description) {
entries.push([
`sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`,
{
message: category.link.description,
description: `The generated-index page description for category ${category.label} in sidebar ${sidebarName}`,
},
]);
}
}
return entries;
}));
const links = (0, utils_2.collectSidebarLinks)(sidebar);
const linksContent = Object.fromEntries(links.map((link) => [
`sidebar.${sidebarName}.link.${link.label}`,
{
message: link.label,
description: `The label for link ${link.label} in sidebar ${sidebarName}, linking to ${link.href}`,
},
]));
const docs = (0, utils_2.collectSidebarDocItems)(sidebar)
.concat((0, utils_2.collectSidebarRefs)(sidebar))
.filter((item) => item.translatable);
const docLinksContent = Object.fromEntries(docs.map((doc) => [
`sidebar.${sidebarName}.doc.${doc.label}`,
{
message: doc.label,
description: `The label for the doc item ${doc.label} in sidebar ${sidebarName}, linking to the doc ${doc.id}`,
},
]));
return (0, utils_1.mergeTranslations)([categoryContent, linksContent, docLinksContent]);
}
function translateSidebar({ sidebar, sidebarName, sidebarsTranslations, }) {
function transformSidebarCategoryLink(category) {
if (!category.link) {
return undefined;
}
if (category.link.type === 'generated-index') {
const title = sidebarsTranslations[`sidebar.${sidebarName}.category.${category.label}.link.generated-index.title`]?.message ?? category.link.title;
const description = sidebarsTranslations[`sidebar.${sidebarName}.category.${category.label}.link.generated-index.description`]?.message ?? category.link.description;
return {
...category.link,
title,
description,
};
}
return category.link;
}
return (0, utils_2.transformSidebarItems)(sidebar, (item) => {
if (item.type === 'category') {
const link = transformSidebarCategoryLink(item);
return {
...item,
label: sidebarsTranslations[`sidebar.${sidebarName}.category.${item.label}`]
?.message ?? item.label,
...(link && { link }),
};
}
if (item.type === 'link') {
return {
...item,
label: sidebarsTranslations[`sidebar.${sidebarName}.link.${item.label}`]
?.message ?? item.label,
};
}
if ((item.type === 'doc' || item.type === 'ref') && item.translatable) {
return {
...item,
label: sidebarsTranslations[`sidebar.${sidebarName}.doc.${item.label}`]
?.message ?? item.label,
};
}
return item;
});
}
function getSidebarsTranslations(version) {
return (0, utils_1.mergeTranslations)(Object.entries(version.sidebars).map(([sidebarName, sidebar]) => getSidebarTranslationFileContent(sidebar, sidebarName)));
}
function translateSidebars(version, sidebarsTranslations) {
return lodash_1.default.mapValues(version.sidebars, (sidebar, sidebarName) => translateSidebar({
sidebar,
sidebarName,
sidebarsTranslations,
}));
}
function getVersionTranslationFiles(version) {
const versionTranslations = {
'version.label': {
message: version.label,
description: `The label for version ${version.versionName}`,
},
};
const sidebarsTranslations = getSidebarsTranslations(version);
return [
{
path: getVersionFileName(version.versionName),
content: (0, utils_1.mergeTranslations)([versionTranslations, sidebarsTranslations]),
},
];
}
function translateVersion(version, translationFiles) {
const versionTranslations = translationFiles[getVersionFileName(version.versionName)].content;
return {
...version,
label: versionTranslations['version.label']?.message ?? version.label,
sidebars: translateSidebars(version, versionTranslations),
};
}
function getVersionsTranslationFiles(versions) {
return versions.flatMap(getVersionTranslationFiles);
}
function translateVersions(versions, translationFiles) {
return versions.map((version) => translateVersion(version, translationFiles));
}
function getLoadedContentTranslationFiles(loadedContent) {
return getVersionsTranslationFiles(loadedContent.loadedVersions);
}
exports.getLoadedContentTranslationFiles = getLoadedContentTranslationFiles;
function translateLoadedContent(loadedContent, translationFiles) {
const translationFilesMap = lodash_1.default.keyBy(translationFiles, (f) => f.path);
return {
loadedVersions: translateVersions(loadedContent.loadedVersions, translationFilesMap),
};
}
exports.translateLoadedContent = translateLoadedContent;