This commit is contained in:
2024-03-22 03:47:51 +05:30
parent 8bcf3d211e
commit 89819f6fe2
28440 changed files with 3211033 additions and 2 deletions

View File

@@ -0,0 +1,179 @@
"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.translateThemeConfig = exports.getTranslationFiles = void 0;
const tslib_1 = require("tslib");
const lodash_1 = tslib_1.__importDefault(require("lodash"));
const utils_1 = require("@docusaurus/utils");
function getNavbarTranslationFile(navbar) {
// TODO handle properly all the navbar item types here!
function flattenNavbarItems(items) {
const subItems = items.flatMap((item) => {
const allSubItems = [item.items ?? []].flat();
return flattenNavbarItems(allSubItems);
});
return [...items, ...subItems];
}
const allNavbarItems = flattenNavbarItems(navbar.items);
const navbarItemsTranslations = Object.fromEntries(allNavbarItems
.filter((navbarItem) => navbarItem.label)
.map((navbarItem) => [
`item.label.${navbarItem.label}`,
{
message: navbarItem.label,
description: `Navbar item with label ${navbarItem.label}`,
},
]));
const titleTranslations = navbar.title
? { title: { message: navbar.title, description: 'The title in the navbar' } }
: {};
const logoAlt = navbar.logo?.alt
? {
'logo.alt': {
message: navbar.logo.alt,
description: 'The alt text of navbar logo',
},
}
: {};
return (0, utils_1.mergeTranslations)([
titleTranslations,
logoAlt,
navbarItemsTranslations,
]);
}
function translateNavbar(navbar, navbarTranslations) {
if (!navbarTranslations) {
return navbar;
}
const logo = navbar.logo
? {
...navbar.logo,
alt: navbarTranslations[`logo.alt`]?.message ?? navbar.logo?.alt,
}
: undefined;
return {
...navbar,
title: navbarTranslations.title?.message ?? navbar.title,
logo,
// TODO handle properly all the navbar item types here!
items: navbar.items.map((item) => {
const subItems = item.items?.map((subItem) => ({
...subItem,
label: navbarTranslations[`item.label.${subItem.label}`]?.message ??
subItem.label,
}));
return {
...item,
label: navbarTranslations[`item.label.${item.label}`]?.message ?? item.label,
...(subItems ? { items: subItems } : undefined),
};
}),
};
}
function isMultiColumnFooterLinks(links) {
return links.length > 0 && 'title' in links[0];
}
function getFooterTranslationFile(footer) {
const footerLinkTitles = Object.fromEntries((isMultiColumnFooterLinks(footer.links)
? footer.links.filter((link) => link.title)
: []).map((link) => [
`link.title.${link.title}`,
{
message: link.title,
description: `The title of the footer links column with title=${link.title} in the footer`,
},
]));
const footerLinkLabels = Object.fromEntries((isMultiColumnFooterLinks(footer.links)
? footer.links.flatMap((link) => link.items).filter((link) => link.label)
: footer.links.filter((link) => link.label)).map((link) => [
`link.item.label.${link.label}`,
{
message: link.label,
description: `The label of footer link with label=${link.label} linking to ${link.to ?? link.href}`,
},
]));
const copyright = footer.copyright
? {
copyright: {
message: footer.copyright,
description: 'The footer copyright',
},
}
: {};
const logoAlt = footer.logo?.alt
? {
'logo.alt': {
message: footer.logo.alt,
description: 'The alt text of footer logo',
},
}
: {};
return (0, utils_1.mergeTranslations)([
footerLinkTitles,
footerLinkLabels,
copyright,
logoAlt,
]);
}
function translateFooter(footer, footerTranslations) {
if (!footerTranslations) {
return footer;
}
const links = isMultiColumnFooterLinks(footer.links)
? footer.links.map((link) => ({
...link,
title: footerTranslations[`link.title.${link.title}`]?.message ?? link.title,
items: link.items.map((linkItem) => ({
...linkItem,
label: footerTranslations[`link.item.label.${linkItem.label}`]?.message ??
linkItem.label,
})),
}))
: footer.links.map((link) => ({
...link,
label: footerTranslations[`link.item.label.${link.label}`]?.message ??
link.label,
}));
const copyright = footerTranslations.copyright?.message ?? footer.copyright;
const logo = footer.logo
? {
...footer.logo,
alt: footerTranslations[`logo.alt`]?.message ?? footer.logo?.alt,
}
: undefined;
return {
...footer,
links,
copyright,
logo,
};
}
function getTranslationFiles({ themeConfig, }) {
const translationFiles = [
{ path: 'navbar', content: getNavbarTranslationFile(themeConfig.navbar) },
themeConfig.footer
? {
path: 'footer',
content: getFooterTranslationFile(themeConfig.footer),
}
: undefined,
];
return translationFiles.filter(Boolean);
}
exports.getTranslationFiles = getTranslationFiles;
function translateThemeConfig({ themeConfig, translationFiles, }) {
const translationFilesMap = lodash_1.default.keyBy(translationFiles, (f) => f.path);
return {
...themeConfig,
navbar: translateNavbar(themeConfig.navbar, translationFilesMap.navbar?.content),
footer: themeConfig.footer
? translateFooter(themeConfig.footer, translationFilesMap.footer?.content)
: undefined,
};
}
exports.translateThemeConfig = translateThemeConfig;