modified the trailing_slash function

This commit is contained in:
Al Murad Uzzaman
2024-05-18 16:00:14 +06:00
parent f88e524bb0
commit 8c1ab27945
27 changed files with 108 additions and 600 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ import config from "./src/config/config.json";
export default defineConfig({
site: config.site.base_url ? config.site.base_url : "http://examplesite.com",
base: config.site.base_path ? config.site.base_path : "/",
trailingSlash: config.site.trailing_slash ? "always" : "ignore",
trailingSlash: config.site.trailing_slash ? "always" : "never",
i18n: {
locales: ["en", "fr", "ar"],
defaultLocale: "en",
+1 -1
View File
@@ -3,7 +3,7 @@
"title": "Astroplate",
"base_url": "https://astroplate.netlify.app",
"base_path": "/",
"trailing_slash": false,
"trailing_slash": true,
"favicon": "/images/favicon.png",
"logo": "/images/logo.png",
"logo_darkmode": "/images/logo-darkmode.png",
-6
View File
@@ -10,11 +10,5 @@
"languageCode": "fr",
"contentDir": "fr",
"weight": 2
},
{
"languageName": "Ar",
"languageCode": "ar",
"contentDir": "ar",
"weight": 3
}
]
+1 -1
View File
@@ -21,4 +21,4 @@
{ "name": "Elements", "url": "/elements" },
{ "name": "Privacy Policy", "url": "/privacy-policy" }
]
}
}
+1 -1
View File
@@ -21,4 +21,4 @@
{ "name": "Éléments", "url": "/elements" },
{ "name": "Politique de confidentialité", "url": "/privacy-policy" }
]
}
}
-9
View File
@@ -1,9 +0,0 @@
---
title: "مهلا، أنا جون دو!"
meta_title: "About"
description: "this is meta description"
image: "/images/avatar.png"
draft: false
---
الشركة نفسها هي شركة ناجحة جدا. إنهم لا يعرفون فوائد الجسد، أو إلا أنهم سيحصلون عليه في أوقات أخرى، كلها، أوقات العمل، فهو يكره من هذا الوقت ولكن. يهرب من الملذات المحسوسة ليفترض أنها لا شيء، كل شيء أو، والألم هو الخيار الأكبر، فإنه أيسر عليه، وما يتبعه يقدمون الألم ونحوه! لأن وسيلة الحقيقة المذكورة تطرد اللذة وتمنع الألم، فهي تقدم كما لو
-5
View File
@@ -1,5 +0,0 @@
---
title: "المؤلفون"
meta_title: ""
description: "this is meta description"
---
-20
View File
@@ -1,20 +0,0 @@
---
title: فلان الفلاني
email: johndoe@email.com
image: "/images/avatar.png"
description: this is meta description
social:
- name: github
icon: FaGithub
link: https://github.com
- name: twitter
icon: FaTwitter
link: https://twitter.com
- name: linkedin
icon: FaLinkedin
link: https://linkedin.com
---
lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr navigation et dolore magna aliqua.
-20
View File
@@ -1,20 +0,0 @@
---
title: سام ويلسون
email: samwilson@email.com
image: "/images/avatar.png"
description: this is meta description
social:
- name: github
icon: FaGithub
link: https://github.com
- name: twitter
icon: FaTwitter
link: https://twitter.com
- name: linkedin
icon: FaLinkedin
link: https://linkedin.com
---
lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr navigation et dolore magna aliqua.
-20
View File
@@ -1,20 +0,0 @@
---
title: وليام جاكوب
email: williamjacob@email.com
image: "/images/avatar.png"
description: this is meta description
social:
- name: github
icon: FaGithub
link: https://github.com
- name: twitter
icon: FaTwitter
link: https://twitter.com
- name: linkedin
icon: FaLinkedin
link: https://linkedin.com
---
lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostr navigation et dolore magna aliqua.
-5
View File
@@ -1,5 +0,0 @@
---
title: "منشورات المدونة"
meta_title: ""
description: "هذا هو الوصف الميتا"
---
-23
View File
@@ -1,23 +0,0 @@
---
title: "كيفية بناء تطبيق باستخدام التكنولوجيا الحديثة"
meta_title: ""
description: "هذا هو الوصف الميتا"
date: 2022-04-04T05:00:00Z
image: "/images/image-placeholder.png"
categories: ["Application", "Data"]
author: "John Doe"
tags: ["nextjs", "tailwind"]
draft: false
---
لا أحد يريد حتى متابعة المكياج من جرة الرعاية المسمومة. لقد كانت عطلة نهاية الأسبوع. أنا لاعب كرة قدم متكامل. للشرب، تأخذ البحيرة أكبر رواق. كل هدف من أهداف الحياة لا يرضي Euismod.
الشركة نفسها هي شركة ناجحة جدا. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو الخيار المناسب للحاضر للحصول على ألم مثل ألمه!
## التصميم الإبداعي
كمكياج من جرة السم لقد كانت عطلة نهاية الأسبوع. أنا لاعب كرة قدم متكامل. للشرب، البحيرة تأخذ أكبر شرفة. كل هدف من أهداف الحياة لا يرضي Euismod.
> يجب أن يكون العميل نفسه قادرًا على متابعة عملية الترطيب. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو اختيار مناسب للحاضر ليتألم مثل ألمه!
الشركة نفسها هي شركة ناجحة جدا. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو اختيار مناسب للحاضر ليتألم مثل ألمه!
-23
View File
@@ -1,23 +0,0 @@
---
title: "كيفية بناء تطبيق باستخدام التكنولوجيا الحديثة"
meta_title: ""
description: "هذا هو الوصف الميتا"
date: 2022-04-04T05:00:00Z
image: "/images/image-placeholder.png"
categories: ["Technology", "Data"]
author: "Sam Wilson"
tags: ["technology", "tailwind"]
draft: false
---
لا أحد يريد حتى متابعة المكياج من جرة الرعاية المسمومة. لقد كانت عطلة نهاية الأسبوع. أنا لاعب كرة قدم متكامل. للشرب، تأخذ البحيرة أكبر رواق. كل هدف من أهداف الحياة لا يرضي Euismod.
الشركة نفسها هي شركة ناجحة جدا. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو الخيار المناسب للحاضر للحصول على ألم مثل ألمه!
## التصميم الإبداعي
كمكياج من جرة السم لقد كانت عطلة نهاية الأسبوع. أنا لاعب كرة قدم متكامل. للشرب، البحيرة تأخذ أكبر شرفة. كل هدف من أهداف الحياة لا يرضي Euismod.
> يجب أن يكون العميل نفسه قادرًا على متابعة عملية الترطيب. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو اختيار مناسب للحاضر ليتألم مثل ألمه!
الشركة نفسها هي شركة ناجحة جدا. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو اختيار مناسب للحاضر ليتألم مثل ألمه!
-23
View File
@@ -1,23 +0,0 @@
---
title: "كيفية بناء تطبيق باستخدام التكنولوجيا الحديثة"
meta_title: ""
description: "هذا هو الوصف الميتا"
date: 2022-04-04T05:00:00Z
image: "/images/image-placeholder.png"
categories: ["Software"]
author: "John Doe"
tags: ["software", "tailwind"]
draft: false
---
لا أحد يريد حتى متابعة المكياج من جرة الرعاية المسمومة. لقد كانت عطلة نهاية الأسبوع. أنا لاعب كرة قدم متكامل. للشرب، تأخذ البحيرة أكبر رواق. كل هدف من أهداف الحياة لا يرضي Euismod.
الشركة نفسها هي شركة ناجحة جدا. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو الخيار المناسب للحاضر للحصول على ألم مثل ألمه!
## التصميم الإبداعي
كمكياج من جرة السم لقد كانت عطلة نهاية الأسبوع. أنا لاعب كرة قدم متكامل. للشرب، البحيرة تأخذ أكبر شرفة. كل هدف من أهداف الحياة لا يرضي Euismod.
> يجب أن يكون العميل نفسه قادرًا على متابعة عملية الترطيب. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو اختيار مناسب للحاضر ليتألم مثل ألمه!
الشركة نفسها هي شركة ناجحة جدا. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو اختيار مناسب للحاضر ليتألم مثل ألمه!
-23
View File
@@ -1,23 +0,0 @@
---
title: "كيفية بناء تطبيق باستخدام التكنولوجيا الحديثة"
meta_title: ""
description: "هذا هو الوصف الميتا"
date: 2022-04-04T05:00:00Z
image: "/images/image-placeholder.png"
categories: ["Architecture"]
author: "John Doe"
tags: ["silicon", "technology"]
draft: false
---
لا أحد يريد حتى متابعة المكياج من جرة الرعاية المسمومة. لقد كانت عطلة نهاية الأسبوع. أنا لاعب كرة قدم متكامل. للشرب، تأخذ البحيرة أكبر رواق. كل هدف من أهداف الحياة لا يرضي Euismod.
الشركة نفسها هي شركة ناجحة جدا. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو الخيار المناسب للحاضر للحصول على ألم مثل ألمه!
## التصميم الإبداعي
كمكياج من جرة السم لقد كانت عطلة نهاية الأسبوع. أنا لاعب كرة قدم متكامل. للشرب، البحيرة تأخذ أكبر شرفة. كل هدف من أهداف الحياة لا يرضي Euismod.
> يجب أن يكون العميل نفسه قادرًا على متابعة عملية الترطيب. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو اختيار مناسب للحاضر ليتألم مثل ألمه!
الشركة نفسها هي شركة ناجحة جدا. ولا أحد حتى يكلف نفسه عناء فتحه. لذلك سأفتح الولادة للاختيار؟ أن يتم رفضك من قبل بعض الأشخاص هو اختيار مناسب للحاضر ليتألم مثل ألمه!
-6
View File
@@ -1,6 +0,0 @@
---
title: "Contact"
meta_title: ""
description: "this is meta description"
draft: false
---
-53
View File
@@ -1,53 +0,0 @@
---
# Banner
banner:
title: "القالب الابتدائي النهائي الذي تحتاجه لبدء مشروعك مع Astro"
content: "Astroplate هو قالب ابتدائي مجاني مبني باستخدام Astro وTailwindCSS، يوفر كل ما تحتاجه لبدء مشروعك مع Astro وتوفير الوقت الثمين."
image: "/images/banner.png"
button:
enable: true
label: "ابدأ مجاناً"
link: "https://github.com/zeon-studio/astroplate"
# Features
features:
- title: "ما الذي يتضمنه Astroplate"
image: "/images/service-1.png"
content: "Astroplate هو قالب ابتدائي شامل يتضمن كل ما تحتاجه للبدء في مشروعك مع Astro. ما الذي يتضمنه Astroplate"
bulletpoints:
- "أكثر من 10 صفحات جاهزة"
- "درجة 95+ في Google Pagespeed"
- "مبني باستخدام Astro وTailwindCSS لتصميم سهل وقابل للتخصيص"
- "متجاوب بالكامل على جميع الأجهزة"
- "محسن لمحركات البحث لتحسين تصنيفات محركات البحث"
- "**مفتوح المصدر ومجاني** للاستخدام الشخصي والتجاري"
button:
enable: false
label: "ابدأ الآن"
link: "#"
- title: "اكتشف الميزات الرئيسية لـ Astro"
image: "/images/service-2.png"
content: "Astro هو إطار عمل ويب شامل لبناء مواقع ويب سريعة ومركزة على المحتوى. يقدم مجموعة من الميزات المثيرة للمطورين ومنشئي المواقع. بعض الميزات الرئيسية هي:"
bulletpoints:
- "بدون جافا سكريبت افتراضيًا: لا يوجد عبء تشغيل جافا سكريبت لإبطائك."
- "قابل للتخصيص: Tailwind وMDX وأكثر من 100 تكامل آخر للاختيار من بينها."
- "محايد للواجهة: يدعم React وPreact وSvelte وVue وSolid وLit والمزيد."
button:
enable: true
label: "ابدأ الآن"
link: "https://github.com/zeon-studio/astroplate"
- title: "أهم الأسباب لاختيار Astro لمشروعك القادم"
image: "/images/service-3.png"
content: "مع Astro، يمكنك بناء مواقع ويب حديثة ومركزة على المحتوى دون التضحية بالأداء أو سهولة الاستخدام."
bulletpoints:
- "تحميل فوري للمواقع الثابتة لتحسين تجربة المستخدم وتحسين محركات البحث."
- "بناء الجملة البديهي والدعم للأطر الشعبية يجعل تعلم واستخدام Astro سهلًا."
- "استخدام أي مكتبة أو إطار عمل فرونت إند، أو بناء مكونات مخصصة، لأي حجم من المشاريع."
- "مبني على أحدث التقنيات للحفاظ على مشاريعك محدثة بأحدث معايير الويب."
button:
enable: false
label: ""
link: ""
---
-255
View File
@@ -1,255 +0,0 @@
---
title: "عناصر"
meta_title: ""
description: "this is meta description"
draft: false
---
# عنوان 1
## العنوان 2
### العنوان 3
#### العنوان 4
##### العنوان 5
###### العنوان 6
---
### فقرة
هل أتيت إلى هنا من أجل شيء محدد أم مجرد تقريع للرايكر بشكل عام؟ وبالانطلاق إلى أقصى سرعة ممكنة، ظهرت للحظة وكأنك في مكانين في الوقت نفسه. لدينا مخرب على متن الطائرة. نحن نعلم أنك تتعامل بالخام المسروق. لكني أريد أن أتحدث عن محاولة اغتيال الملازم وورف. هل يمكن لأي شخص البقاء على قيد الحياة داخل منطقة النقل العازلة لمدة 75 عامًا؟ قدر. إنه يحمي الحمقى والأطفال الصغار والسفن.
هل أتيت إلى هنا من أجل شيء محدد أم مجرد تقريع عام للرايكر؟ وبالانطلاق إلى أقصى سرعة ممكنة، ظهرت للحظة وكأنك في مكانين في الوقت نفسه. لدينا مخرب على متن الطائرة. نحن نعلم أنك تتعامل بالخام المسروق. لكني أريد أن أتحدث عن محاولة اغتيال الملازم وورف. هل يمكن لأي شخص البقاء على قيد الحياة داخل منطقة النقل العازلة لمدة 75 عامًا؟ قدر. إنه يحمي الحمقى والأطفال الصغار والسفن.
---
### توكيد
1. هل أتيت إلى هنا من أجل شيء **خاص** أم مجرد عام
2. هل أتيت إلى هنا من أجل شيء ما <ins>على وجه الخصوص</ins>
3. _هل أتيت إلى هنا_
4. هل أتيت إلى هنا من أجل **شيء ما** على وجه الخصوص
5. هل أتيت إلى هنا من أجل شيء محدد؟
6. هل أتيت إلى هنا من أجل شيء محدد؟
7. سيتم تحويل عناوين URL وعناوين URL الموجودة بين قوسين إلى روابط تلقائيًا. [http://www.example.com](http://www.example.com) أو
8. [http://www.example.com](http://www.example.com) وأحيانًا example.com (ولكن ليس على Github، على سبيل المثال).
---
### وصلة
[أنا رابط ذو نمط مضمّن](https://www.google.com)
[أنا رابط على شكل سطري يحمل عنوانًا](https://www.google.com "صفحة Google الرئيسية")
[أنا رابط ذو نمط مرجعي] [نص مرجعي عشوائي غير حساس لحالة الأحرف]
[أنا مرجع نسبي لملف مستودع](../blob/master/LICENSE)
[يمكنك استخدام الأرقام لتعريفات الارتباط ذات النمط المرجعي] [1]
أو اتركه فارغًا واستخدم [رابط النص نفسه].
example.com (ولكن ليس على Github، على سبيل المثال).
بعض النص لإظهار أن الروابط المرجعية يمكن أن تتبع لاحقًا.
[نص مرجعي عشوائي غير حساس لحالة الأحرف]: https://www.themefisher.com
[1]: https://gethugothemes.com
[رابط النص نفسه]: https://www.getjekyllthemes.com
---
### Ordered List
1. List item
2. List item
3. List item
4. List item
5. List item
---
### Unordered List
- List item
- List item
- List item
- List item
- List item
---
### Code and Syntax Highlighting
#### HTML
```html
<ul>
<li class="nav-item">
<a class="nav-link" href="/">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" href="about/">About</a>
</li>
</ul>
```
---
#### CSS
```css
img {
vertical-align: middle;
border: 0;
max-width: 100%;
height: auto;
}
```
---
#### JavaScript
```javascript
window.addEventListener("load", (e) => {
document.querySelector(".preloader").style.display = "none";
});
```
---
### Button
<Button label="Button" link="#" style="solid" />
---
### Quote
> هل أتيت إلى هنا من أجل شيء محدد أم مجرد تقريع للرايكر بشكل عام؟ وبالانطلاق إلى أقصى سرعة ممكنة، ظهرت للحظة وكأنك في مكانين في الوقت نفسه.
---
### Notice
<Notice type="note">هذه ملاحظة بسيطة.</Notice>
<Notice type="tip">هذه ملاحظة بسيطة.</Notice>
<Notice type="info">هذه ملاحظة بسيطة.</Notice>
<Notice type="warning">هذه ملاحظة بسيطة.</Notice>
---
### Tab
<Tabs client:load>
<Tab name="Tab 1">
#### Did you come here for something in particular?
هل أتيت إلى هنا من أجل شيء محدد أم مجرد تقريع للرايكر بشكل عام؟ وبالانطلاق إلى أقصى سرعة ممكنة، ظهرت للحظة وكأنك في مكانين في الوقت نفسه. لدينا مخرب على متن الطائرة. نحن نعلم أنك تتعامل بالخام المسروق. لكني أريد أن أتحدث عن محاولة اغتيال الملازم وورف.
</Tab>
<Tab name="Tab 2">
#### I wanna talk about the assassination attempt
الألم في حد ذاته عظيم، وقد تم تسوية elitr Sadipscing، ولكن Diam Nonumy Eirmo لفترة من الوقت يحسدون أنه مع المخاض والألم كان شيئًا عظيمًا، ولكن Diam voluptiva. ولكن في الواقع سأتهمهم وألمين فقط وسوف أتراجع عنهم. Stet clita kasd gubergren، لا يوجد بحر تاكيماتا مقدس.
الألم في حد ذاته عظيم، وقد تم تسوية elitr Sadipscing، ولكن Diam Nonumy Eirmo لفترة من الوقت يحسدون أنه مع المخاض والألم كان شيئًا عظيمًا، ولكن Diam voluptiva. ولكن في الواقع سأتهمهم وألمين فقط وسوف أتراجع عنهم. Stet clita kasd gubergren، لا يوجد بحر تاكيماتا مقدس.
</Tab>
<Tab name="Tab 3">
#### We know youre dealing in stolen ore
الألم في حد ذاته عظيم، وقد تم تسوية elitr Sadipscing، ولكن Diam Nonumy Eirmo لفترة من الوقت يحسدون أنه مع المخاض والألم كان شيئًا عظيمًا، ولكن Diam voluptiva. ولكن في الواقع سأتهمهم وألمين فقط وسوف أتراجع عنهم. Stet clita kasd gubergren، لا يوجد بحر تاكيماتا مقدس.
الألم في حد ذاته عظيم، وقد تم تسوية elitr Sadipscing، ولكن Diam Nonumy Eirmo لفترة من الوقت يحسدون أنه مع المخاض والألم كان شيئًا عظيمًا، ولكن Diam voluptiva. ولكن في الواقع سأتهمهم وألمين فقط وسوف أتراجع عنهم. Stet clita kasd gubergren، لا يوجد بحر تاكيماتا مقدس.
</Tab>
</Tabs>
---
### Table
| # | First | Last | Handle |
| :-- | :----------: | :----------: | -----------: |
| 1 | Row:1 Cell:1 | Row:1 Cell:2 | Row:1 Cell:3 |
| 2 | Row:2 Cell:1 | Row:2 Cell:2 | Row:2 Cell:3 |
| 3 | Row:3 Cell:1 | Row:3 Cell:2 | Row:3 Cell:3 |
---
### Accordion
<Accordion client:load title="Why should you need to do this?">
- هذا شي.
- هذا شي.
- هذا شي.
- هذا شي.
- هذا شي.
</Accordion>
<Accordion client:load title="How can I adjust Horizontal centering">
- هذا شي.
- هذا شي.
- هذا شي.
- هذا شي.
- هذا شي.
</Accordion>
<Accordion client:load title="Should you use Negative margin?">
- هذا شي.
- هذا شي.
- هذا شي.
- هذا شي.
- هذا شي.
</Accordion>
---
### Image
![image](/images/image-placeholder.png)
---
### Youtube video
<Youtube client:load id="ZEe-IFezQok" title="Youtube Video Test Title" />
---
### Custom video
<Video
width="100%"
src="https://joy1.videvo.net/videvo_files/video/free/video0467/large_watermarked/_import_61516692993d77.04238324_preview.mp4"
/>
-30
View File
@@ -1,30 +0,0 @@
---
title: "خصوصية"
meta_title: ""
description: "this is meta description"
draft: false
---
#### مسؤولية المساهمين
العميل مهم جدًا، العميل سيتبعه العميل. بوروس، حتى الآن أنت إيروس، ullamcorper id feugiat كل شخص ببعض السهام. كنت قبيحًا، لكن كتلة الرسوم الكاريكاتورية كانت حبلى بالجعبة. لا أريد ألم لاعب كرة قدم قوي. سيتم علاج Ultrices بالقوس من فراش المرض. تم إطلاق النار عليه بالسهام في المسار الكلي. كانت مشكلة القدر الساخن هي أنه يحتاج إلى الشوكولاتة. الآن المكتب ولكن في بعض الأحيان البحيرة. لكن من يهتم بالرسوم المتحركة
السعر بعض. إنه عنصر مهم للغاية، إيروس تينسيدونت، نيبه في الأسد. Malesuada نقية، بحيرة، ولكن لبعض الوقت معلقة. من يهتم بالوقت يريد أن يولد من القلق. ولكن يجب الاهتمام بها. يريد الاتحاد الأوروبي أن يولد من القلق، ويحتاج erhdfvssfvrgss إلى الرسوم الكاريكاتورية والعناصر. بحيرة يسهل السباحة فيها.
#### جمع المعلومات الشخصية
العميل مهم جدًا، العميل سيتبعه العميل. بوروس، حتى الآن أنت إيروس، ullamcorper id feugiat كل شخص ببعض السهام. كنت قبيحًا، لكن كتلة الرسوم الكاريكاتورية كانت حبلى بالجعبة. لا أريد ألم لاعب كرة قدم قوي. سيتم علاج Ultrices بالقوس من فراش المرض. تم إطلاق النار عليه بالسهام في دورة التعذيب. كانت مشكلة القدر الساخن هي أنه يحتاج إلى الشوكولاتة. الآن المكتب ولكن في بعض الأحيان البحيرة. لكن من يهتم بالرسوم المتحركة
#### حماية المعلومات الشخصية
العميل مهم جدًا، العميل سيتبعه العميل. بوروس، حتى الآن أنت إيروس، ullamcorper id feugiat كل شخص ببعض السهام. كنت قبيحًا، لكن كتلة الرسوم الكاريكاتورية كانت حبلى بالجعبة. لا أريد ألم لاعب كرة قدم قوي. سيتم علاج Ultrices بالقوس من فراش المرض. تم إطلاق النار عليه بالسهام في المسار الكلي.
كانت المشكلة أنه كان بحاجة إلى الشوكولاتة. الآن المكتب ولكن في بعض الأحيان البحيرة. لكن من يهتم بالرسوم المتحركة
العميل مهم جدًا، العميل سيتبعه العميل. بوروس، حتى الآن أنت إيروس، ullamcorper id feugiat
#### تغييرات سياسة الخصوصية
1. تم تصميم جميع عناصر Themefisher لتتوافق مع الأحدث، ونحن نتحقق من كل شيء
2. التعليقات التي تهدد أو تضر بسمعة أي شخص أو منظمة
3. المعلومات الشخصية بما في ذلك، على سبيل المثال لا الحصر، عناوين البريد الإلكتروني وأرقام الهواتف
4. أي تحديث يأتي في التكنولوجيا سوف يحصل العميل على إشعار تلقائي.
-10
View File
@@ -1,10 +0,0 @@
---
enable: true
title: "هل أنت مستعد لبناء مشروعك القادم مع Astro؟"
image: "/images/call-to-action.png"
description: "اكتشف مستقبل تطوير الويب مع Astroplate وAstro. قم ببناء مواقع ثابتة بسرعة البرق بكل سهولة ومرونة."
button:
enable: true
label: "نبدأ الآن"
link: "https://github.com/zeon-studio/astroplate"
---
-27
View File
@@ -1,27 +0,0 @@
---
enable: true
title: "ماذا يقول المستخدمون عن Astroplate"
description: "لا تأخذ كلامنا فقط - استمع إلى بعض مستخدمينا الراضين! تحقق من بعض شهاداتنا أدناه لترى ما يقوله الآخرون عن Astroplate."
# Testimonials
testimonials:
- name: "مارفن ماكيني"
designation: "مصمم ويب"
avatar: "/images/avatar-sm.png"
content: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui iusto illo molestias, assumenda expedita commodi inventore non itaque molestiae voluptatum dolore, facilis sapiente, repellat veniam."
- name: "مارفن ماكيني"
designation: "مصمم ويب"
avatar: "/images/avatar-sm.png"
content: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui iusto illo molestias, assumenda expedita commodi inventore non itaque molestiae voluptatum dolore, facilis sapiente, repellat veniam."
- name: "مارفن ماكيني"
designation: "مصمم ويب"
avatar: "/images/avatar-sm.png"
content: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui iusto illo molestias, assumenda expedita commodi inventore non itaque molestiae voluptatum dolore, facilis sapiente, repellat veniam."
- name: "مارفن ماكيني"
designation: "مصمم ويب"
avatar: "/images/avatar-sm.png"
content: "Lorem ipsum dolor sit amet consectetur adipisicing elit. Qui iusto illo molestias, assumenda expedita commodi inventore non itaque molestiae voluptatum dolore, facilis sapiente, repellat veniam."
---
-17
View File
@@ -1,17 +0,0 @@
{
"full_name": "الاسم الكامل",
"full_name_placeholder": "أدخل اسمك الكامل",
"mail": "البريد الإلكتروني العملي",
"mail_placeholder": "john.doe@email.com",
"message": "هل هناك شيء آخر؟",
"message_placeholder": "رسالتك هنا...",
"submit": "إرسال",
"read_more": "اقرأ المزيد",
"page_not_found": "الصفحة غير موجودة",
"working_mail": "البريد الإلكتروني العملي",
"anything_else": "هل هناك شيء آخر؟",
"contact_message_placeholder": "رسالتك هنا...",
"page_not_found_content": "قد تمت إزالة الصفحة التي تبحث عنها، أو تغيير اسمها، أو أصبحت غير متوفرة مؤقتًا.",
"back_to_home": "العودة إلى الصفحة الرئيسية",
"get_started": "البدئة"
}
+7 -1
View File
@@ -1,5 +1,6 @@
---
import config from "@/config/config.json";
import { constructUrl, getLangFromUrl } from "@/lib/utils/i18nUtils";
import ImageMod from "./ImageMod.astro";
const { src, srcDarkmode }: { src?: string; srcDarkmode?: string } =
@@ -21,9 +22,14 @@ const {
} = config.site;
const { theme_switcher }: { theme_switcher: boolean } = config.settings;
const { default_language } = config.settings;
const { trailing_slash } = config.site;
const lang = getLangFromUrl(Astro.url);
const url = constructUrl("/", lang, default_language, trailing_slash);
---
<a href="/" class="navbar-brand inline-block">
<a href={url} class="navbar-brand inline-block">
{
src || srcDarkmode || logo || logo_darkmode ? (
<>
+20 -6
View File
@@ -11,21 +11,35 @@ const LanguageSwitcher = ({
}) => {
const { default_language } = config.settings;
// Function to remove trailing slash if necessary
const removeTrailingSlash = (path: string) => {
if (!config.site.trailing_slash) {
return path.replace(/\/$/, "");
}
return path;
};
// Sort languages by weight
const sortedLanguages = languages.sort((a, b) => a.weight - b.weight);
return (
<div className="mr-5">
<select
className="border border-dark text-dark bg-transparent dark:border-darkmode-primary dark:text-white py-1 rounded-sm dark:bg cursor-pointer"
className="border border-dark text-dark bg-transparent dark:border-darkmode-primary dark:text-white py-1 rounded-sm cursor-pointer focus:ring-0 focus:border-dark dark:focus:border-darkmode-primary"
onChange={(e) => {
const selectedLang = e.target.value;
const newPath =
selectedLang === default_language
? pathname.replace(`/${lang}`, "")
: `/${selectedLang}${pathname.replace(`/${lang}`, "")}`;
let newPath;
const baseUrl = window.location.origin;
if (selectedLang === default_language) {
newPath = `${baseUrl}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`;
} else {
newPath = `/${selectedLang}${removeTrailingSlash(pathname.replace(`/${lang}`, ""))}`;
}
window.location.href = newPath;
}}
value={lang}
>
{languages.map((language) => (
{sortedLanguages.map((language) => (
<option
className="dark:text-dark"
key={language.languageCode}
+2 -1
View File
@@ -6,6 +6,7 @@ import social from "@/config/social.json";
import { getLangFromUrl } from "@/lib/utils/i18nUtils";
import { loadMenu } from "@/lib/utils/loadMenu";
import { markdownify } from "@/lib/utils/textConverter";
import { getRelativeLocaleUrl } from "astro:i18n";
const lang = getLangFromUrl(Astro.url);
const menu = loadMenu(lang);
@@ -23,7 +24,7 @@ const { footer }: { footer: { name: string; url: string }[] } = menu;
{
footer.map((menu) => (
<li class="m-3 inline-block">
<a href={menu.url}>{menu.name}</a>
<a href={getRelativeLocaleUrl(lang, menu.url)}>{menu.name}</a>
</li>
))
}
+41 -13
View File
@@ -3,16 +3,21 @@ import Logo from "@/components/Logo.astro";
import ThemeSwitcher from "@/components/ThemeSwitcher.astro";
import config from "@/config/config.json";
import LanguageSwitcher from "@/helpers/LanguageSwitcher";
import { getLangFromUrl, getTranslations } from "@/lib/utils/i18nUtils";
import {
constructUrl,
getLangFromUrl,
getTranslations,
} from "@/lib/utils/i18nUtils";
import { loadMenu } from "@/lib/utils/loadMenu";
import type { ContentEntryMap } from "astro:content";
import { getRelativeLocaleUrl } from "astro:i18n";
import { IoSearch } from "react-icons/io5";
const lang = getLangFromUrl(Astro.url);
const menu = loadMenu(lang);
const { navigation_button, settings } = config;
const { default_language } = config.settings;
const { trailing_slash } = config.site;
const { pathname } = Astro.url;
const { get_started } = await getTranslations(lang as keyof ContentEntryMap);
---
@@ -54,10 +59,14 @@ const { get_started } = await getTranslations(lang as keyof ContentEntryMap);
<span
class={`nav-link inline-flex items-center ${
menu.children
?.map(({ url }: { url: any }) => url)
.includes(pathname) ||
menu.children
?.map(({ url }: { url: any }) => `${url}/`)
?.map(({ url }: { url: any }) =>
constructUrl(
url,
lang,
default_language,
trailing_slash
)
)
.includes(pathname)
? "active"
: ""
@@ -72,12 +81,21 @@ const { get_started } = await getTranslations(lang as keyof ContentEntryMap);
{menu.children?.map((child: any) => (
<li class="nav-dropdown-item">
<a
href={getRelativeLocaleUrl(lang, child.url)}
href={constructUrl(
child.url,
lang,
default_language,
trailing_slash
)}
aria-label={child.name}
class={`nav-dropdown-link block ${
(pathname === `${child.url}/` ||
pathname === child.url) &&
"active"
pathname ===
constructUrl(
child.url,
lang,
default_language,
trailing_slash
) && "active"
}`}
>
{child.name}
@@ -89,10 +107,20 @@ const { get_started } = await getTranslations(lang as keyof ContentEntryMap);
) : (
<li class="nav-item">
<a
href={getRelativeLocaleUrl(lang, menu.url)}
href={constructUrl(
menu.url,
lang,
default_language,
trailing_slash
)}
class={`nav-link block ${
(pathname === `${menu.url}/` || pathname === menu.url) &&
"active"
pathname ===
constructUrl(
menu.url,
lang,
default_language,
trailing_slash
) && "active"
}`}
>
{menu.name}
+34
View File
@@ -1,5 +1,6 @@
import config from "@/config/config.json";
import languagesJSON from "@/config/language.json";
import { getRelativeLocaleUrl } from "astro:i18n";
import fs from "fs";
import path from "path";
const { default_language } = config.settings;
@@ -46,3 +47,36 @@ 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,
lang: string,
default_language: string,
trailing_slash: boolean,
) => {
let constructedUrl;
if (url === "/") {
constructedUrl = lang === default_language ? "/" : `/${lang}`;
} else {
constructedUrl = getRelativeLocaleUrl(lang, url, {
normalizeLocale: false,
});
}
if (trailing_slash) {
if (!constructedUrl.endsWith("/")) {
constructedUrl += "/";
}
} else {
if (constructedUrl.endsWith("/")) {
constructedUrl = constructedUrl.slice(0, -1);
}
}
// Ensure home URL is absolute
if (constructedUrl === "") {
constructedUrl = "/";
}
return constructedUrl;
};