mirror of
https://github.com/10h30/astroplate.git
synced 2026-06-05 15:08:00 +09:00
working with the content folder
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
"title": "Astroplate",
|
||||
"base_url": "https://astroplate.netlify.app",
|
||||
"base_path": "/",
|
||||
"trailing_slash": true,
|
||||
"trailing_slash": false,
|
||||
"favicon": "/images/favicon.png",
|
||||
"logo": "/images/logo.png",
|
||||
"logo_darkmode": "/images/logo-darkmode.png",
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
{
|
||||
"languageName": "En",
|
||||
"languageCode": "en",
|
||||
"contentDir": "en",
|
||||
"contentDir": "english",
|
||||
"weight": 1
|
||||
},
|
||||
{
|
||||
"languageName": "Fr",
|
||||
"languageCode": "fr",
|
||||
"contentDir": "fr",
|
||||
"contentDir": "french",
|
||||
"weight": 2
|
||||
}
|
||||
]
|
||||
|
||||
@@ -15,9 +15,35 @@ export const getSinglePage = async <C extends CollectionKey>(
|
||||
const { default_language } = config.settings;
|
||||
const langCollection: keyof ContentEntryMap = lang as keyof ContentEntryMap;
|
||||
|
||||
const languages = [
|
||||
{
|
||||
languageName: "En",
|
||||
languageCode: "en",
|
||||
contentDir: "english",
|
||||
weight: 1,
|
||||
},
|
||||
{
|
||||
languageName: "Fr",
|
||||
languageCode: "fr",
|
||||
contentDir: "french",
|
||||
weight: 2,
|
||||
},
|
||||
];
|
||||
|
||||
const language = languages.find(
|
||||
(l) =>
|
||||
l.languageCode === langCollection || l.languageCode === default_language
|
||||
);
|
||||
|
||||
if (!language) {
|
||||
throw new Error("Language not found");
|
||||
}
|
||||
|
||||
const { contentDir } = language;
|
||||
|
||||
// Explicitly define the type of pages to CollectionEntry<C>[]
|
||||
const pages: CollectionEntry<C>[] = (await getCollection(
|
||||
langCollection || default_language,
|
||||
contentDir as any,
|
||||
({ id }: any) => {
|
||||
return id.startsWith(collectionName) && !id.endsWith("-index.md");
|
||||
}
|
||||
@@ -33,10 +59,35 @@ export const getListPage = async <C extends CollectionKey>(
|
||||
lang: keyof ContentEntryMap
|
||||
): Promise<CollectionEntry<C>[]> => {
|
||||
const { default_language } = config.settings;
|
||||
const langCollection: keyof ContentEntryMap = lang as keyof ContentEntryMap;
|
||||
|
||||
const languages = [
|
||||
{
|
||||
languageName: "En",
|
||||
languageCode: "en",
|
||||
contentDir: "english",
|
||||
weight: 1,
|
||||
},
|
||||
{
|
||||
languageName: "Fr",
|
||||
languageCode: "fr",
|
||||
contentDir: "french",
|
||||
weight: 2,
|
||||
},
|
||||
];
|
||||
|
||||
const language = languages.find(
|
||||
(l) => l.languageCode == lang || l.languageCode == default_language
|
||||
);
|
||||
|
||||
if (!language) {
|
||||
throw new Error("Language not found");
|
||||
}
|
||||
|
||||
const { contentDir } = language;
|
||||
|
||||
// Fetch the collection based on the language
|
||||
const pages: CollectionEntry<C>[] = (await getCollection(
|
||||
langCollection || default_language,
|
||||
contentDir as any,
|
||||
({ id }: any) => {
|
||||
return id.startsWith(collectionName);
|
||||
}
|
||||
|
||||
+10
-14
@@ -5,20 +5,17 @@ import fs from "fs";
|
||||
import path from "path";
|
||||
const { default_language } = config.settings;
|
||||
|
||||
const menusFolderPath = "./src/config";
|
||||
const locales: { [key: string]: any } = {};
|
||||
|
||||
const locales = fs
|
||||
.readdirSync(menusFolderPath)
|
||||
.filter((file) => /^menu\.[a-z]{2}\.json$/.test(file))
|
||||
.map((file) => {
|
||||
const filePath = path.join(menusFolderPath, file);
|
||||
const localeName = file.split(".")[1]; // Extract language code from file name
|
||||
const localeData = JSON.parse(fs.readFileSync(filePath, "utf8"));
|
||||
return { [localeName]: localeData };
|
||||
})
|
||||
.reduce((accumulator, locale) => {
|
||||
return { ...accumulator, ...locale };
|
||||
}, {});
|
||||
// Load menu and dictionary dynamically
|
||||
languagesJSON.forEach((language) => {
|
||||
const { languageCode } = language;
|
||||
import(`../../config/menu.${languageCode}.json`).then((menu) => {
|
||||
import(`../../i18n/${languageCode}.json`).then((dictionary) => {
|
||||
locales[languageCode] = { ...menu, ...dictionary };
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Extract all languages from the locales object
|
||||
const languages = Object.keys(locales);
|
||||
@@ -47,7 +44,6 @@ export const getTranslations = async (lang: string) => {
|
||||
export const supportedLang = [""].concat(
|
||||
languagesJSON.map((lang) => lang.languageCode),
|
||||
);
|
||||
|
||||
// Function to construct the URL based on trailing_slash value
|
||||
export const constructUrl = (
|
||||
url: string,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import languages from "@/config/language.json";
|
||||
|
||||
export interface ChildNavigationLink {
|
||||
name: string;
|
||||
@@ -19,7 +20,22 @@ interface Menu {
|
||||
}
|
||||
|
||||
export function loadMenu(lang: string): Menu {
|
||||
const menuPath: string = path.join(process.cwd(), 'src', 'config', `menu.${lang}.json`);
|
||||
const menuData: string = fs.readFileSync(menuPath, 'utf-8');
|
||||
// Find the language object based on the language code
|
||||
const language = languages.find((l) => l.languageCode === lang);
|
||||
|
||||
if (!language) {
|
||||
throw new Error(
|
||||
`Language '${lang}' not found in the list of supported languages.`,
|
||||
);
|
||||
}
|
||||
|
||||
// Load menu data based on the language code
|
||||
const menuPath: string = path.join(
|
||||
process.cwd(),
|
||||
"src",
|
||||
"config",
|
||||
`menu.${language.languageCode}.json`,
|
||||
);
|
||||
const menuData: string = fs.readFileSync(menuPath, "utf-8");
|
||||
return JSON.parse(menuData) as Menu;
|
||||
}
|
||||
|
||||
@@ -17,9 +17,11 @@ export function getStaticPaths() {
|
||||
const { lang } = Astro.params;
|
||||
const about: any = await getListPage(
|
||||
"about" as ContentCollectionKey,
|
||||
lang as keyof ContentEntryMap,
|
||||
lang as keyof ContentEntryMap
|
||||
);
|
||||
|
||||
console.log(about);
|
||||
|
||||
const { Content } = await about[0].render();
|
||||
const { title, description, meta_title, image } = about[0].data;
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user