├── public ├── _redirects ├── robots.txt ├── assets │ ├── favicons │ │ ├── favicon.ico │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── mstile-150x150.png │ │ ├── apple-touch-icon.png │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-384x384.png │ │ ├── browserconfig.xml │ │ └── site.webmanifest │ ├── images │ │ ├── cabinets2.jpg │ │ ├── cabinets-m.jpg │ │ ├── cabinets2-m.jpg │ │ ├── cabinets2-m.webp │ │ ├── construction.jpg │ │ ├── docs │ │ │ └── image.png │ │ ├── logo-small.png │ │ ├── skyscraper.jpg │ │ ├── construction-m.jpg │ │ ├── construction-m.webp │ │ └── portfolio │ │ │ ├── port1-m.jpg │ │ │ ├── port1.jpg │ │ │ ├── port2-m.jpg │ │ │ ├── port2.jpg │ │ │ ├── port3-m.jpg │ │ │ ├── port3.jpg │ │ │ ├── port4-m.jpg │ │ │ ├── port4.jpg │ │ │ ├── port5-m.jpg │ │ │ ├── port5.jpg │ │ │ ├── port6-m.jpg │ │ │ ├── port6.jpg │ │ │ ├── port7-m.jpg │ │ │ ├── port7.jpg │ │ │ ├── port8-m.jpg │ │ │ ├── port8.jpg │ │ │ ├── port9-m.jpg │ │ │ └── port9.jpg │ ├── fonts │ │ ├── roboto-v29-latin-700.woff │ │ ├── roboto-v29-latin-700.woff2 │ │ ├── roboto-v29-latin-900.woff │ │ ├── roboto-v29-latin-900.woff2 │ │ ├── roboto-v29-latin-regular.woff │ │ └── roboto-v29-latin-regular.woff2 │ └── svgs │ │ ├── service2.svg │ │ ├── moon.svg │ │ ├── service1.svg │ │ ├── check.svg │ │ ├── profile-woman.svg │ │ ├── profile.svg │ │ ├── service3.svg │ │ ├── sun.svg │ │ ├── stars.svg │ │ ├── sun-icon.svg │ │ ├── content-circles.svg │ │ ├── logo-white.svg │ │ └── logo-black.svg └── favicon.svg ├── postcss.config.cjs ├── .vscode ├── extensions.json └── launch.json ├── src ├── assets │ ├── images │ │ ├── hero.jpg │ │ ├── hero-m.jpg │ │ ├── landing.jpg │ │ ├── CTA │ │ │ ├── cabinets2.jpg │ │ │ └── construction-m.jpg │ │ └── blog │ │ │ └── blog-cover.jpg │ └── js │ │ └── nav.js ├── utils │ ├── global.d.ts │ └── utils.ts ├── icons │ ├── mdi--caret.svg │ ├── mdi--laptop.svg │ ├── mdi--sun.svg │ ├── mdi--language.svg │ └── mdi--moon.svg ├── env.d.ts ├── locales │ ├── en │ │ ├── blog.json │ │ ├── contact.json │ │ ├── common.json │ │ └── home.json │ └── fr │ │ ├── blog.json │ │ ├── contact.json │ │ ├── common.json │ │ └── home.json ├── data │ ├── client.json │ └── navData.js ├── content.config.ts ├── components │ ├── TemplateComponents │ │ ├── Settings.astro │ │ ├── LanguageSelect.astro │ │ ├── Pagination.astro │ │ ├── CSPicture.astro │ │ ├── ThemeProvider.astro │ │ ├── Select.astro │ │ ├── ThemeSelect.astro │ │ └── PaginationButton.astro │ ├── Landing.astro │ ├── CTA.astro │ ├── FeaturedPost.astro │ ├── BlogFullArticle.astro │ ├── BlogPreview.astro │ └── Footer.astro ├── routes │ ├── 404.astro │ ├── blog │ │ ├── [slug].astro │ │ └── [...page].astro │ └── about.astro ├── content │ └── blog │ │ ├── en │ │ ├── first-post-in-english.md │ │ ├── fourth-post-in-english.md │ │ ├── third-post-in-english.md │ │ └── second-post-in-english.md │ │ └── fr │ │ ├── premier-article-en-francais.md │ │ ├── quatrieme-article-en-francais.md │ │ ├── troisieme-article-en-francais.md │ │ └── deuxieme-article-en-francais.md ├── styles │ ├── markdown.less │ └── root.less └── layouts │ └── BaseLayout.astro ├── .gitignore ├── package.json ├── tsconfig.json ├── .github └── renovate.json5 ├── astro.config.mjs └── LICENSE.md /public/_redirects: -------------------------------------------------------------------------------- 1 | /:lang/* /:lang/404/ 404 -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [require("autoprefixer")], 3 | }; 4 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | 4 | Sitemap: https:///sitemap-index.xml -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["astro-build.astro-vscode"], 3 | "unwantedRecommendations": [] 4 | } 5 | -------------------------------------------------------------------------------- /src/assets/images/hero.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/src/assets/images/hero.jpg -------------------------------------------------------------------------------- /src/assets/images/hero-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/src/assets/images/hero-m.jpg -------------------------------------------------------------------------------- /src/assets/images/landing.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/src/assets/images/landing.jpg -------------------------------------------------------------------------------- /src/utils/global.d.ts: -------------------------------------------------------------------------------- 1 | export declare global { 2 | var StarlightThemeProvider: { 3 | updatePickers(theme?: string): void; 4 | }; 5 | } -------------------------------------------------------------------------------- /public/assets/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/favicons/favicon.ico -------------------------------------------------------------------------------- /public/assets/images/cabinets2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/cabinets2.jpg -------------------------------------------------------------------------------- /public/assets/images/cabinets-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/cabinets-m.jpg -------------------------------------------------------------------------------- /public/assets/images/cabinets2-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/cabinets2-m.jpg -------------------------------------------------------------------------------- /public/assets/images/cabinets2-m.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/cabinets2-m.webp -------------------------------------------------------------------------------- /public/assets/images/construction.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/construction.jpg -------------------------------------------------------------------------------- /public/assets/images/docs/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/docs/image.png -------------------------------------------------------------------------------- /public/assets/images/logo-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/logo-small.png -------------------------------------------------------------------------------- /public/assets/images/skyscraper.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/skyscraper.jpg -------------------------------------------------------------------------------- /src/assets/images/CTA/cabinets2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/src/assets/images/CTA/cabinets2.jpg -------------------------------------------------------------------------------- /src/assets/images/blog/blog-cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/src/assets/images/blog/blog-cover.jpg -------------------------------------------------------------------------------- /public/assets/images/construction-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/construction-m.jpg -------------------------------------------------------------------------------- /public/assets/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /public/assets/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /public/assets/favicons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/favicons/mstile-150x150.png -------------------------------------------------------------------------------- /public/assets/images/construction-m.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/construction-m.webp -------------------------------------------------------------------------------- /public/assets/images/portfolio/port1-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port1-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port1.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port2-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port2-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port2.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port3-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port3-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port3.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port4-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port4-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port4.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port5-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port5-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port5.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port6-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port6-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port6.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port7-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port7-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port7.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port8-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port8-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port8.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port9-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port9-m.jpg -------------------------------------------------------------------------------- /public/assets/images/portfolio/port9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/images/portfolio/port9.jpg -------------------------------------------------------------------------------- /src/assets/images/CTA/construction-m.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/src/assets/images/CTA/construction-m.jpg -------------------------------------------------------------------------------- /public/assets/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /public/assets/fonts/roboto-v29-latin-700.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/fonts/roboto-v29-latin-700.woff -------------------------------------------------------------------------------- /public/assets/fonts/roboto-v29-latin-700.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/fonts/roboto-v29-latin-700.woff2 -------------------------------------------------------------------------------- /public/assets/fonts/roboto-v29-latin-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/fonts/roboto-v29-latin-900.woff -------------------------------------------------------------------------------- /public/assets/fonts/roboto-v29-latin-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/fonts/roboto-v29-latin-900.woff2 -------------------------------------------------------------------------------- /public/assets/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/assets/favicons/android-chrome-384x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/favicons/android-chrome-384x384.png -------------------------------------------------------------------------------- /public/assets/fonts/roboto-v29-latin-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/fonts/roboto-v29-latin-regular.woff -------------------------------------------------------------------------------- /public/assets/fonts/roboto-v29-latin-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CodeStitchOfficial/Advanced-Astro-i18n/HEAD/public/assets/fonts/roboto-v29-latin-regular.woff2 -------------------------------------------------------------------------------- /src/icons/mdi--caret.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | /// 4 | /// -------------------------------------------------------------------------------- /src/locales/en/blog.json: -------------------------------------------------------------------------------- 1 | { 2 | "landing": "Blog", 3 | "topper": "News And Articles", 4 | "title": "Hot off the press!", 5 | "featuredPosts": "Featured Posts", 6 | "noFeaturedPosts": "No Featured Posts", 7 | "readMore": "Read More" 8 | } -------------------------------------------------------------------------------- /src/icons/mdi--laptop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "command": "./node_modules/.bin/astro dev", 6 | "name": "Development server", 7 | "request": "launch", 8 | "type": "node-terminal" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /src/locales/fr/blog.json: -------------------------------------------------------------------------------- 1 | { 2 | "landing": "Blog", 3 | "topper": "Informations et articles", 4 | "title": "Nouvelles fraîchement sorties de la presse.", 5 | "featuredPosts": "La sélection", 6 | "noFeaturedPosts": "Pas d'articles disponibles", 7 | "readMore": "Lire l'article" 8 | } -------------------------------------------------------------------------------- /public/assets/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #da532c 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist/ 3 | # generated types 4 | .astro/ 5 | 6 | # dependencies 7 | node_modules/ 8 | 9 | # logs 10 | npm-debug.log* 11 | yarn-debug.log* 12 | yarn-error.log* 13 | pnpm-debug.log* 14 | 15 | 16 | # environment variables 17 | .env 18 | .env.production 19 | 20 | # macOS-specific files 21 | .DS_Store 22 | 23 | # jetbrains setting folder 24 | .idea/ 25 | -------------------------------------------------------------------------------- /src/icons/mdi--sun.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/icons/mdi--language.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/data/client.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Code Stitch Web Designs", 3 | "email": "help@codestitch.app", 4 | "phoneForTel": "555-779-4407", 5 | "phoneFormatted": "(555) 779-4407", 6 | "address": { 7 | "lineOne": "First Address Line", 8 | "lineTwo": "Second Address Line", 9 | "city": "Denver", 10 | "state": "CO", 11 | "zip": "80206", 12 | "mapLink": "https://goo.gl/maps/UAQn4vuGDiwv7DV39" 13 | }, 14 | "domain": "www.codestitch.app" 15 | } 16 | -------------------------------------------------------------------------------- /public/assets/svgs/service2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /public/assets/svgs/moon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /public/assets/favicons/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "", 3 | "short_name": "", 4 | "icons": [ 5 | { 6 | "src": "/assets/favicons/android-chrome-192x192.png", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "/assets/favicons/android-chrome-384x384.png", 12 | "sizes": "384x384", 13 | "type": "image/png" 14 | } 15 | ], 16 | "theme_color": "#ffffff", 17 | "background_color": "#ffffff", 18 | "display": "standalone" 19 | } 20 | -------------------------------------------------------------------------------- /src/locales/en/contact.json: -------------------------------------------------------------------------------- 1 | { 2 | "landing": "Contact", 3 | "topper": "Contact", 4 | "title": "Get in touch", 5 | "p-1": "Tell us Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ridiculus elementum ullamcorper ipsum porttitor aliquam. Id magna urna ultrices odio pulvinar. Sed ut.", 6 | "form": { 7 | "name": "Name", 8 | "email": "Email", 9 | "phone": "Phone", 10 | "how": "How did you find us?", 11 | "message": "Message", 12 | "message-placeholder": "I'd be interested in...", 13 | "address": "Address" 14 | }, 15 | "cta": "Submit message" 16 | } -------------------------------------------------------------------------------- /src/locales/fr/contact.json: -------------------------------------------------------------------------------- 1 | { 2 | "landing": "Contact", 3 | "topper": "Contact", 4 | "title": "Nous écrire", 5 | "p-1": "Dites-nous Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ridiculus elementum ullamcorper ipsum porttitor aliquam. Id magna urna ultrices odio pulvinar. Sed ut.", 6 | "form": { 7 | "name": "Nom", 8 | "email": "Email", 9 | "phone": "Téléphone", 10 | "how": "Comment nous avez-vous connu ?", 11 | "message": "Message", 12 | "message-placeholder": "Je serais intéressé par...", 13 | "address": "Adresse" 14 | }, 15 | "cta": "Envoyer votre message" 16 | } -------------------------------------------------------------------------------- /src/icons/mdi--moon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/data/navData.js: -------------------------------------------------------------------------------- 1 | const navData = [ 2 | { 3 | key: "home", 4 | url: "/", 5 | children: [] 6 | }, 7 | { 8 | key: "about", 9 | url: "/about", 10 | children: [] 11 | }, 12 | { 13 | key: "projects", 14 | children: [ 15 | { 16 | key: "project-1", 17 | url: "/projects/project-1/" 18 | }, 19 | { 20 | key: "project-2", 21 | url: "/projects/project-2/" 22 | } 23 | ] 24 | }, 25 | { 26 | key: "blog", 27 | url: "/blog", 28 | children: [] 29 | }, 30 | { 31 | key: "contact", 32 | url: "/contact", 33 | children: [] 34 | }, 35 | ] 36 | export default navData -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "advanced-astro-i18n", 3 | "type": "module", 4 | "version": "2.2.2", 5 | "scripts": { 6 | "dev": "astro dev", 7 | "start": "astro dev", 8 | "build": "astro build", 9 | "preview": "astro preview", 10 | "astro": "astro" 11 | }, 12 | "dependencies": { 13 | "@astrojs/sitemap": "^3.5.1", 14 | "@astrolicious/i18n": "^0.6.2", 15 | "astro": "5.13.11", 16 | "astro-icon": "^1.1.5", 17 | "autoprefixer": "^10.4.22", 18 | "i18next": "^23.16.8", 19 | "less": "^4.4.2" 20 | }, 21 | "overrides": { 22 | "@astrolicious/i18n": { 23 | "astro-integration-kit": "^0.18.0" 24 | }, 25 | "vite": { 26 | "esbuild": "^0.25.12" 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /public/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 10 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "astro/tsconfigs/strictest", 3 | "include": [".astro/types.d.ts", "**/*"], 4 | "exclude": ["dist"], 5 | "compilerOptions": { 6 | "strict": true, 7 | "strictNullChecks": true, // necessary for Astro content collections 8 | "checkJs": false, // set to true if you want strict checks on your .js files 9 | "baseUrl": ".", 10 | // creates aliases for imports 11 | "paths": { 12 | "@layouts/*":["src/layouts/*"], 13 | "@assets/*":["src/assets/*"], 14 | "@data/*": ["src/data/*"], 15 | "@styles/*": ["src/styles/*"], 16 | "@components/*": ["src/components/*"], 17 | "@utils/*": ["src/utils/*"], 18 | "@i18n/*": ["src/i18n/*"] 19 | }, 20 | "incremental": true, 21 | "skipLibCheck": true 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /.github/renovate.json5: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "config:recommended", 5 | "schedule:monthly", 6 | "group:allNonMajor", 7 | "group:monorepos", 8 | ":semanticPrefixFixDepsChoreOthers", 9 | ":automergePatch", 10 | ":disableDependencyDashboard" 11 | ], 12 | "labels": ["dependencies"], 13 | "rangeStrategy": "bump", 14 | "postUpdateOptions": [ 15 | "npmDedupe" 16 | ], 17 | "ignoreDeps": [ 18 | "@astrolicious/i18n", 19 | "astro-integration-kit" 20 | ], 21 | "packageRules": [ 22 | { 23 | "description": "Be extra cautious with Astro core updates due to deprecated i18n dependency", 24 | "matchPackageNames": ["astro"], 25 | "matchUpdateTypes": ["minor", "major"], 26 | "automerge": false 27 | } 28 | ] 29 | } 30 | -------------------------------------------------------------------------------- /src/utils/utils.ts: -------------------------------------------------------------------------------- 1 | export function formatDate(date: string | number | Date): string { 2 | return new Date(date).toLocaleDateString("en-US", { 3 | timeZone: "UTC", 4 | month: "short", 5 | day: "numeric", 6 | year: "numeric", 7 | }); 8 | } 9 | 10 | export function getCurrentYear(): number { 11 | return new Date().getFullYear(); 12 | } 13 | 14 | import { getImage } from "astro:assets"; 15 | 16 | export async function getOptimizedImage(image: ImageMetadata) { 17 | const optimizedImage = await getImage({ 18 | src: image, 19 | format: "webp", 20 | loading: "eager", 21 | }); 22 | 23 | return optimizedImage; 24 | } 25 | 26 | export function trimArrSlashes(arr: string[]) { 27 | return arr.map((str) => str.replace(/^\/+|\/+$/g, "")); 28 | } 29 | 30 | export function trimStringSlashes(arr: string) { 31 | return arr.replace(/^\/+|\/+$/g, ""); 32 | } 33 | -------------------------------------------------------------------------------- /public/assets/svgs/service1.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/content.config.ts: -------------------------------------------------------------------------------- 1 | // 1. Import utilities from `astro:content` 2 | import { z, defineCollection, reference } from "astro:content"; 3 | import { glob } from 'astro/loaders'; 4 | 5 | // 2. Define a `type` and `schema` for each collection 6 | const blogsCollection = defineCollection({ 7 | loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/blog" }), 8 | schema: ({ image }) => 9 | z.object({ 10 | title: z.string(), 11 | description: z.string(), 12 | author: z.string(), 13 | date: z.date(), 14 | tags: z.array(z.string()), 15 | image: image(), 16 | imageAlt: z.string(), 17 | defaultLocaleVersion: reference("blog").optional(), 18 | }), 19 | }); 20 | 21 | // 3. Export a single `collections` object to register your collection(s) 22 | // Note: You can use defineCollection() as many times as you want to create multiple schemas. 23 | // All collections must be exported from inside the single collections object. 24 | export const collections = { 25 | blog: blogsCollection, 26 | }; -------------------------------------------------------------------------------- /astro.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "astro/config"; 2 | import icon from "astro-icon"; 3 | import i18n from "@astrolicious/i18n"; 4 | import sitemap from "@astrojs/sitemap"; 5 | 6 | export default defineConfig({ 7 | site: "https://www.yourwebsite.com", // update me! 8 | integrations: [ 9 | icon(), 10 | i18n({ 11 | defaultLocale: "en", 12 | locales: ["fr", "en"], 13 | client: { 14 | data: true, 15 | paths: true, 16 | }, 17 | // used to localize the routes 18 | pages: { 19 | "/about": { 20 | fr: "/a-propos", 21 | } 22 | }, 23 | }), 24 | sitemap({ 25 | i18n: { 26 | defaultLocale: 'en', // All urls that don't contain `es` or `fr` after `"https://www.yourwebsite.com/"` will be treated as default locale, i.e. `en` 27 | locales: { 28 | // key/value pairs of all languages supported 29 | en: 'en-US', // The `defaultLocale` value must be present in `locales` keys 30 | fr: 'fr-FR', 31 | }, 32 | }, 33 | }), 34 | ], 35 | }); 36 | -------------------------------------------------------------------------------- /src/components/TemplateComponents/Settings.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import ThemeSelect from "./ThemeSelect.astro"; 3 | import LanguageSelect from "./LanguageSelect.astro"; 4 | --- 5 | 6 |
7 | 8 | 9 |
10 | 11 | 45 | -------------------------------------------------------------------------------- /public/assets/svgs/check.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /public/assets/svgs/profile-woman.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /public/assets/svgs/profile.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /public/assets/svgs/service3.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/locales/en/common.json: -------------------------------------------------------------------------------- 1 | { 2 | "home": "Home", 3 | "about": "About", 4 | "projects": "Projects", 5 | "project-1": "Project 1", 6 | "project-2": "Project 2", 7 | "blog": "Blog", 8 | "contact": "Contact", 9 | "theme-label": "Choisissez le thème", 10 | "language-label": "Choisissez la langue", 11 | "languageSelect": { 12 | "en": "English", 13 | "fr": "French" 14 | }, 15 | "themeSelect": { 16 | "accessibleLabel": "Select Theme", 17 | "light": "Light", 18 | "dark": "Dark", 19 | "auto": "Auto" 20 | }, 21 | "quote": "Get Free Quote", 22 | "estimate": "Get an estimate now", 23 | "ctaComponent": { 24 | "title": "Get it done", 25 | "subtitle": "With us today", 26 | "message": "Say something catchy, informative, and encouraging to click the button to go to the contact page. I like to add these to the bottom of all pages.", 27 | "cta": "Get an estimate now", 28 | "alt": "" 29 | }, 30 | "about-page": { 31 | "landing": "About", 32 | "topper": "About", 33 | "title": "About Company Title", 34 | "p-1": "Our company was created In consequat tincidunt turpis sit amet imperdiet. Praesent Class officelan nonatoureanor mauris laoreet, iaculis libero quis. Curabitur et tempus eri consequat tincidunt turpis sit amet imperdiet. Praesent nonatourean olei aptent taciti sociosqu ad litora torquent per.", 35 | "p-2": "We believe that In consequat tincidunt turpis sit amet imperdiet. Praesent Class officelan nonatoureanor mauris laoreet, iaculis libero quis. Curabitur et tempus eri consequat tincidunt turpis sit amet imperdiet. Praesent nonatourean olei aptent taciti sociosqu ad litora torquent per.", 36 | "p-3": "It's important In consequat tincidunt turpis sit amet imperdiet.", 37 | "rank": "CEO-Founder", 38 | "cta": "Our projects" 39 | }, 40 | "footer": { 41 | "information": "Information", 42 | "services": "Services", 43 | "contact": "Contact", 44 | "click": "Click to email", 45 | "p": "Extra content if you need it, if not you can delete this whole p tag. I usually do.", 46 | "credit": "Designed and Hand Coded by " 47 | }, 48 | "notFound": { 49 | "pageNotFound": "404 - The page you're looking for does not exist.", 50 | "linkText": "Back to homepage" 51 | }, 52 | "skipLink": "Click To Skip To Main Content", 53 | "pagination": { 54 | "previous": "Prev", 55 | "next": "Next" 56 | } 57 | } -------------------------------------------------------------------------------- /src/components/TemplateComponents/LanguageSelect.astro: -------------------------------------------------------------------------------- 1 | --- 2 | // Adapted from Starlight's LanguageSelect - https://github.com/withastro/starlight/blob/15747325112c9fe43b8dfa4e986b95cf8e66af49/packages/starlight/components/LanguageSelect.astro 3 | // MIT License 4 | // Copyright (c) 2023 [Astro contributors](https://github.com/withastro/starlight/graphs/contributors) 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | 12 | // The above copyright notice and this permission notice shall be included in all 13 | // copies or substantial portions of the Software. 14 | 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | // SOFTWARE. 22 | import Select from "./Select.astro"; 23 | import { getLocale, getSwitcherData, t } from "i18n:astro"; 24 | const locale = getLocale(); 25 | const data = getSwitcherData(); 26 | --- 27 | 28 | { 29 | ( 30 | 31 | 42 | { 43 | options.map(({ value, selected, label }) => ( 44 |