Add Saleh Kargar factory website with FA/AR i18n.

Clone of salehkargar.ir as a Next.js site with localized pages, SEO, and product gallery.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Alireza Hassani
2026-08-14 13:35:07 +03:30
co-authored by Cursor
parent ab5425663f
commit eccbb5d79d
111 changed files with 4456 additions and 114 deletions
+241
View File
@@ -0,0 +1,241 @@
{
"Meta": {
"homeTitle": "الرئيسية",
"homeDescription": "مجمّع مصانع صالح كاركر وأبنائه لسحق الأحجار وإنتاج الجير — إنتاج مسحوق الحجر والجير وجص سوبر صالح ومواد معدنية بجودة عالية وتحميل سريع ورضا العملاء",
"siteName": "مصنع صالح كاركر وأبنائه",
"productsTitle": "المنتجات",
"productsDescription": "اطّلع على منتجات مصنع صالح كاركر وأبنائه بما في ذلك جص سوبر صالح ومسحوق الحجر المعدني والجير الإنشائي والصناعي وغيرها من المواد المعدنية.",
"productDetails": "تفاصيل المنتج",
"aboutChalkTitle": "حول جص سوبر صالح",
"aboutChalkDescription": "تعرّف على تاريخ إنتاج الجص وطريقة تصنيعه ومزاياه وخصائص جص سوبر صالح؛ جص ميكروني قابل للغسل بصلابة تفوق الجص العادي بثلاثة أضعاف.",
"aboutLimeTitle": "حول الجير",
"aboutLimeDescription": "تعرّف على تاريخ إنتاج الجير والطرق التقليدية والصناعية في مجمّع صالح كاركر وأبنائه واستخدامات الجير الإنشائي والصناعي.",
"galleryTitle": "معرض الصور",
"galleryDescription": "معرض صور مصنع ومنجم صالح كاركر وأبنائه؛ مشاهدة بيئة الإنتاج والمنتجات وأنشطة المجمع.",
"aboutUsTitle": "من نحن",
"aboutUsDescription": "حول مجمّع إنتاج صالح كاركر وأبنائه؛ منتج الأحجار المعدنية ومسحوق الجير وجص سوبر صالح بشعار الجودة الأعلى والتحميل السريع."
},
"Nav": {
"home": "الصفحة الرئيسية",
"products": "المنتجات",
"aboutChalk": "حول جص سوبر صالح",
"aboutLime": "حول الجير",
"gallery": "المعرض",
"aboutUs": "من نحن",
"mainMenu": "القائمة الرئيسية",
"openMenu": "فتح القائمة",
"closeMenu": "إغلاق القائمة",
"login": "تسجيل الدخول",
"logoAlt": "صالح كاركر وأبنائه"
},
"Language": {
"label": "اللغة",
"fa": "فارسی",
"ar": "العربية"
},
"Hero": {
"title": "مصنع صالح كاركر وأبنائه",
"subtitleEn": "Saleh Kargar Factory",
"imageAlt": "مصنع صالح كاركر",
"transport": "النقل",
"demolition": "الهدم",
"limeProduction": "إنتاج الجير"
},
"Productions": {
"title": "إنتــاجــات المــصــنــع",
"imageAlt": "منتجات المصنع",
"items": {
"clay": {
"title": "طين مطحون (طين البلاط)",
"description": "يُستخدم هذا الطين عادة في الجص والطين، وطين صناعة البلاط وأعمال التبليط."
},
"mineralPowder": {
"title": "مسحوق الحجر المعدني",
"description": "يُحضَّر هذا المسحوق من أفضل أنواع حجر كربونات الكالسيوم بنقاء عالٍ جدًا وبياض ونعومة تقلل استهلاك الإسمنت، وهو ما يلاحظه مستخدمو هذا النوع من المسحوق."
},
"joshaghan": {
"title": "مسحوق حجر جوشقان",
"description": "يُستخدم هذا المسحوق في الأغراض الصناعية والتبييض والإنشاء وأعمال الكنتيكس ومصانع اللواصق وغيرها."
},
"superChalk": {
"title": "جص سوبر صالح",
"description": "جص سوبر كاركر أقوى بثلاثة أضعاف من أنواع الجص الأخرى، ويمنح الواجهة الداخلية للمبنى بياضًا ولمعانًا وبريقًا استثنائيًا. ومن حيث البياض يمكن أن يحل محل الدهان، فيقلل التكلفة ويزيد سرعة وسهولة التنفيذ."
},
"buildingLime": {
"title": "جير إنشائي وصناعي",
"description": "يُقدَّم هذا الجير بنوعين سائب ومعبّأ؛ فالمعبّأ (جير مطفأ) في عبوات، والسائب للاستخدامات الإنشائية. أما النوع الصناعي فبنقاء عالٍ جدًا لمصانع الجلود والخرسانة الخفيفة والهيدرات وغيرها."
},
"limestone": {
"title": "حجر جيري بكربونات البوتاسيوم",
"description": "يُستخدم الحجر الجيري في الأغراض الإنشائية مثل شيّ الجير الصناعي والتقليدي والجير ومسحوق الحجر وحجر الواجهة، وبسبب وفرة كربونات الكالسيوم فيه يُستخدم أيضًا في علف الدواجن. يُستخرج من المنجم على شكل كتل أو بالتفجير من الجبل."
},
"superPowder": {
"title": "سوبر مسحوق معدني",
"description": "بفضل بياضه العالي وعدم الحاجة إلى الغربلة وقابليته الممتازة للتشطيب وسهولة العمل وعدم التشقق في الواجهات الداخلية والخارجية وفي لحام البلاط، يمكن أن يكون بديلًا عن مسحوق جوشقان."
},
"sand": {
"title": "رمل ناعم",
"description": "يُستخدم هذا الرمل الناعم في أعمال البستنة والحدائق."
}
}
},
"Powder": {
"title": "خصائص مسحوق الحجر المعدني",
"benefitsTitle": "مزايا العمل بمسحوق الحجر المعدني:",
"usesTitle": "مجالات استخدام مسحوق الحجر المعدني",
"benefitsImageAlt": "مزايا مسحوق الحجر المعدني",
"usesImageAlt": "مجالات استخدام مسحوق الحجر المعدني",
"benefits": {
"quality": "جودة ممتازة",
"lessCement": "تقليل استهلاك الإسمنت",
"whiteness": "البياض",
"easyWork": "سهولة العمل على يد الحرفي",
"finish": "قابلية تشطيب ممتازة وقابل للغسل"
},
"uses": {
"whitework": "1- التبييض بالإسمنت",
"grout": "2- لحام البلاط والسيراميك والموزاييك",
"mosaic": "3- صناعة الموزاييك",
"slurry": "4- عمل الملاط خلف أحجار الصين والرخام"
}
},
"AboutTabs": {
"sampleWork": "نموذج عمل",
"factoryView": "منظر المصنع",
"tabs": {
"work": {
"label": "عملنا",
"title": "نتائج تحليل عينات الأحجار",
"subtitle": "شعارنا :\nجودة أعلى - تحميل سريع - رضا العملاء",
"body": "يمتلك هذا المجمع وكالات لعدة أنواع من جص سمنان وقم وأنواع جص سوبر قم.",
"cta": "اعرف المزيد عنا ..."
},
"goal": {
"label": "هدفنا",
"title": "اطلب منا أفضل جودة للجير...",
"subtitle": "يفتخر هذا المجمع الإنتاجي بتقديم جميع منتجاته معبّأة وسائبة بجودة عالية مباشرة لعملائه الكرام، ويمتلك وكالات لعدة أنواع من جص سمنان وقم وأنواع جص سوبر قم.",
"body": "هدفنا رضا العميل وإنتاج سلعة عالية الجودة",
"cta": "حول الجير ..."
},
"services": {
"label": "خدماتنا",
"title": "منتجات ممتازة وعالية الجودة ...",
"subtitle": "يفتخر إنتاج صالح كاركر وأبنائه بتقديم جميع منتجاته من أفضل الأحجار المعدنية المتوفرة في البلاد وبجودة عالية لعملائه الكرام.",
"body": "شعارنا:\nجودة أعلى\nتحميل سريع\nرضا العملاء",
"cta": "اعرف المزيد ..."
}
}
},
"Carousel": {
"title": "منتجات المصنع",
"prev": "السابق",
"next": "التالي",
"items": {
"aryanClay": "طين آريائي",
"ore": "حجر المنجم",
"superPowder": "سوبر مسحوق معدني",
"mineralPowder": "مسحوق الحجر المعدني",
"joshaghan": "مسحوق حجر جوشقان",
"superChalk": "جص سوبر صالح"
}
},
"Location": {
"title": "مــوقــعــنــا",
"heading": "مجمّع مصانع سحق الأحجار وإنتاج الجير صالح",
"subtitle": "( صالح كاركر وأبنائه )",
"coverage": "التوزيع في جميع أنحاء إيران",
"mapAlt": "موقع المجمع"
},
"Footer": {
"brand": "مـــوقـــع الـــمـــعـــدن",
"aboutTitle": "من نحن",
"aboutText": "إنتاج أنواع الأحجار المعدنية ومسحوق الجير",
"addressTitle": "عنواننا",
"address": "قم - طريق أراك - الكيلومتر 8 - دوران مارال - بعد مستشفى الإمام رضا - الزقاق الثاني - داخل الزقاق (المسابك)",
"noteFactory": "مجمّع مصانع سحق الأحجار وإنتاج الجير صالح",
"noteSlogan": "شعارنا: جودة أعلى - تحميل سريع - رضا العملاء",
"contactTitle": "اتصل بنا",
"accounting": "المحاسبة",
"sales": "المبيعات",
"loading": "التحميل",
"copyright": "مصنع صالح كاركر وأبنائه"
},
"Products": {
"pageTitle": "المنتجات",
"detailsTitle": "تفاصيل المنتج",
"backToProducts": "العودة إلى المنتجات",
"currency": "تومان",
"notFound": "المنتج غير موجود",
"items": {
"super-chalk": {
"title": "جص سوبر صالح",
"description": "هذا الجص أقوى بثلاثة أضعاف من أنواع الجص الأخرى. يُنفَّذ جص سوبر صالح كطبقة رقيقة بسمك 3-4 مم على طبقة الجص السفلية (جص التبييض والإنشاء)، فيمنح الواجهة الداخلية للمبنى بياضًا ولمعانًا وبريقًا استثنائيًا. ومن حيث البياض يمكن أن يحل محل الدهان، فيقلل التكلفة ويزيد سرعة وسهولة التنفيذ."
}
}
},
"AboutChalkPage": {
"title": "حول جص سوبر صالح",
"sections": {
"history": {
"title": "تاريــخ إنتــاج الجــص",
"body": "الجص هو كبريتات الكالسيوم المائية الطبيعية ويوجد بأشكال بلورية متعددة ضمن قشور سميكة نسبيًا في القشرة الصلبة للأرض، حيث يُستخرج ويُستخدم. ويُعد الجص من أقدم مواد البناء المستخدمة في العالم، وقد أُنتج واستُخدم بطرق مختلفة عبر القرون. بعد استخراجه من المنجم يُنقل إلى الفرن مثل الجير ويُسخَّن إلى نحو 180 درجة مئوية حتى يفقد جزءًا من جزيئات ماء التبلور ويصبح صالحًا كمواد بناء وللقوالب. عادةً ما يُطحن الجص بمطاحن خاصة ويُباع في أكياس أو سائبًا. ويجب أن تكون مساحيق الجص الجيدة أصغر من 0.15 مم."
},
"method": {
"title": "طريقة إنتــاج الجــص",
"body": "تُعرَّف نقاوة حجر الجص بنسبة معدن الجبس فيه. ووفق جمعية معايير المواد الأمريكية (ASTM) فإن الحد الأدنى المطلوب لنقاوة حجر الجص في المواد الصناعية هو 70٪ جبس، بينما تتراوح نقاوة معظم أحجار الجص التجارية بين 75 و90٪. وتشمل الشوائب عادةً الطفل والطين وكربونات الكالسيوم، وقد تظهر بقايا أنشطة حيوية.\n\nلون الجص طبيعيًا أبيض، وقد يظهر رماديًا أو رماديًا مائلًا إلى الأزرق أو ورديًا أو أصفر بسبب شوائب عضوية أو طين أو أكسيد الحديد. ونظام تبلور حجر الجص أحادي الميل، وكثافته النوعية 2.2 وصلابته 2. والجبس المستخدم يكون على شكل كتلة بلورية ناعمة أو خشنة، ويذوب في حمض الهيدروكلوريك والماء الساخن. ويتكون حجر الجص النقي من نحو 20.9٪ ماء مركب و64.6٪ SO3 و32.5٪ CaO.\n\nمعادلة تحضير الجص: 2CaSO4.4H2O → 2CaSO4 + H2O 3H2O (يتبخر بالحرارة)"
},
"strength": {
"title": "مقاومة الجص",
"body": "يتمتع الجص بمقاومة جيدة نسبيًا، ويتحمل ضغطًا أقصاه نحو 30 كغ/سم²، أما في الشد فمقاومته أضعف وتصل إلى نحو 5 كغ/سم²؛ وهذه القيم للجص النقي، وإذا استُخدم مخلوطًا (جص وطين) تنخفض المقاومة بشكل ملحوظ. ونسبة الماء المستخدمة تؤثر بقوة على المقاومة. مقاومة الجص للحريق: يقاوم الجص الحرائق ويمكن أن يعمل كطبقة عازلة للفولاذ، لأن بنيته الكيميائية تحتوي جزيئي ماء ينفصلان عند الحريق ويكوّنان طبقة رقيقة واقية."
},
"pros": {
"title": "مــزايا الجــص",
"body": "رخص الجص: لرخصه ووفوره يعمل به الجميع حتى غير المختصين لإصلاحات بسيطة. قابلية التشكيل: للجص قابلية تشكيل عالية تُستخدم في صناعات مثل الخزف كقوالب، ولذلك يلعب النحت الجصي دورًا مهمًا في تجميل الداخل. الامتصاص الصوتي: يمتص الجص نحو 70٪ من الموجات الصوتية تقريبًا. البياض: يمنح اللون الأبيض جمالية مميزة للفضاء الداخلي. التمدد الحجمي: يزداد حجمه عند التصلب فيملأ المسام ويصبح سطحًا متجانسًا صحيًا."
},
"cons": {
"title": "عيــوب الجــص",
"body": "يمتص الجص الأوساخ بسرعة، وأداؤه ضعيف جدًا أمام الرطوبة؛ فإذا تعرض للماء باستمرار تظهر ظاهرة الانتفاخ. لذلك يقل استخدامه في المناطق الرطبة مثل شمال إيران، ويُستبدل بالجير والإسمنت الأبيض في التبييض. كما قد تتشقق الطبقات الجصية قرب أنابيب التدفئة بسبب التمدد والانكماش المتكرر وفقدان الماء."
},
"super": {
"title": "جــص ســوبر كــاركر",
"body": "جص سوبر كاركر أقوى بثلاثة أضعاف من أنواع الجص الأخرى. يُنفَّذ كطبقة رقيقة بسمك 3-4 مم على طبقة الجص السفلية (جص التبييض والإنشاء) فيمنح الواجهة الداخلية بياضًا ولمعانًا وبريقًا استثنائيًا، ويمكن أن يحل محل الدهان فيقلل التكلفة ويزيد سرعة وسهولة التنفيذ. قابل للغسل: جص سوبر كاركر ميكروني وقابل للغسل فيدوم أكثر. قابلية تشطيب ممتازة تمنح سطحًا أملسًا خاليًا من التعرجات، إضافة إلى صلابة أعلى بثلاثة أضعاف من الجص العادي."
}
}
},
"AboutLimePage": {
"title": "حول الجير",
"sections": {
"history": {
"title": "تاريــخ إنتــاج الجيــر",
"body": "لا يعرف عامة الناس كثيرًا عن الجير وأنواعه وطرق إنتاجه. يُنتج الجير بطريقتين تقليدية وصناعية. والطريقة التقليدية موجودة منذ آلاف السنين، وما زالت مستخدمة رغم الطرق الصناعية لأنها ذات جودة مناسبة وملائمة للورش الصغيرة. وترافق معالجة الجير دائمًا عملية الشيّ، ولذلك يلزم فرن لشيّ الجير."
},
"traditional": {
"title": "طريقة الإنتــاج التقليــدي للجير",
"body": "في الطريقة التقليدية يُختار موقع الورشة عادة عند منجم الجير، فيُحفر تجويف في الأرض وتُرصّ فيه أحجار الجير طبقات. وهكذا تؤدي الأرض دور الفرن، وتُعرف هذه الأفران بأفران الجير البئرية أو التنورية. ثم تُشعل من الأسفل وتُغلق بطبقة من طين الجير. هذه طريقة إنتاج الجير الحي (المشوّي) التقليدي. وإذا أُريد جير مطفأ يُرطَّب أثناء الشيّ لتكوين جير مهدرج. وتصل نقاوة الجير في هذا النوع من الشيّ إلى أكثر من 94٪."
},
"difference": {
"title": "الفرق بين الجير التقليــدي والصناعــي",
"body": "يستغرق شيّ الجير التقليدي وقتًا أطول وحرارة أقل من الصناعي. ولا يمكن القول إن أحدهما أفضل مطلقًا لأن لكل منهما استخداماته، وتفضّل كل صناعة أحدهما. والفرق الأساسي في نوع الفرن: التقليدي داخل الأرض بشكل تنور، والصناعي دوار (روتاري) من سبيكة خاصة."
},
"uses": {
"title": "استخدامــات الجير التقليــدي",
"body": "الجير التقليدي بطيء التفاعل ونقاوته أعلى من الصناعي، لذلك يُستخدم في البناء والتعقيم في تربية المواشي والدواجن ودفن النفايات وإنتاج الجير المهدرج وإنتاج طوب الأوتوكلاف الذي يساهم في تخفيف وزن المباني."
}
}
},
"AboutUsPage": {
"title": "من نحن",
"imageAlt": "مجمّع إنتاج صالح كاركر وأبنائه",
"p1": "يفتخر مجمّع إنتاج صالح كاركر وأبنائه بتقديم جميع منتجاته من أفضل الأحجار المعدنية المتوفرة في البلاد وبجودة عالية لعملائه الكرام.",
"p2": "ويفتخر هذا المجمع بتقديم جميع منتجاته معبّأة وسائبة بجودة عالية مباشرة لعملائه، ويمتلك وكالات لعدة أنواع من جص سمنان وهو منتج جص سوبر صالح في قم.",
"p3": "شعارنا: جودة أعلى - تحميل سريع - رضا العملاء"
},
"GalleryPage": {
"title": "معرض الصور",
"itemAlt": "معرض الصور {n}"
},
"Common": {
"home": "الرئيسية",
"products": "المنتجات"
}
}
+241
View File
@@ -0,0 +1,241 @@
{
"Meta": {
"homeTitle": "خانه",
"homeDescription": "مجتمع تولیدی کارخانجات سنگ‌کوبی و آهک‌پزی صالح کارگر و پسران — تولید پودر سنگ، آهک، گچ سوپر صالح و مصالح معدنی با کیفیت برتر، بارگیری سریع و جلب رضایت مشتری",
"siteName": "کارخانه صالح کارگر و پسران",
"productsTitle": "محصولات",
"productsDescription": "مشاهده محصولات کارخانه صالح کارگر و پسران شامل سوپر گچ صالح، پودر سنگ معدنی، آهک ساختمانی و صنعتی و سایر مصالح معدنی.",
"productDetails": "جزئیات محصول",
"aboutChalkTitle": "درباره سوپر گچ صالح",
"aboutChalkDescription": "آشنایی با تاریخچه، روش تولید، مزایا و ویژگی‌های سوپر گچ صالح؛ گچ میکرونیزه قابل شستشو با استحکام سه برابر گچ معمولی.",
"aboutLimeTitle": "درباره آهک",
"aboutLimeDescription": "آشنایی با تاریخچه و روش تولید سنتی و صنعتی آهک در مجتمع صالح کارگر و پسران و کاربردهای آهک ساختمانی و صنعتی.",
"galleryTitle": "گالری تصاویر",
"galleryDescription": "گالری تصاویر کارخانه و معدن صالح کارگر و پسران؛ مشاهده فضای تولید، محصولات و فعالیت‌های مجموعه.",
"aboutUsTitle": "درباره ما",
"aboutUsDescription": "درباره مجتمع تولیدی صالح کارگر و پسران؛ تولیدکننده سنگ‌های معدنی، پودر آهک و گچ سوپر صالح با شعار کیفیت برتر و بارگیری سریع."
},
"Nav": {
"home": "صفحه اصلی",
"products": "محصولات",
"aboutChalk": "درباره گچ سوپر صالح",
"aboutLime": "درباره آهک",
"gallery": "گالری",
"aboutUs": "درباره ما",
"mainMenu": "منوی اصلی",
"openMenu": "باز کردن منو",
"closeMenu": "بستن منو",
"login": "ورود",
"logoAlt": "صالح کارگر و پسران"
},
"Language": {
"label": "زبان",
"fa": "فارسی",
"ar": "العربية"
},
"Hero": {
"title": "کارخانه صالح کارگر و پسران",
"subtitleEn": "Saleh Kargar Factory",
"imageAlt": "کارخانه صالح کارگر",
"transport": "حمل و نقل",
"demolition": "تخریب",
"limeProduction": "تولید آهک"
},
"Productions": {
"title": "تولیــدات کارخــانه",
"imageAlt": "تولیدات کارخانه",
"items": {
"clay": {
"title": "خاک رس آسیابی (گل کاشی)",
"description": "موارد مصرف این خاک معمولا گچ و خاک، گل مخصوص کاشی سازی و کاشی کاری مورد استفاده می باشد."
},
"mineralPowder": {
"title": "پودر سنگ معدنی",
"description": "این پودر تهیه شده از بهترین نوع سنگ کربنات کلسیم با خلوس بسیار بالا با سفیدی و نرمی مصرف حداقلی سیمان در این مورد توجه مصرف کنندگان این نوع پودر می باشد."
},
"joshaghan": {
"title": "پودر سنگ جوشقان",
"description": "این نوع پودر جهت مصارف صنعتی و سفید کاری و ساختمانی و کنیتکس کاری و کارخانجات چسب سازی و ... مورد استفاده می باشد."
},
"superChalk": {
"title": "سوپر گچ صالح",
"description": "گچ سوپر کارگر سه برابر مستحکم تر از سایر گچ هاست، که سفیدی و درخشندگی و براقیت فوق العاده ای را به نمای داخلی ساختمان می بخشد. این گچ از نظر سفیدی جایگزین رنگ می شود که به طبع آن هزینه را کاهش و سرعت و سهولت اجرا را افزایش می دهد."
},
"buildingLime": {
"title": "آهک ساختمانی و صنعتی",
"description": "این آهک در دو نوع فله و پاکتی ارائه می شود که پاکتی آن( آهک آب زده) در بسته بندی و فله آن جهت امور ساختمانی مورد مصرف می باشد. نوع صنعتی آن با خلوص بسیار بالا جهت کارخانجات چرم سازی و بتون سبک ، هیدراته و ... مورد مصرف قرار میگیرد."
},
"limestone": {
"title": "سنگ آهکی کربنات پتاسیم",
"description": "سنگ آهکی در مصارف ساختمانی از جمله پختن آهک صنعتی و سنتی - آهک - پودر سنگ و سنگ نما استفاده می شود و به دلیل کربنات کلسیم فراوان در این سنگ جهت خوراک طیور نیز استفاده می شود. این سنگ را از معدن به طور کوپ و یا انفجار از کوه استخراج می کنند."
},
"superPowder": {
"title": "سوپر پودر معدنی",
"description": "این پودر با سفیدی زیاد و عدم نیاز به الک و پرداخت پذیری عالی و سهولت کار و ترک نخوردن در نمای داخل و خارج ساختمان و بند کشی کاشی، می تواند جایگزینی برای پودر جوشقان مورد مصرف قرار گیرد."
},
"sand": {
"title": "ماسه بادی",
"description": "این نوع ماسه بادی جهت مصارف باغ داری و باغچه استفاده می گردد."
}
}
},
"Powder": {
"title": "ویژگی پودر سنگ معدنی",
"benefitsTitle": "مزایای کار با پودر سنگ معدنی:",
"usesTitle": "موارد مصرف پودر سنگ معدنی",
"benefitsImageAlt": "مزایای پودر سنگ معدنی",
"usesImageAlt": "موارد مصرف پودر سنگ معدنی",
"benefits": {
"quality": "کیفیت عالی",
"lessCement": "کاهش مصرف سیمان",
"whiteness": "سفیدی",
"easyWork": "سهولت کار توسط استاد کار",
"finish": "پرداخت پذیری عالی و با قابلیت شستشو"
},
"uses": {
"whitework": "1- سفید کاری با سیمان",
"grout": "2- بندکشی کاشی، سرامیک و موزائیک",
"mosaic": "3- موائیک سازی",
"slurry": "4- دوغ آب کاری پشت سنگ های چینی و مرمر"
}
},
"AboutTabs": {
"sampleWork": "نمونه کار",
"factoryView": "نمای کارخانه",
"tabs": {
"work": {
"label": "کار ما",
"title": "نتایج آنالیز نمونه سنگ ها",
"subtitle": "شعار ما :\nکیفیت برتر- بارگیری سریع- جلب رضایت مشتری",
"body": "این مجتمع دارای نمایندگی چندین نوع گچ سمنان و قم و انواع گچ سوپر قم می باشد.",
"cta": "درباره ما بیشتر بدانید ..."
},
"goal": {
"label": "هدف ما",
"title": "بهترین کیفیت آهک را از ما بخواهید...",
"subtitle": "این مجتمع تولید مفتخر است که تمامی مصولات خود را به صورت بسته بندی و فله با کیفیت عالی به طور مستقیم در دسترس مشتریان عزیز خود قرار داده ودارای نمایندگی چندین نوع گچ سمنان و قم و انواع گچ سوپر قم می باشد.",
"body": "هدف ما رضایت مشتری است و تولید کالایی با کیفیت",
"cta": "درباره آهک ..."
},
"services": {
"label": "خدمات ما",
"title": "تولیداتی مرغوب و با کیفیت ...",
"subtitle": "تولیدی صالح کارگر و پسران مفتخر است که تمامی محصولات خود را از بهترین نوع سنگهای معدنی موجود در کشور و با کیفیت عالی د ردسترس مشتریان محترم خود قرار می دهد.",
"body": "شعار ما:\nکیفیت برتر\nبارگیری سریع\nجلب رضایت مشتری",
"cta": "بیشتر بدانید ..."
}
}
},
"Carousel": {
"title": "محصولات کارخانه",
"prev": "قبلی",
"next": "بعدی",
"items": {
"aryanClay": "خاک رس آریایی",
"ore": "سنگ معدن",
"superPowder": "سوپر پودر معدنی",
"mineralPowder": "پودر سنگ معدنی",
"joshaghan": "پودر سنگ جوشقان",
"superChalk": "سوپر گچ صالح"
}
},
"Location": {
"title": "مــوقــعــیــت مـــــا",
"heading": "مجتمع تولیدی کارخانجات سنک کوبی و آهک پزی صالح",
"subtitle": "( صالح کارگر و پسران)",
"coverage": "پخش در سرتاسر ایران",
"mapAlt": "موقعیت مجتمع"
},
"Footer": {
"brand": "سایــــت معــــــدن",
"aboutTitle": "درباره ما",
"aboutText": "تولید انواع سنگ معدنی و پودر آهک",
"addressTitle": "آدرس ما",
"address": "قم - جاده اراک - کیلومتر 8 - دوربرگردان مارال - بعد از بیمارستان امام رضا- کوچه دوم - داخل کوچه ( ریخته گری ها)",
"noteFactory": "مجتمع تولید کارخانجات سنگ کوبی و آهک پزی صالح",
"noteSlogan": "شعارما: کیفیت برتر- بارگیری سریع- جلب رضایت مشتری است",
"contactTitle": "تماس با ما",
"accounting": "حسابداری",
"sales": "فروش",
"loading": "بارگیری",
"copyright": "کارخانه صالح کارگر و پسران"
},
"Products": {
"pageTitle": "محصولات",
"detailsTitle": "جزئیات محصول",
"backToProducts": "بازگشت به محصولات",
"currency": "تومان",
"notFound": "محصول یافت نشد",
"items": {
"super-chalk": {
"title": "سوپر گچ صالح",
"description": "این گچ سه برابر مستحکم تر از سایر گچ هاست. سوپر گچ صالح به عنوان یک لایه نازک به ضخامت 4-3 میلی متر روی لایه زیرین گچ کاری (گچ سفید کاری و ساختمانی) اجرا می شود که سفیدی و درخشندگی و براقیت فوق العاده ای را به نمای داخلی ساختمان می بخشد این گچ از نظر سفیدی جایگزین رنگ می شود که به طبع، هزینه را کاهش و سرعت و سهولت اجرا را افزایش می دهد."
}
}
},
"AboutChalkPage": {
"title": "درباره سوپر گچ صالح",
"sections": {
"history": {
"title": "تاریخچـه تولیـد گــچ",
"body": "گَچ‌ کلسیم سولفات آبدار طبیعی است و در چندین فرم بلوری یافت می‌شود که در ذخایر پوسته جامد کره زمین به فرم قشرهای نسبتاً ضخیم و کلفت یافت می‌شود که آن را از دل زمین استخراج می‌کنند و مورد به‌کارگیری قرار می‌دهند. گچ یکی از قدیمی‌ترین مصالح ساختمانی مورد استفاده در دنیا می‌باشد که در قرون گذشته با روش‌های متفاوتی تولید و استفاده می‌شده‌ است. گچ را پس از استخراج از معدن مانند آهک به کوره می‌برند و تا دمای نزدیک به ۱۸۰ درجه سانتی‌گراد گرما می‌دهند تا شماری از مولکول‌های آب تبلورش را از دست بدهند و به فرم گچ قابل بکارگیری به عنوان مصالح ساختمانی و قالب گیری درآید. معمولاً گچ را با آسیاب های مخصوص به صورت پودر درمی‌آورند و در کیسه‌های گچ یا به صورت فله به فروش می‌رسد. پودرهای گچ مرغوب باید کوچکتر از ۰٫۱۵ میلی‌مترباشد."
},
"method": {
"title": "روش تولیـد گــچ",
"body": "خلوص سنگ گچ بر پایه درصد کانی ژیپس در آن تعریف می‌شود. بر پایه انجمن استاندارد مصالح آمریکا (ASTM) دست‌ کم خلوص مورد نیاز برای سنگ گچ در مواد صنعتی ۷۰ درصد ژیپس است در صورتی که بیش‌تر سنگ گچ‌های تجارتی و بازرگانی دارای ۷۵ تا ۹۰ درصدخلوص می‌باشند. نا خالصی‌های موجود درسنگ گچ بیش‌تر شیل، رس‌ها و کربنات کلسیم است و گاهی بازمانده کنش‌ها و فعالیت‌های حیاتی نیز در آن دیده می‌شود.\n\nرنگ گچ به فرم طبیعی سفید بوده و ممکن است به دلیل ناخالصی‌های مواد آلی رس و اکسید آهن به رنگ‌های خاکستری، خاکستری مایل به آبی، صورتی یا زرد دیده شود. سنگ گچ دارای سیستم تبلور منوکلینیک، وزن مخصوص ۲/۲ و سختی ۲ می‌باشد. ژیپس مورد بکارگیری با سنگ گچ به فرم توده‌ای بلوری‌ شده که به فرم دانه‌های ریز و درشت است؛ که در اسید کلریدریک و آب گرم به فرم محلول در می‌آید. سنگ گچ خالص دارای ۹/۲۰ درصد آب ترکیبی و ۶/۶۴ درصد SO3 و ۵/۳۲ درصد CaO است.\n\nفرمول تهیه گچ : 2CaSO4.4H2O → 2CaSO4 + H2O 3H2O (در اثر حرارت تبخیر می‌شود)"
},
"strength": {
"title": "مقاومت گچ",
"body": "گچ مقاومت نسبتا خوبی دارد و حداکثر تنش فشاری قابل تحمل آن حدود ۳۰ کیلوگرم بر سانتیمتر مربع است، در کشش البته گچ ضعیفتر عمل کرده و تنش کششی حداکثر ۵ کیلوگرم بر سانتیمتر مربع را تحمل مینماید؛ توجه داشته باشید که این مقاومت برای گچ خالص است و اگر گچ به صورت ناخالص (گچ و خاک) بکار رود، مقاومت کاهش چشم گیری می یابد. میزان آب مصرفی به شدت در مقاومت گچ موثر است. مقاومت گچ در برابر آتش سوزی: گچ در مقابل سوانح آتش سوزی مقاومت کرده و می تواند به عنوان یک لایه عایق در برابر فولاد عمل نماید."
},
"pros": {
"title": "مــزایـای گـــچ",
"body": "ارزانی گچ: گچ به دلیل ارزانی و در دسترس بودن، از جمله مصالحی است که همگان با آن کار می کنند. شکل پذیری: گچ شکل پذیری فوق العاده ای دارد و این خاصیت باعث می شود که در بسیاری از صنعت ها مانند چینی سازی، به عنوان قالب مورد استفاده قرار گیرد. اکوستیک بودن یا خاصیت جذب صدا در گچ: گچ می تواند حدود تقریبا ۷۰ درصد امواج صوتی را جذب نماید. سفید بودن: رنگ سفید گچ باعث می شود که در فضای داخلی ساختمان جلوه فوق العاده ای به فضا ببخشد. قابلیت حجیم شدن: گچ در هنگام گیرش افزایش حجم پیدا می کند و منافذ را پر می کند."
},
"cons": {
"title": "معـــــایب گـــچ",
"body": "گچ کثیفی ها را زود به خود می گیرد. مشکل دیگر گچ این است که در مقابل رطوبت عملکردی بسیار ضعیف از خود نشان می دهد و اگر آب روی آن بریزد و رطوبت ادامه یابد، ضایعه طبله در گچ بروز می کند. این مشکل باعث شده است استفاده از گچ در مناطقی که از لحاظ رطوبتی غنی می باشند، مانند شمال ایران به مراتب کاهش یافته و از مصالح جایگزین آهک و سیمان سفید، برای سفیدکاری استفاده شود."
},
"super": {
"title": "گــــچ سوپــــر کارگـــــر",
"body": "گچ سوپر کارگر سه برابر مستحکم تر از سایر گچ هاست. سوپر گچ کارگر به عنوان یک لایه نازک به ضخامت ۳-۴ میلیمتر روی لایه زیرین گچ کاری (گچ سفید کاری و ساختمانی) اجرا می شود که سفیدی و درخشندگی و براقیت فوق العاده ای را به نمای داخلی ساختمان می بخشد این گچ از نظر سفیدی جایگزین رنگ می شود که به طبع آن هزینه را کاهش و سرعت و سهولت اجرا را افزایش می دهد. قابل شستشو: گچ سوپر کارگر میکرونیزه و قابل شستشو می باشد. پرداخت پذیری عالی: این گچ با پرداخت پذیری عالی که دارد باعث می شود سطحی بسیار سیقلی و عاری از هر گونه پستی و بلندی ایجاد شود."
}
}
},
"AboutLimePage": {
"title": "درباره آهک",
"sections": {
"history": {
"title": "تاریخچـــه تولیـــد آهــــک",
"body": "عموما مردم از آهک و نوع و شیوه تولید آن چیزی نمی دانند. تولید آهک به دو روش سنتی و صنعتی تولید می گردد. روش سنتی تولید آهک هزاران سال است که توسط بشر انجام می شود. امروزه نیز با وجود ابداع روش های صنعتی همچنان از روش های سنتی گذشتگان برای تولید آهک استفاده می گردد، زیرا هم کیفیت مناسبی دارد و هم برای کارگاه های کوچک تولید آهک روش خوبی محسوب می شود. فرآوری آهک همیشه با پخت آن همراه است و برای این منظور نیاز به کوره آهک پزی است."
},
"traditional": {
"title": "روش تولیـد سنتـی آهـک",
"body": "در روش سنتی معمولا محل کارگاه در محل معدن آهک انتخاب می شود برای این منظور یک حفره در زمین ایجاد کرده و درون آن به صورت لایه ای سنگ آهک می چینند. بدین ترتیب زمین نقش کوره در روش سنتی تولید آهک ایفا می کند. این کوره های آهک پزی به کوره آهک چاهی یا تنوری شهرت دارند. در ادامه کوره را از پایین روشن کرده و روی آن را با گل آهک مهر می کنند. این روش تولید آهک زنده (پخته) سنتی است. همچنین در صورتی که هدف تولید آهک شکفته باشد در حین پخت روی آهک را مرطوب می کنند تا آهک هیدراته شود. در این نوع پخت خلوص آهک به درصدی بالای ۹۴٪ می رسد."
},
"difference": {
"title": "تفاوت آهـک سنتـی و صنعتـی",
"body": "البته پخت آهک در روش سنتی زمان بیشتر و حرارت کمتری نسبت به حالت صنعتی دارد. نمی توان گفت که آهک سنتی از نظر کیفیت بهتر است یا آهک صنعتی زیرا هریک دارای کاربردهای مخصوص به خود بوده و هر صنعتی ترجیح می دهد از یکی از این دو نوع محصول استفاده نماید. تفاوت اصلی در تولید سنتی و صنعتی آهک در کوره های آن می باشد. کوره سنتی در داخل زمین به صورت تنور بوده و کوره آهک صنعتی به شکل دوار یا روتاری و از جنس آلیاژ خاصی می باشد."
},
"uses": {
"title": "کاربردهـای آهـک سنتــی",
"body": "آهک سنتی دیر واکنش است و درصد خلوص بالاتری نسبت به صنعتی دارد به همین دلیل در بخش ساختمان، ضدعفونی در پرورش دام و طیور، دفن زباله، تولید آهک هیدراته و تولید آجرهای اتو کلاو شده که از نظر سبک سازی ساختمان بسیار موثر است مورد استفاده قرار می گیرد."
}
}
},
"AboutUsPage": {
"title": "درباره ما",
"imageAlt": "مجتمع تولیدی صالح کارگر و پسران",
"p1": "مجتمع تولیدی صالح کارگر و پسران مفتخر است که تمامی محصولات خود را از بهترین نوع سنگهای معدنی موجود در کشور و با کیفیت عالی د ردسترس مشتریان محترم خود قرار می دهد.",
"p2": "این مجتمع تولید مفتخر است که تمامی مصولات خود را به صورت بسته بندی و فله با کیفیت عالی به طور مستقیم در دسترس مشتریان عزیز خود قرار داده ودارای نمایندگی چندین نوع گچ سمنان و تولید کننده گچ سوپر صالح قم می باشد.",
"p3": "شعار ما: کیفیت برتر بارگیری سریع جلب رضایت مشتری"
},
"GalleryPage": {
"title": "گالری تصاویر",
"itemAlt": "گالری تصاویر {n}"
},
"Common": {
"home": "خانه",
"products": "محصولات"
}
}
+9 -2
View File
@@ -1,7 +1,14 @@
import type { NextConfig } from "next";
import createNextIntlPlugin from "next-intl/plugin";
const withNextIntl = createNextIntlPlugin("./src/i18n/request.ts");
const nextConfig: NextConfig = {
/* config options here */
// Leaner production runtime: deploy uses .next/standalone and drops node_modules.
output: "standalone",
images: {
unoptimized: false,
},
};
export default nextConfig;
export default withNextIntl(nextConfig);
+674 -3
View File
@@ -9,6 +9,7 @@
"version": "0.1.0",
"dependencies": {
"next": "16.3.0",
"next-intl": "^4.13.6",
"react": "19.2.8",
"react-dom": "19.2.8"
},
@@ -453,6 +454,36 @@
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
},
"node_modules/@formatjs/fast-memoize": {
"version": "3.1.7",
"resolved": "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-3.1.7.tgz",
"integrity": "sha512-zXfhLpvA6T7+efdt9JLbBwZ00tT7NsBMDVnDu8rpHeNNv8KfRZAMo2gkG0k9lK/Nzc//3kJ9pImsfuJxk3KhUA==",
"license": "MIT"
},
"node_modules/@formatjs/icu-messageformat-parser": {
"version": "3.5.16",
"resolved": "https://registry.npmjs.org/@formatjs/icu-messageformat-parser/-/icu-messageformat-parser-3.5.16.tgz",
"integrity": "sha512-kl6b/4D56gjGZi4ZewSmvXbalHwjOUI5ogEHPZqw42goeXTTrL7/yuPzvdrvr0QigDtvaOeb+UeMf62jks43Yg==",
"license": "MIT",
"dependencies": {
"@formatjs/icu-skeleton-parser": "2.1.11"
}
},
"node_modules/@formatjs/icu-skeleton-parser": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/@formatjs/icu-skeleton-parser/-/icu-skeleton-parser-2.1.11.tgz",
"integrity": "sha512-j8cUmOJzVgkHuS0QiQ6ga76UIoLOFSAMWhs7aZJztH3aAdCOAE6vpC8KVvFB4cU10ON0y2/5oOVmPJ43s2lTwA==",
"license": "MIT"
},
"node_modules/@formatjs/intl-localematcher": {
"version": "0.8.13",
"resolved": "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.8.13.tgz",
"integrity": "sha512-kHEAFOkeJSPNi7c5PaKaRjxcBrJwzzt81ifUu+8uve1EDW/VJl83KsxmqgqNZLzcFEhSliZGvx3+pk/RH0IOmg==",
"license": "MIT",
"dependencies": {
"@formatjs/fast-memoize": "3.1.7"
}
},
"node_modules/@humanfs/core": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
@@ -1317,6 +1348,292 @@
"node": ">=12.4.0"
}
},
"node_modules/@parcel/watcher": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.6.0.tgz",
"integrity": "sha512-7FNeNl8NCE7aINx7WXiKQrPYZWC/hvrTsmk6zmxbI7LTXE7hVek/n8AfVgpe2y82zl3w0HvCHN0bVKMBoJcC0w==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
"detect-libc": "^2.0.3",
"is-glob": "^4.0.3",
"node-addon-api": "^7.0.0",
"picomatch": "^4.0.4"
},
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
},
"optionalDependencies": {
"@parcel/watcher-android-arm64": "2.6.0",
"@parcel/watcher-darwin-arm64": "2.6.0",
"@parcel/watcher-darwin-x64": "2.6.0",
"@parcel/watcher-freebsd-x64": "2.6.0",
"@parcel/watcher-linux-arm-glibc": "2.6.0",
"@parcel/watcher-linux-arm-musl": "2.6.0",
"@parcel/watcher-linux-arm64-glibc": "2.6.0",
"@parcel/watcher-linux-arm64-musl": "2.6.0",
"@parcel/watcher-linux-x64-glibc": "2.6.0",
"@parcel/watcher-linux-x64-musl": "2.6.0",
"@parcel/watcher-win32-arm64": "2.6.0",
"@parcel/watcher-win32-x64": "2.6.0"
}
},
"node_modules/@parcel/watcher-android-arm64": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz",
"integrity": "sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"android"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-darwin-arm64": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz",
"integrity": "sha512-Y3QV0gl7Q1zbfueunkWIERICbEojQFCgpyG7YqOGNFLsckXyI1xu9mAIUpKY9QBYzBtSkN8dBPwd3yiAO9ovMw==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-darwin-x64": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz",
"integrity": "sha512-Ohv6OpzhUfKYD7Beb8kDvG0jbIxORCYY1JRdZnaBtnjjkJxgD7ZVL0nw2sCYd0yTMKTvz3nnTnOF3cDifK+kvw==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-freebsd-x64": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz",
"integrity": "sha512-5HmXvDgs8VK+74jF9y9/2FE3/OnlcKmc56tjmSrEuZjpSZOGL+fvAu+HKJBdPs9uwoP2hE6TlSUpXZ/C5jUFmQ==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"freebsd"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm-glibc": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz",
"integrity": "sha512-Ps/hui3A+vMbjdqlqAowK2ZL8+BO8dBjxeWXj6npTBs3jx4wWmbPpaLuqwrQrSqIVMCnpWo238bJ1U37GhQOYg==",
"cpu": [
"arm"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm-musl": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz",
"integrity": "sha512-9c6AUHgHoG+IY88MRIHupztQiQnrbqHYQjkM2btA+Bf/wQnQMuiD0Wfk1EVv3TlNT3x41uU71rn6E4xh/+zvkw==",
"cpu": [
"arm"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm64-glibc": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz",
"integrity": "sha512-yHRqS2owEXe6Hic9z6Mh1ECsCd+ODVOGvZDyciqRd21+v+o+DnXMOrw50DSpIG2sb8GPEaPPmfeCAWKPJdq46g==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-arm64-musl": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz",
"integrity": "sha512-WhB2e/V7rqdHHWZusBSPuy5Ei8S6lSz6FE5TKKQz5h3a0O+C+mhY7vxU9b/stqvMb8beLnPY82ZrFTLKs+SrKA==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-x64-glibc": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz",
"integrity": "sha512-ulGE6x6Oz6iAwg75T8YQSoguBWasniIbX+QWpaYPcCnDOpdWX3k+4xbEYPZVLxOuoJI+svJJPD3sEj8G7lrQ3A==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-linux-x64-musl": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz",
"integrity": "sha512-tkBYKt7YQrjIJWYDnto2YgO8MRkjlMTSNoRHzsXinBqbLdeOM3L32wPZJvIZxqaLMfSlS/4sUjH/6STVP/XDLw==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-arm64": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz",
"integrity": "sha512-gIZAP23jaHjGWasY/TY6yL7NHFClf0Ga7FN+iINvk+KN94rhm94lYZhFsbYFNcA04/onvGD9kKmiJLJB2HbNwQ==",
"cpu": [
"arm64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher-win32-x64": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz",
"integrity": "sha512-cA+/pXV2YkfxlIcXOQ5fSWqAzzPyD78/x5qbK/I0vUkrlYHA8TIz+MXjAbGouguKVSI4bOmkTSJ1/poVSsgt+A==",
"cpu": [
"x64"
],
"license": "MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">= 10.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/parcel"
}
},
"node_modules/@parcel/watcher/node_modules/picomatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz",
"integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==",
"license": "MIT",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/@rtsao/scc": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz",
@@ -1324,6 +1641,210 @@
"dev": true,
"license": "MIT"
},
"node_modules/@schummar/icu-type-parser": {
"version": "1.21.5",
"resolved": "https://registry.npmjs.org/@schummar/icu-type-parser/-/icu-type-parser-1.21.5.tgz",
"integrity": "sha512-bXHSaW5jRTmke9Vd0h5P7BtWZG9Znqb8gSDxZnxaGSJnGwPLDPfS+3g0BKzeWqzgZPsIVZkM7m2tbo18cm5HBw==",
"license": "MIT"
},
"node_modules/@swc/core-darwin-arm64": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.47.tgz",
"integrity": "sha512-GsoMtan3ojGGMGFbl31mmRu5ctZ56re8grGE8mO/OHJ8O+JRkzod02fe7X6ZQ8JvamA3imkEkx/h3u+vsOgPgA==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-darwin-x64": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.47.tgz",
"integrity": "sha512-leTi7Rx3KF4zcC637iqWgk9SoV8VXAD8ppQYXsep63px5A/UftOcxLN1pmr8Z1si/YvX90ompP/rHgpYkgwXWg==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"darwin"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm-gnueabihf": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.47.tgz",
"integrity": "sha512-hBqHuoWKKIsKmDBn9qVeWqj5GWZhtlcczVaqQmNRXsDfq+voR5CxKRfamA367QjJXtceYuliLFfEL8QsskRM2g==",
"cpu": [
"arm"
],
"license": "Apache-2.0",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm64-gnu": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.47.tgz",
"integrity": "sha512-TBxvRz+B4K205TWHHZxWVxkC2RFNP/Mz3PNcECBos5PsKwxjg3QSJzdoebr0VCf0Bfh8HOPldKxAP/8XkFe9gA==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-arm64-musl": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.47.tgz",
"integrity": "sha512-3Yu3Uq/VgytqsPjTMbkPU1ExADytbdWbruJYhA584E9jrpE2Ki+R6VVPoZCeAVk1Cb7QxcRTgblw6bSa6a/R+w==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-ppc64-gnu": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-linux-ppc64-gnu/-/core-linux-ppc64-gnu-1.15.47.tgz",
"integrity": "sha512-wfdMi5IaOaNtmh2/6geRoxIdNfqylUZFdtzTKS655y1axWfIWyx7As74vv0wVdjeCIZ3WmCI9odDd4rUttXOSQ==",
"cpu": [
"ppc64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-s390x-gnu": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-linux-s390x-gnu/-/core-linux-s390x-gnu-1.15.47.tgz",
"integrity": "sha512-3hHYBY0yx8Ez7GMRrkhXHQzMdR5IZA6Wq5Ee4svlgwvSECLpnAJ9+0AimEGUFDvuLwE7nV/2+PYe8+Nm4rvNcQ==",
"cpu": [
"s390x"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-x64-gnu": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.47.tgz",
"integrity": "sha512-TjfhjgP/jGCfFHYC3JQPhJA1HwErbIJ9JfREDc1KNkvY6P0LodCgKVIlQ5deeTbkG7ih3bF5PHJLuLpaZjdRyQ==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-linux-x64-musl": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.47.tgz",
"integrity": "sha512-CQpS8Ge/avfjZd0UEwG/sds83Uu32deQXcV1Jo3jD0mmvQQqtYAjpsDZXugmheeAwmt+YIuoVtVHro8LMYHqsQ==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"linux"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-arm64-msvc": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.47.tgz",
"integrity": "sha512-0W8IKHsUTYiT7G2RqtOoVWk+89yzZikIiDUb/sCK6BmQDBhN91hQSfyUtW12jhEWLzYgcfmisfsZrmZE+84U1A==",
"cpu": [
"arm64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-ia32-msvc": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.47.tgz",
"integrity": "sha512-ZIp49d2Z4/ka2jO9otOg4hDvTdPmp86kVOgS2M5FCPI7eKKZ1W0boxWn+8XeZrfERtFGW0AlMRm4JhlJa7l3NA==",
"cpu": [
"ia32"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/core-win32-x64-msvc": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.47.tgz",
"integrity": "sha512-2h8Iek95vnixkBRCo+H8p09+Q5ll2NgSMFrWTy0iKt7+/t+8/T5mBpiT6c0ZxSS7wcWjwZ9sGZkK70tTSYHdDw==",
"cpu": [
"x64"
],
"license": "Apache-2.0 AND MIT",
"optional": true,
"os": [
"win32"
],
"engines": {
"node": ">=10"
}
},
"node_modules/@swc/counter": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz",
"integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==",
"license": "Apache-2.0"
},
"node_modules/@swc/helpers": {
"version": "0.5.15",
"resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz",
@@ -1333,6 +1854,15 @@
"tslib": "^2.8.0"
}
},
"node_modules/@swc/types": {
"version": "0.1.28",
"resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.28.tgz",
"integrity": "sha512-V6Mnml8v09QALx6K0elJ7o9K/MkVDtW3t6L+7Ou/JcWtb3xwId2AH4FeOceySd2JaO87IMw4+6vSZxLm34LPbw==",
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3"
}
},
"node_modules/@tailwindcss/node": {
"version": "4.3.3",
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz",
@@ -2933,7 +3463,6 @@
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
"devOptional": true,
"license": "Apache-2.0",
"engines": {
"node": ">=8"
@@ -4072,6 +4601,21 @@
"hermes-estree": "0.25.1"
}
},
"node_modules/icu-minify": {
"version": "4.13.6",
"resolved": "https://registry.npmjs.org/icu-minify/-/icu-minify-4.13.6.tgz",
"integrity": "sha512-iYZGCJZ+kX6o7GrxpVe2sOSdW86AvEqh8RQBvWeBd9jqmuABsMc2B6xongACfItLOogyIWH6GuBslNHr79OU8Q==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/amannn"
}
],
"license": "MIT",
"dependencies": {
"@formatjs/icu-messageformat-parser": "^3.4.0"
}
},
"node_modules/ignore": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -4124,6 +4668,16 @@
"node": ">= 0.4"
}
},
"node_modules/intl-messageformat": {
"version": "11.2.13",
"resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-11.2.13.tgz",
"integrity": "sha512-JaPaE6TIX+TAS5XLhDUh41geLw4QfBHX4s5pW8Km+L9fVC8HzB9yOuhbh4EMR/F1+8C6b9qk4763Cv+LdOG1kg==",
"license": "BSD-3-Clause",
"dependencies": {
"@formatjs/fast-memoize": "3.1.7",
"@formatjs/icu-messageformat-parser": "3.5.16"
}
},
"node_modules/is-array-buffer": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz",
@@ -4302,7 +4856,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=0.10.0"
@@ -4348,7 +4901,6 @@
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
@@ -5156,6 +5708,15 @@
"dev": true,
"license": "MIT"
},
"node_modules/negotiator": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
"integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/next": {
"version": "16.3.0",
"resolved": "https://registry.npmjs.org/next/-/next-16.3.0.tgz",
@@ -5209,6 +5770,83 @@
}
}
},
"node_modules/next-intl": {
"version": "4.13.6",
"resolved": "https://registry.npmjs.org/next-intl/-/next-intl-4.13.6.tgz",
"integrity": "sha512-loS6tjWWkr/IP+EV1yXUm9URB54QmZOp4+ZsMZNmeYxY8IZxLvO2esUegnXIDxj5DpK/4BsxwDGfGhlqodpkCQ==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/amannn"
}
],
"license": "MIT",
"dependencies": {
"@formatjs/intl-localematcher": "^0.8.1",
"@parcel/watcher": "^2.4.1",
"@swc/core": "^1.15.2",
"icu-minify": "^4.13.6",
"negotiator": "^1.0.0",
"next-intl-swc-plugin-extractor": "^4.13.6",
"po-parser": "^2.1.1",
"use-intl": "^4.13.6"
},
"peerDependencies": {
"next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0",
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
"node_modules/next-intl-swc-plugin-extractor": {
"version": "4.13.6",
"resolved": "https://registry.npmjs.org/next-intl-swc-plugin-extractor/-/next-intl-swc-plugin-extractor-4.13.6.tgz",
"integrity": "sha512-M2L8jtPEAXj0CPmXbiW66THdr3OnDqA9IsU1hqv3CdxtVow3Bl9eXPdT9Opeji7L4AFrUZ016dJOs+CoTw66OA==",
"license": "MIT"
},
"node_modules/next-intl/node_modules/@swc/core": {
"version": "1.15.47",
"resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.47.tgz",
"integrity": "sha512-FbsO5JcfOjfH38W/rohBRBweJeERsAuIP4f377lmkmxTcq9exjtx4SkRuZY5CdfhR2CBVwDIJegBpJDffwNsOg==",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@swc/counter": "^0.1.3",
"@swc/types": "^0.1.27"
},
"engines": {
"node": ">=10"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/swc"
},
"optionalDependencies": {
"@swc/core-darwin-arm64": "1.15.47",
"@swc/core-darwin-x64": "1.15.47",
"@swc/core-linux-arm-gnueabihf": "1.15.47",
"@swc/core-linux-arm64-gnu": "1.15.47",
"@swc/core-linux-arm64-musl": "1.15.47",
"@swc/core-linux-ppc64-gnu": "1.15.47",
"@swc/core-linux-s390x-gnu": "1.15.47",
"@swc/core-linux-x64-gnu": "1.15.47",
"@swc/core-linux-x64-musl": "1.15.47",
"@swc/core-win32-arm64-msvc": "1.15.47",
"@swc/core-win32-ia32-msvc": "1.15.47",
"@swc/core-win32-x64-msvc": "1.15.47"
},
"peerDependencies": {
"@swc/helpers": ">=0.5.17"
},
"peerDependenciesMeta": {
"@swc/helpers": {
"optional": true
}
}
},
"node_modules/next/node_modules/postcss": {
"version": "8.5.23",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz",
@@ -5237,6 +5875,12 @@
"node": "^10 || ^12 || >=14"
}
},
"node_modules/node-addon-api": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
"integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
"license": "MIT"
},
"node_modules/node-exports-info": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.2.tgz",
@@ -5517,6 +6161,12 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
"node_modules/po-parser": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/po-parser/-/po-parser-2.1.1.tgz",
"integrity": "sha512-ECF4zHLbUItpUgE3OTtLKlPjeBN+fKEczj2zYjDfCGOzicNs0GK3Vg2IoAYwx7LH/XYw43fZQP6xnZ4TkNxSLQ==",
"license": "MIT"
},
"node_modules/possible-typed-array-names": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz",
@@ -6619,6 +7269,27 @@
"punycode": "^2.1.0"
}
},
"node_modules/use-intl": {
"version": "4.13.6",
"resolved": "https://registry.npmjs.org/use-intl/-/use-intl-4.13.6.tgz",
"integrity": "sha512-RLej84qL6PGTDp/PSG3tqRpwr7IvJfOu4Qfv/uyy8CrnYn1oEOQb6osNJb++jZ7FQxqN3aQ5BI7wTIerUgrgMA==",
"funding": [
{
"type": "individual",
"url": "https://github.com/sponsors/amannn"
}
],
"license": "MIT",
"dependencies": {
"@formatjs/fast-memoize": "^3.1.0",
"@schummar/icu-type-parser": "1.21.5",
"icu-minify": "^4.13.6",
"intl-messageformat": "^11.1.0"
},
"peerDependencies": {
"react": "^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0"
}
},
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+1
View File
@@ -10,6 +10,7 @@
},
"dependencies": {
"next": "16.3.0",
"next-intl": "^4.13.6",
"react": "19.2.8",
"react-dom": "19.2.8"
},
+11
View File
@@ -0,0 +1,11 @@
Please make a clone of this website
https://www.salehkargar.ir/
You can make it better anywhere you want - but use exact design
Color palette: like the original website
Lang: fa
Dir: rtl
Use next js
Download image from main website without any change and put in src/images with proper foldering
Build only home page for now
Use the data from main website
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

+1
View File
@@ -0,0 +1 @@
../src/images
+72
View File
@@ -0,0 +1,72 @@
import type { Metadata } from "next";
import Image from "next/image";
import { getTranslations, setRequestLocale } from "next-intl/server";
import PageShell from "@/components/PageShell";
import { buildMetadata } from "@/lib/seo";
const sectionMeta = [
{ key: "history", image: "/images/about-lime/1.jpg" },
{ key: "traditional", image: "/images/about-lime/2.jpg" },
{ key: "difference", image: "/images/about-lime/3.jpg" },
{ key: "uses", image: "/images/products/building-lime.jpg" },
] as const;
type Props = {
params: Promise<{ locale: string }>;
};
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "Meta" });
return buildMetadata({
title: t("aboutLimeTitle"),
description: t("aboutLimeDescription"),
path: `/${locale}/aboutlime`,
locale,
});
}
export default async function AboutLimePage({ params }: Props) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations("AboutLimePage");
return (
<PageShell title={t("title")}>
<section className="section content-page">
<div className="container">
{sectionMeta.map((section, index) => (
<article
key={section.key}
className={`content-block${index % 2 === 1 ? " is-reverse" : ""}`}
>
<div className="content-block-media shadow-box">
<Image
src={section.image}
alt={t(`sections.${section.key}.title`)}
width={700}
height={520}
/>
</div>
<div className="content-block-text">
<h2>{t(`sections.${section.key}.title`)}</h2>
<Image
src="/images/infoitems/line.png"
alt=""
width={151}
height={5}
className="section-line"
/>
{t(`sections.${section.key}.body`)
.split("\n")
.map((para) =>
para.trim() ? <p key={para.slice(0, 24)}>{para}</p> : null,
)}
</div>
</article>
))}
</div>
</section>
</PageShell>
);
}
+74
View File
@@ -0,0 +1,74 @@
import type { Metadata } from "next";
import Image from "next/image";
import { getTranslations, setRequestLocale } from "next-intl/server";
import PageShell from "@/components/PageShell";
import { buildMetadata } from "@/lib/seo";
const sectionMeta = [
{ key: "history", image: "/images/about-chalk/1.jpg" },
{ key: "method", image: "/images/about-chalk/2.jpg" },
{ key: "strength", image: "/images/about-chalk/3.jpg" },
{ key: "pros", image: "/images/about-chalk/4.jpg" },
{ key: "cons", image: "/images/about-chalk/1.jpg" },
{ key: "super", image: "/images/products/super-chalk.jpg" },
] as const;
type Props = {
params: Promise<{ locale: string }>;
};
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "Meta" });
return buildMetadata({
title: t("aboutChalkTitle"),
description: t("aboutChalkDescription"),
path: `/${locale}/aboutsuperchalk`,
locale,
});
}
export default async function AboutChalkPage({ params }: Props) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations("AboutChalkPage");
return (
<PageShell title={t("title")}>
<section className="section content-page">
<div className="container">
{sectionMeta.map((section, index) => (
<article
key={section.key}
className={`content-block${index % 2 === 1 ? " is-reverse" : ""}`}
>
<div className="content-block-media shadow-box">
<Image
src={section.image}
alt={t(`sections.${section.key}.title`)}
width={700}
height={520}
/>
</div>
<div className="content-block-text">
<h2>{t(`sections.${section.key}.title`)}</h2>
<Image
src="/images/infoitems/line.png"
alt=""
width={151}
height={5}
className="section-line"
/>
{t(`sections.${section.key}.body`)
.split("\n")
.map((para) =>
para.trim() ? <p key={para.slice(0, 24)}>{para}</p> : null,
)}
</div>
</article>
))}
</div>
</section>
</PageShell>
);
}
+65
View File
@@ -0,0 +1,65 @@
import type { Metadata } from "next";
import Image from "next/image";
import { getTranslations, setRequestLocale } from "next-intl/server";
import PageShell from "@/components/PageShell";
import { buildMetadata } from "@/lib/seo";
type Props = {
params: Promise<{ locale: string }>;
};
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "Meta" });
return buildMetadata({
title: t("aboutUsTitle"),
description: t("aboutUsDescription"),
path: `/${locale}/aboutus`,
locale,
});
}
export default async function AboutUsPage({ params }: Props) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations("AboutUsPage");
return (
<PageShell title={t("title")}>
<section className="section about-us-page">
<div className="container about-us-grid">
<div className="about-us-media shadow-box">
<Image
src="/images/about-us/1.jpg"
alt={t("imageAlt")}
width={900}
height={600}
priority
sizes="(max-width: 1024px) 100vw, 55vw"
/>
</div>
<div className="about-us-copy">
<Image
src="/images/about-us/2.png"
alt=""
width={90}
height={90}
className="about-us-icon"
/>
<h2>{t("title")}</h2>
<Image
src="/images/infoitems/line.png"
alt=""
width={151}
height={5}
className="section-line"
/>
<p>{t("p1")}</p>
<p>{t("p2")}</p>
<p>{t("p3")}</p>
</div>
</div>
</section>
</PageShell>
);
}
+49
View File
@@ -0,0 +1,49 @@
import type { Metadata } from "next";
import Image from "next/image";
import { getTranslations, setRequestLocale } from "next-intl/server";
import PageShell from "@/components/PageShell";
import { galleryImages } from "@/data/pages";
import { buildMetadata } from "@/lib/seo";
type Props = {
params: Promise<{ locale: string }>;
};
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "Meta" });
return buildMetadata({
title: t("galleryTitle"),
description: t("galleryDescription"),
path: `/${locale}/gallery`,
locale,
});
}
export default async function GalleryPage({ params }: Props) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations("GalleryPage");
return (
<PageShell title={t("title")}>
<section className="section">
<div className="container">
<div className="gallery-grid">
{galleryImages.map((item) => (
<figure key={item.id} className="gallery-item">
<Image
src={item.src}
alt={t("itemAlt", { n: item.id })}
width={700}
height={500}
sizes="(max-width: 768px) 100vw, (max-width: 1024px) 50vw, 33vw"
/>
</figure>
))}
</div>
</div>
</section>
</PageShell>
);
}
+112
View File
@@ -0,0 +1,112 @@
import type { Metadata, Viewport } from "next";
import { hasLocale, NextIntlClientProvider } from "next-intl";
import { getMessages, getTranslations, setRequestLocale } from "next-intl/server";
import { Vazirmatn } from "next/font/google";
import { notFound } from "next/navigation";
import JsonLd, {
localBusinessJsonLd,
organizationJsonLd,
} from "@/components/JsonLd";
import { routing } from "@/i18n/routing";
import { siteConfig } from "@/data/seo";
import "../globals.css";
const vazirmatn = Vazirmatn({
subsets: ["arabic"],
weight: ["300", "400", "500", "700", "800"],
variable: "--font-vazirmatn",
display: "swap",
});
export const viewport: Viewport = {
width: "device-width",
initialScale: 1,
themeColor: "#000000",
};
type Props = {
children: React.ReactNode;
params: Promise<{ locale: string }>;
};
export function generateStaticParams() {
return routing.locales.map((locale) => ({ locale }));
}
export async function generateMetadata({
params,
}: {
params: Promise<{ locale: string }>;
}): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "Meta" });
return {
metadataBase: new URL(siteConfig.url),
title: {
default: t("siteName"),
template: `%s | ${t("siteName")}`,
},
description: t("homeDescription"),
applicationName: siteConfig.shortName,
icons: {
icon: "/favicon.png",
apple: "/favicon.png",
},
openGraph: {
type: "website",
locale: locale === "ar" ? "ar_SA" : "fa_IR",
url: `${siteConfig.url}/${locale}`,
siteName: t("siteName"),
title: t("siteName"),
description: t("homeDescription"),
images: [
{
url: siteConfig.ogImage,
width: 1920,
height: 680,
alt: t("siteName"),
},
],
},
twitter: {
card: "summary_large_image",
title: t("siteName"),
description: t("homeDescription"),
images: [siteConfig.ogImage],
},
alternates: {
canonical: `/${locale}`,
languages: {
"fa-IR": "/fa",
"ar": "/ar",
"x-default": "/fa",
},
},
robots: {
index: true,
follow: true,
},
};
}
export default async function LocaleLayout({ children, params }: Props) {
const { locale } = await params;
if (!hasLocale(routing.locales, locale)) {
notFound();
}
setRequestLocale(locale);
const messages = await getMessages();
return (
<html lang={locale} dir="rtl" className={`${vazirmatn.variable} h-full`}>
<body className={`${vazirmatn.className} min-h-full antialiased`}>
<NextIntlClientProvider messages={messages}>
<JsonLd data={[organizationJsonLd(), localBusinessJsonLd()]} />
{children}
</NextIntlClientProvider>
</body>
</html>
);
}
+47
View File
@@ -0,0 +1,47 @@
import type { Metadata } from "next";
import { getTranslations, setRequestLocale } from "next-intl/server";
import AboutTabs from "@/components/AboutTabs";
import Footer from "@/components/Footer";
import Header from "@/components/Header";
import Hero from "@/components/Hero";
import Location from "@/components/Location";
import PowderFeatures from "@/components/PowderFeatures";
import Productions from "@/components/Productions";
import ProductsCarousel from "@/components/ProductsCarousel";
import { buildMetadata } from "@/lib/seo";
type Props = {
params: Promise<{ locale: string }>;
};
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "Meta" });
return buildMetadata({
title: t("homeTitle"),
description: t("homeDescription"),
path: `/${locale}`,
locale,
});
}
export default async function HomePage({ params }: Props) {
const { locale } = await params;
setRequestLocale(locale);
return (
<>
<Header />
<main>
<Hero />
<Productions />
<PowderFeatures />
<AboutTabs />
<ProductsCarousel />
<Location />
</main>
<Footer />
</>
);
}
+65
View File
@@ -0,0 +1,65 @@
import type { Metadata } from "next";
import { getTranslations, setRequestLocale } from "next-intl/server";
import { notFound } from "next/navigation";
import JsonLd, { breadcrumbJsonLd, productJsonLd } from "@/components/JsonLd";
import PageShell from "@/components/PageShell";
import ProductDetail from "@/components/ProductDetail";
import { getProductBySlug, getProducts } from "@/data/products";
import { buildMetadata } from "@/lib/seo";
type Props = {
params: Promise<{ locale: string; slug: string }>;
};
export async function generateStaticParams() {
return getProducts().map((product) => ({ slug: product.slug }));
}
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale, slug } = await params;
const product = getProductBySlug(slug);
const t = await getTranslations({ locale, namespace: "Products" });
if (!product) return { title: t("notFound") };
return buildMetadata({
title: t(`items.${product.slug}.title`),
description: t(`items.${product.slug}.description`),
path: `/${locale}/products/${product.slug}`,
image: product.image,
locale,
});
}
export default async function ProductDetailPage({ params }: Props) {
const { locale, slug } = await params;
setRequestLocale(locale);
const product = getProductBySlug(slug);
const t = await getTranslations("Products");
const tCommon = await getTranslations("Common");
if (!product) notFound();
const title = t(`items.${product.slug}.title`);
return (
<PageShell title={t("detailsTitle")}>
<JsonLd
data={[
productJsonLd({
...product,
title,
description: t(`items.${product.slug}.description`),
}),
breadcrumbJsonLd([
{ name: tCommon("home"), path: `/${locale}` },
{ name: tCommon("products"), path: `/${locale}/products` },
{
name: title,
path: `/${locale}/products/${product.slug}`,
},
]),
]}
/>
<ProductDetail product={product} />
</PageShell>
);
}
+38
View File
@@ -0,0 +1,38 @@
import type { Metadata } from "next";
import { getTranslations, setRequestLocale } from "next-intl/server";
import PageShell from "@/components/PageShell";
import ProductGrid from "@/components/ProductGrid";
import { getProducts } from "@/data/products";
import { buildMetadata } from "@/lib/seo";
type Props = {
params: Promise<{ locale: string }>;
};
export async function generateMetadata({ params }: Props): Promise<Metadata> {
const { locale } = await params;
const t = await getTranslations({ locale, namespace: "Meta" });
return buildMetadata({
title: t("productsTitle"),
description: t("productsDescription"),
path: `/${locale}/products`,
locale,
});
}
export default async function ProductsPage({ params }: Props) {
const { locale } = await params;
setRequestLocale(locale);
const t = await getTranslations("Products");
const products = getProducts();
return (
<PageShell title={t("pageTitle")}>
<section className="section">
<div className="container">
<ProductGrid products={products} />
</div>
</section>
</PageShell>
);
}
+1348 -15
View File
File diff suppressed because it is too large Load Diff
+5 -25
View File
@@ -1,29 +1,9 @@
import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import "./globals.css";
import type { ReactNode } from "react";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "Create Next App",
description: "Generated by create next app",
type Props = {
children: ReactNode;
};
export default function RootLayout({ children }: LayoutProps<"/">) {
return (
<html
lang="en"
className={`${geistSans.variable} ${geistMono.variable} h-full antialiased`}
>
<body className="min-h-full flex flex-col">{children}</body>
</html>
);
export default function RootLayout({ children }: Props) {
return children;
}
-69
View File
@@ -1,69 +0,0 @@
import Image from "next/image";
export default function Home() {
return (
<div className="flex flex-col flex-1 items-center justify-center bg-zinc-50 font-sans dark:bg-black">
<main className="flex flex-1 w-full max-w-3xl flex-col items-center justify-between py-32 px-16 bg-white dark:bg-black sm:items-start">
<Image
className="dark:invert h-5 w-[100px]"
src="/next.svg"
alt="Next.js logo"
width={100}
height={20}
priority
/>
<div className="flex flex-col items-center gap-6 text-center sm:items-start sm:text-left">
<h1 className="max-w-xs text-3xl font-semibold leading-10 tracking-tight text-black dark:text-zinc-50">
To get started, edit the{" "}
<code className="rounded bg-black/[.06] px-1.5 py-0.5 font-mono text-[0.9em] dark:bg-white/[.08]">
page.tsx
</code>{" "}
file.
</h1>
<p className="max-w-md text-lg leading-8 text-zinc-600 dark:text-zinc-400">
Looking for a starting point or more instructions? Head over to{" "}
<a
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
className="font-medium text-zinc-950 dark:text-zinc-50"
>
Templates
</a>{" "}
or the{" "}
<a
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
className="font-medium text-zinc-950 dark:text-zinc-50"
>
Learning
</a>{" "}
center.
</p>
</div>
<div className="flex flex-col gap-4 text-base font-medium sm:flex-row">
<a
className="flex h-12 w-full items-center justify-center gap-2 rounded-full bg-foreground px-5 text-background transition-colors hover:bg-[#383838] dark:hover:bg-[#ccc] md:w-[158px]"
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
<Image
className="dark:invert h-[14px] w-4"
src="/vercel.svg"
alt="Vercel logomark"
width={16}
height={14}
/>
Deploy Now
</a>
<a
className="flex h-12 w-full items-center justify-center rounded-full border border-solid border-black/[.08] px-5 transition-colors hover:border-transparent hover:bg-black/[.04] dark:border-white/[.145] dark:hover:bg-[#1a1a1a] md:w-[158px]"
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template-tw&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Documentation
</a>
</div>
</main>
</div>
);
}
+13
View File
@@ -0,0 +1,13 @@
import type { MetadataRoute } from "next";
import { siteConfig } from "@/data/seo";
export default function robots(): MetadataRoute.Robots {
return {
rules: {
userAgent: "*",
allow: "/",
},
sitemap: `${siteConfig.url}/sitemap.xml`,
host: siteConfig.url,
};
}
+43
View File
@@ -0,0 +1,43 @@
import type { MetadataRoute } from "next";
import { siteConfig } from "@/data/seo";
import { getProducts } from "@/data/products";
import { routing } from "@/i18n/routing";
export default function sitemap(): MetadataRoute.Sitemap {
const now = new Date();
const staticPaths = [
"",
"/products",
"/aboutsuperchalk",
"/aboutlime",
"/gallery",
"/aboutus",
];
const productPaths = getProducts().map(
(product) => `/products/${product.slug}`,
);
const entries: MetadataRoute.Sitemap = [];
for (const locale of routing.locales) {
for (const path of [...staticPaths, ...productPaths]) {
entries.push({
url: `${siteConfig.url}/${locale}${path}`,
lastModified: now,
changeFrequency: path.startsWith("/products") ? "weekly" : "monthly",
priority: path === "" ? 1 : path === "/products" ? 0.9 : 0.8,
alternates: {
languages: Object.fromEntries(
routing.locales.map((item) => [
item,
`${siteConfig.url}/${item}${path}`,
]),
),
},
});
}
}
return entries;
}
+89
View File
@@ -0,0 +1,89 @@
"use client";
import Image from "next/image";
import { useTranslations } from "next-intl";
import { useState } from "react";
import { Link } from "@/i18n/navigation";
const tabIds = ["work", "goal", "services"] as const;
export default function AboutTabs() {
const t = useTranslations("AboutTabs");
const [active, setActive] = useState(0);
const activeId = tabIds[active];
return (
<section className="section about-tabs">
<div className="container">
<div className="about-layout">
<div className="about-media">
<Link href="/" className="zoom-box">
<Image
src="/images/featurebox/2.jpg"
alt={t("sampleWork")}
width={400}
height={500}
/>
<span className="zoom-label">{t("sampleWork")}</span>
</Link>
<div className="about-side-photo">
<Image
src="/images/featurebox/1.jpg"
alt={t("factoryView")}
width={400}
height={500}
/>
</div>
</div>
<div className="about-panel">
<div className="tabs-nav" role="tablist">
{tabIds.map((id, index) => (
<button
key={id}
type="button"
role="tab"
aria-selected={active === index}
className={active === index ? "is-active" : ""}
onClick={() => setActive(index)}
>
{t(`tabs.${id}.label`)}
</button>
))}
</div>
<div className="tabs-panel" role="tabpanel">
<h2>{t(`tabs.${activeId}.title`)}</h2>
<h3 className="tabs-subtitle">
{t(`tabs.${activeId}.subtitle`)
.split("\n")
.map((line) => (
<span key={line}>
{line}
<br />
</span>
))}
</h3>
<p className="tabs-body">
{t(`tabs.${activeId}.body`)
.split("\n")
.map((line) => (
<span key={line}>
{line}
<br />
</span>
))}
</p>
<Link
href={activeId === "goal" ? "/aboutlime" : "/aboutus"}
className="btn-theme"
>
{t(`tabs.${activeId}.cta`)}
</Link>
</div>
</div>
</div>
</div>
</section>
);
}
+68
View File
@@ -0,0 +1,68 @@
import { getTranslations } from "next-intl/server";
const phones = [
{ key: "accounting", href: "tel:+982538700105", text: "8700105-0253" },
{ key: "sales", href: "tel:+982538700061", text: "4-8700061-0253" },
{ key: "loading", href: "tel:+982538700074", text: "8700074-8700683-0253" },
] as const;
export default async function Footer() {
const t = await getTranslations("Footer");
return (
<footer className="site-footer">
<div className="footer-action">
<div className="container">
<h3>{t("brand")}</h3>
</div>
</div>
<div className="footer-widgets">
<div className="container footer-grid">
<aside>
<h4>{t("aboutTitle")}</h4>
<p>{t("aboutText")}</p>
</aside>
<aside>
<h4>{t("addressTitle")}</h4>
<address className="footer-address">{t("address")}</address>
<ul>
<li>
<span className="bullet" aria-hidden />
{t("noteFactory")}
</li>
<li>
<span className="bullet" aria-hidden />
{t("noteSlogan")}
</li>
</ul>
</aside>
<aside>
<h4>{t("contactTitle")}</h4>
<ul>
{phones.map((item) => (
<li key={item.key}>
<span className="bullet" aria-hidden />
<span>
{t(item.key)} :{" "}
<a href={item.href} className="footer-phone">
{item.text}
</a>
</span>
</li>
))}
</ul>
</aside>
</div>
</div>
<div className="footer-copy">
<div className="container">
<p>{t("copyright")}</p>
</div>
</div>
</footer>
);
}
+216
View File
@@ -0,0 +1,216 @@
"use client";
import Image from "next/image";
import { useLocale, useTranslations } from "next-intl";
import { useEffect, useRef, useState } from "react";
import { Link, usePathname, useRouter } from "@/i18n/navigation";
import { routing, type AppLocale } from "@/i18n/routing";
const navLinks = [
{ key: "home", href: "/" },
{ key: "products", href: "/products" },
{ key: "aboutChalk", href: "/aboutsuperchalk" },
{ key: "aboutLime", href: "/aboutlime" },
{ key: "gallery", href: "/gallery" },
{ key: "aboutUs", href: "/aboutus" },
] as const;
export default function Header() {
const t = useTranslations("Nav");
const tLang = useTranslations("Language");
const locale = useLocale();
const pathname = usePathname();
const router = useRouter();
const langRef = useRef<HTMLLIElement>(null);
const [scrolled, setScrolled] = useState(false);
const [open, setOpen] = useState(false);
const [langOpen, setLangOpen] = useState(false);
useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 10);
onScroll();
window.addEventListener("scroll", onScroll, { passive: true });
return () => window.removeEventListener("scroll", onScroll);
}, []);
useEffect(() => {
setOpen(false);
setLangOpen(false);
}, [pathname, locale]);
useEffect(() => {
document.body.classList.toggle("nav-open", open);
return () => document.body.classList.remove("nav-open");
}, [open]);
useEffect(() => {
if (!langOpen) return;
const onPointerDown = (event: MouseEvent) => {
if (!langRef.current?.contains(event.target as Node)) {
setLangOpen(false);
}
};
const onKeyDown = (event: KeyboardEvent) => {
if (event.key === "Escape") setLangOpen(false);
};
document.addEventListener("mousedown", onPointerDown);
document.addEventListener("keydown", onKeyDown);
return () => {
document.removeEventListener("mousedown", onPointerDown);
document.removeEventListener("keydown", onKeyDown);
};
}, [langOpen]);
const isActive = (href: string) => {
if (href === "/") return pathname === "/";
return pathname === href || pathname.startsWith(`${href}/`);
};
const switchLocale = (nextLocale: AppLocale) => {
router.replace(pathname, { locale: nextLocale });
setLangOpen(false);
};
return (
<header className={`site-header${scrolled ? " is-sticky" : ""}`}>
<div className="header-bar">
<div className="header-brand-row">
<div className="header-main">
<Link href="/" className="header-wordmark">
<Image
src="/images/header/logo.jpg"
alt={t("logoAlt")}
width={260}
height={44}
priority
/>
</Link>
<div className="header-divider" />
<div className="header-nav-row">
<button
type="button"
className={`menu-toggle${open ? " is-open" : ""}`}
aria-label={open ? t("closeMenu") : t("openMenu")}
aria-expanded={open}
aria-controls="main-navigation"
onClick={() => setOpen((v) => !v)}
>
<span />
<span />
<span />
</button>
<nav
id="main-navigation"
className={`main-nav${open ? " is-open" : ""}`}
aria-label={t("mainMenu")}
>
<ul>
<li className="nav-lang" ref={langRef}>
<button
type="button"
className={`nav-icon-btn lang-trigger${langOpen ? " is-open" : ""}`}
aria-label={tLang("label")}
aria-expanded={langOpen}
aria-haspopup="listbox"
onClick={() => setLangOpen((v) => !v)}
>
<GlobeIcon />
<span className="lang-current">
{locale === "ar" ? "AR" : "FA"}
</span>
</button>
{langOpen && (
<ul className="lang-menu" role="listbox" aria-label={tLang("label")}>
{routing.locales.map((item) => (
<li key={item} role="option" aria-selected={item === locale}>
<button
type="button"
className={`lang-option${item === locale ? " is-active" : ""}`}
onClick={() => switchLocale(item)}
>
<Image
src={`/images/languages/${item}.png`}
alt=""
width={20}
height={14}
/>
<span>{tLang(item)}</span>
</button>
</li>
))}
</ul>
)}
</li>
{navLinks.map((item) => (
<li key={item.href}>
<Link
href={item.href}
aria-current={isActive(item.href) ? "page" : undefined}
className={isActive(item.href) ? "is-active" : undefined}
onClick={() => setOpen(false)}
>
{t(item.key)}
</Link>
</li>
))}
<li>
<button type="button" className="nav-icon-btn" aria-label={t("login")}>
<UserIcon />
</button>
</li>
</ul>
</nav>
</div>
</div>
<Link href="/" className="header-crest" aria-label={t("logoAlt")}>
<Image
src="/images/header/logo1.png"
alt={t("logoAlt")}
width={92}
height={92}
priority
/>
</Link>
</div>
</div>
</header>
);
}
function GlobeIcon() {
return (
<svg viewBox="0 0 24 24" width="18" height="18" fill="none" aria-hidden>
<circle cx="12" cy="12" r="9" stroke="currentColor" strokeWidth="1.6" />
<path
d="M3 12h18M12 3c2.8 2.6 4.2 5.7 4.2 9s-1.4 6.4-4.2 9c-2.8-2.6-4.2-5.7-4.2-9S9.2 5.6 12 3z"
stroke="currentColor"
strokeWidth="1.6"
/>
</svg>
);
}
function UserIcon() {
return (
<svg viewBox="0 0 24 24" width="18" height="18" fill="none" aria-hidden>
<circle cx="12" cy="8" r="3.2" stroke="currentColor" strokeWidth="1.6" />
<path
d="M5 19.5c1.8-3.2 4-4.7 7-4.7s5.2 1.5 7 4.7"
stroke="currentColor"
strokeWidth="1.6"
strokeLinecap="round"
/>
</svg>
);
}
+48
View File
@@ -0,0 +1,48 @@
import Image from "next/image";
import { getTranslations } from "next-intl/server";
export default async function Hero() {
const t = await getTranslations("Hero");
const services = [
{ title: t("transport"), image: "/images/slider/1.png" },
{ title: t("demolition"), image: "/images/slider/2.png" },
{ title: t("limeProduction"), image: "/images/slider/3.png" },
];
return (
<section className="hero">
<div className="hero-bg">
<Image
src="/images/slider/slider.jpg"
alt={t("imageAlt")}
fill
priority
className="hero-bg-img"
sizes="100vw"
/>
</div>
<div className="hero-overlay">
<div className="hero-center animate-fade-up">
<h1>{t("title")}</h1>
<hr className="hero-hr" />
<div className="hero-en">{t("subtitleEn")}</div>
</div>
<ul className="hero-services">
{services.map((item, i) => (
<li
key={item.title}
className="animate-fade-up"
style={{ animationDelay: `${0.2 + i * 0.12}s` }}
>
<Image src={item.image} alt={item.title} width={64} height={60} />
<span>{item.title}</span>
</li>
))}
</ul>
</div>
</section>
);
}
+105
View File
@@ -0,0 +1,105 @@
import { siteConfig } from "@/data/seo";
type JsonLdProps = {
data: Record<string, unknown> | Record<string, unknown>[];
};
export default function JsonLd({ data }: JsonLdProps) {
return (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }}
/>
);
}
export function organizationJsonLd() {
return {
"@context": "https://schema.org",
"@type": "Organization",
name: siteConfig.name,
alternateName: siteConfig.nameEn,
url: siteConfig.url,
logo: `${siteConfig.url}/images/header/logo1.png`,
image: `${siteConfig.url}${siteConfig.ogImage}`,
description: siteConfig.description,
slogan: siteConfig.slogan,
telephone: siteConfig.phone,
address: {
"@type": "PostalAddress",
addressLocality: siteConfig.address.locality,
streetAddress: siteConfig.address.street,
addressCountry: siteConfig.address.country,
},
};
}
export function localBusinessJsonLd() {
return {
"@context": "https://schema.org",
"@type": "LocalBusiness",
"@id": `${siteConfig.url}/#business`,
name: siteConfig.name,
alternateName: siteConfig.nameEn,
url: siteConfig.url,
image: `${siteConfig.url}${siteConfig.ogImage}`,
description: siteConfig.description,
telephone: siteConfig.phone[0],
address: {
"@type": "PostalAddress",
addressLocality: siteConfig.address.locality,
streetAddress: siteConfig.address.street,
addressCountry: siteConfig.address.country,
},
areaServed: {
"@type": "Country",
name: "Iran",
},
};
}
export function productJsonLd(product: {
title: string;
description: string;
image: string;
price: number;
slug: string;
}) {
return {
"@context": "https://schema.org",
"@type": "Product",
name: product.title,
description: product.description,
image: `${siteConfig.url}${product.image}`,
brand: {
"@type": "Brand",
name: siteConfig.shortName,
},
offers: {
"@type": "Offer",
url: `${siteConfig.url}/products/${product.slug}`,
priceCurrency: "IRR",
price: product.price,
availability: "https://schema.org/InStock",
seller: {
"@type": "Organization",
name: siteConfig.name,
},
},
};
}
export function breadcrumbJsonLd(
items: { name: string; path: string }[],
) {
return {
"@context": "https://schema.org",
"@type": "BreadcrumbList",
itemListElement: items.map((item, index) => ({
"@type": "ListItem",
position: index + 1,
name: item.name,
item: `${siteConfig.url}${item.path}`,
})),
};
}
+52
View File
@@ -0,0 +1,52 @@
import Image from "next/image";
import { getTranslations } from "next-intl/server";
export default async function Location() {
const t = await getTranslations("Location");
return (
<section className="section location">
<div className="container">
<div className="section-head section-head-center">
<h2>{t("title")}</h2>
<Image
src="/images/infoitems/line.png"
alt=""
width={151}
height={5}
className="section-line"
/>
</div>
<div className="location-grid">
<div className="location-copy">
<Image
src="/images/info1/2.png"
alt=""
width={80}
height={80}
className="location-icon"
/>
<h3>{t("heading")}</h3>
<p>
{t("subtitle")}
<br />
<br />
{t("coverage")}
</p>
</div>
<div className="location-map">
<Image
src="/images/info1/1.png"
alt={t("mapAlt")}
width={700}
height={420}
className="location-map-img"
/>
</div>
</div>
</div>
</section>
);
}
+13
View File
@@ -0,0 +1,13 @@
type Props = {
title: string;
};
export default function PageHero({ title }: Props) {
return (
<section className="page-hero">
<div className="container">
<h1>{title}</h1>
</div>
</section>
);
}
+21
View File
@@ -0,0 +1,21 @@
import Header from "@/components/Header";
import Footer from "@/components/Footer";
import PageHero from "@/components/PageHero";
type Props = {
title: string;
children: React.ReactNode;
};
export default function PageShell({ title, children }: Props) {
return (
<>
<Header />
<main>
<PageHero title={title} />
{children}
</main>
<Footer />
</>
);
}
+75
View File
@@ -0,0 +1,75 @@
import Image from "next/image";
import { getTranslations } from "next-intl/server";
const benefitKeys = [
"quality",
"lessCement",
"whiteness",
"easyWork",
"finish",
] as const;
const useKeys = ["whitework", "grout", "mosaic", "slurry"] as const;
export default async function PowderFeatures() {
const t = await getTranslations("Powder");
return (
<section className="section powder-features">
<div className="container">
<div className="section-head section-head-center">
<h2>{t("title")}</h2>
<Image
src="/images/infoitems/line.png"
alt=""
width={151}
height={5}
className="section-line"
/>
</div>
<div className="powder-grid">
<div className="powder-col">
<div className="powder-photo shadow-box">
<Image
src="/images/info/1.jpg"
alt={t("benefitsImageAlt")}
width={700}
height={480}
/>
</div>
<div className="powder-text">
<h3>{t("benefitsTitle")}</h3>
<p className="dots">. . . . . . . . . . . . . . . . . . . . . . . .</p>
<ul>
{benefitKeys.map((key) => (
<li key={key}>{t(`benefits.${key}`)}</li>
))}
</ul>
</div>
</div>
<div className="powder-col powder-col-reverse">
<div className="powder-text">
<h3>{t("usesTitle")}</h3>
<p className="dots">. . . . . . . . . . . . . . . . . . . . . . . . .</p>
<ul>
{useKeys.map((key) => (
<li key={key}>{t(`uses.${key}`)}</li>
))}
</ul>
</div>
<div className="powder-photo shadow-box">
<Image
src="/images/info/2.jpg"
alt={t("usesImageAlt")}
width={700}
height={480}
/>
</div>
</div>
</div>
</div>
</section>
);
}
+44
View File
@@ -0,0 +1,44 @@
import Image from "next/image";
import { getTranslations, getLocale } from "next-intl/server";
import type { Product } from "@/data/products";
import { formatPrice } from "@/data/products";
import { Link } from "@/i18n/navigation";
type Props = {
product: Product;
};
export default async function ProductDetail({ product }: Props) {
const t = await getTranslations("Products");
const locale = await getLocale();
const title = t(`items.${product.slug}.title`);
const description = t(`items.${product.slug}.description`);
return (
<section className="section product-detail">
<div className="container product-detail-grid">
<div className="product-detail-media shadow-box">
<Image
src={product.image}
alt={title}
width={800}
height={800}
priority
/>
</div>
<div className="product-detail-info">
<h2>{title}</h2>
<hr />
<p className="product-detail-desc">{description}</p>
<p className="product-detail-price">
{formatPrice(product.price, locale, t("currency"))}
</p>
<Link href="/products" className="btn-theme">
{t("backToProducts")}
</Link>
</div>
</div>
</section>
);
}
+40
View File
@@ -0,0 +1,40 @@
import Image from "next/image";
import { getTranslations, getLocale } from "next-intl/server";
import type { Product } from "@/data/products";
import { formatPrice } from "@/data/products";
import { Link } from "@/i18n/navigation";
type Props = {
products: Product[];
};
export default async function ProductGrid({ products }: Props) {
const t = await getTranslations("Products");
const locale = await getLocale();
return (
<div className="product-grid">
{products.map((product) => {
const title = t(`items.${product.slug}.title`);
return (
<article key={product.id} className="product-tile">
<Link href={`/products/${product.slug}`} className="product-tile-link">
<div className="product-tile-img">
<Image
src={product.image}
alt={title}
width={500}
height={500}
/>
</div>
<h2>{title}</h2>
<p className="product-tile-price">
{formatPrice(product.price, locale, t("currency"))}
</p>
</Link>
</article>
);
})}
</div>
);
}
+57
View File
@@ -0,0 +1,57 @@
import Image from "next/image";
import { getTranslations } from "next-intl/server";
const productionKeys = [
"clay",
"mineralPowder",
"joshaghan",
"superChalk",
"buildingLime",
"limestone",
"superPowder",
"sand",
] as const;
export default async function Productions() {
const t = await getTranslations("Productions");
return (
<section className="section productions">
<div className="container">
<div className="productions-grid">
<div className="productions-list">
<div className="section-head">
<h2>{t("title")}</h2>
<Image
src="/images/infoitems/line.png"
alt=""
width={151}
height={5}
className="section-line"
/>
</div>
<div className="production-items">
{productionKeys.map((key) => (
<article key={key} className="production-item">
<h3>{t(`items.${key}.title`)}</h3>
<p>{t(`items.${key}.description`)}</p>
</article>
))}
</div>
</div>
<div className="productions-visual">
<Image
src="/images/infoitems/1.png"
alt={t("imageAlt")}
width={640}
height={720}
className="productions-img"
/>
</div>
</div>
</div>
</section>
);
}
+88
View File
@@ -0,0 +1,88 @@
"use client";
import Image from "next/image";
import { useTranslations } from "next-intl";
import { useRef } from "react";
import { Link } from "@/i18n/navigation";
const carouselItems = [
{ key: "aryanClay", image: "/images/infoitems1/1.jpg" },
{ key: "ore", image: "/images/infoitems1/2.jpg" },
{ key: "superPowder", image: "/images/files/Bd4HF0Mm3G.jpg" },
{ key: "mineralPowder", image: "/images/infoitems1/4.jpg" },
{ key: "ore", image: "/images/infoitems1/2.jpg", id: "ore-2" },
{ key: "joshaghan", image: "/images/infoitems1/3.jpg" },
{ key: "superChalk", image: "/images/files/eADGpxlT4k.jpg" },
] as const;
export default function ProductsCarousel() {
const t = useTranslations("Carousel");
const trackRef = useRef<HTMLUListElement>(null);
const scrollBy = (dir: 1 | -1) => {
const el = trackRef.current;
if (!el) return;
const amount = el.clientWidth * 0.7;
el.scrollBy({ left: dir * -amount, behavior: "smooth" });
};
return (
<section className="section products-carousel">
<div className="container">
<div className="section-head section-head-center">
<h2>{t("title")}</h2>
<Image
src="/images/infoitems/line.png"
alt=""
width={151}
height={5}
className="section-line"
/>
</div>
<div className="carousel-wrap">
<button
type="button"
className="carousel-btn prev"
aria-label={t("prev")}
onClick={() => scrollBy(-1)}
>
‹
</button>
<ul className="carousel-track" ref={trackRef}>
{carouselItems.map((item, index) => {
const title = t(`items.${item.key}`);
return (
<li key={`${"id" in item ? item.id : item.key}-${index}`}>
<Link href="/products" className="product-card-link">
<article className="product-card">
<div className="product-card-img">
<Image
src={item.image}
alt={title}
width={700}
height={400}
/>
</div>
<p>{title}</p>
</article>
</Link>
</li>
);
})}
</ul>
<button
type="button"
className="carousel-btn next"
aria-label={t("next")}
onClick={() => scrollBy(1)}
>
›
</button>
</div>
</div>
</section>
);
}
+143
View File
@@ -0,0 +1,143 @@
export const site = {
name: "کارخانه صالح کارگر و پسران",
nameEn: "Saleh Kargar Factory",
tagline: "شعار ما : کیفیت برتر- بارگیری سریع- جلب رضایت مشتری",
};
export const navItems = [
{ label: "صفحه اصلی", href: "/" },
{ label: "محصولات", href: "/products" },
{ label: "درباره گچ سوپر صالح", href: "/aboutsuperchalk" },
{ label: "درباره آهک", href: "/aboutlime" },
{ label: "گالری", href: "/gallery" },
{ label: "درباره ما", href: "/aboutus" },
];
export const heroServices = [
{ title: "حمل و نقل", image: "/images/slider/1.png" },
{ title: "تخریب", image: "/images/slider/2.png" },
{ title: "تولید آهک", image: "/images/slider/3.png" },
];
export const productions = [
{
title: "خاک رس آسیابی (گل کاشی)",
description:
"موارد مصرف این خاک معمولا گچ و خاک، گل مخصوص کاشی سازی و کاشی کاری مورد استفاده می باشد.",
},
{
title: "پودر سنگ معدنی",
description:
"این پودر تهیه شده از بهترین نوع سنگ کربنات کلسیم با خلوس بسیار بالا با سفیدی و نرمی مصرف حداقلی سیمان در این مورد توجه مصرف کنندگان این نوع پودر می باشد.",
},
{
title: "پودر سنگ جوشقان",
description:
"این نوع پودر جهت مصارف صنعتی و سفید کاری و ساختمانی و کنیتکس کاری و کارخانجات چسب سازی و ... مورد استفاده می باشد.",
},
{
title: "سوپر گچ صالح",
description:
"گچ سوپر کارگر سه برابر مستحکم تر از سایر گچ هاست، که سفیدی و درخشندگی و براقیت فوق العاده ای را به نمای داخلی ساختمان می بخشد. این گچ از نظر سفیدی جایگزین رنگ می شود که به طبع آن هزینه را کاهش و سرعت و سهولت اجرا را افزایش می دهد.",
},
{
title: "آهک ساختمانی و صنعتی",
description:
"این آهک در دو نوع فله و پاکتی ارائه می شود که پاکتی آن( آهک آب زده) در بسته بندی و فله آن جهت امور ساختمانی مورد مصرف می باشد. نوع صنعتی آن با خلوص بسیار بالا جهت کارخانجات چرم سازی و بتون سبک ، هیدراته و ... مورد مصرف قرار میگیرد.",
},
{
title: "سنگ آهکی کربنات پتاسیم",
description:
"سنگ آهکی در مصارف ساختمانی از جمله پختن آهک صنعتی و سنتی - آهک - پودر سنگ و سنگ نما استفاده می شود و به دلیل کربنات کلسیم فراوان در این سنگ جهت خوراک طیور نیز استفاده می شود. این سنگ را از معدن به طور کوپ و یا انفجار از کوه استخراج می کنند.",
},
{
title: "سوپر پودر معدنی",
description:
"این پودر با سفیدی زیاد و عدم نیاز به الک و پرداخت پذیری عالی و سهولت کار و ترک نخوردن در نمای داخل و خارج ساختمان و بند کشی کاشی، می تواند جایگزینی برای پودر جوشقان مورد مصرف قرار گیرد.",
},
{
title: "ماسه بادی",
description:
"این نوع ماسه بادی جهت مصارف باغ داری و باغچه استفاده می گردد.",
},
];
export const powderBenefits = [
"کیفیت عالی",
"کاهش مصرف سیمان",
"سفیدی",
"سهولت کار توسط استاد کار",
"پرداخت پذیری عالی و با قابلیت شستشو",
];
export const powderUses = [
"1- سفید کاری با سیمان",
"2- بندکشی کاشی، سرامیک و موزائیک",
"3- موائیک سازی",
"4- دوغ آب کاری پشت سنگ های چینی و مرمر",
];
export const aboutTabs = [
{
id: "work",
label: "کار ما",
title: "نتایج آنالیز نمونه سنگ ها",
subtitle: "شعار ما :\nکیفیت برتر- بارگیری سریع- جلب رضایت مشتری",
body: "این مجتمع دارای نمایندگی چندین نوع گچ سمنان و قم و انواع گچ سوپر قم می باشد.",
cta: "درباره ما بیشتر بدانید ...",
},
{
id: "goal",
label: "هدف ما",
title: "بهترین کیفیت آهک را از ما بخواهید...",
subtitle:
"این مجتمع تولید مفتخر است که تمامی مصولات خود را به صورت بسته بندی و فله با کیفیت عالی به طور مستقیم در دسترس مشتریان عزیز خود قرار داده ودارای نمایندگی چندین نوع گچ سمنان و قم و انواع گچ سوپر قم می باشد.",
body: "هدف ما رضایت مشتری است و تولید کالایی با کیفیت",
cta: "درباره آهک ...",
},
{
id: "services",
label: "خدمات ما",
title: "تولیداتی مرغوب و با کیفیت ...",
subtitle:
"تولیدی صالح کارگر و پسران مفتخر است که تمامی محصولات خود را از بهترین نوع سنگهای معدنی موجود در کشور و با کیفیت عالی د ردسترس مشتریان محترم خود قرار می دهد.",
body: "شعار ما:\nکیفیت برتر\nبارگیری سریع\nجلب رضایت مشتری",
cta: "بیشتر بدانید ...",
},
];
export const factoryProducts = [
{ title: "خاک رس آریایی", image: "/images/infoitems1/1.jpg" },
{ title: "سنگ معدن", image: "/images/infoitems1/2.jpg" },
{ title: "سوپر پودر معدنی", image: "/images/files/Bd4HF0Mm3G.jpg" },
{ title: "پودر سنگ معدنی", image: "/images/infoitems1/4.jpg" },
{ title: "سنگ معدن", image: "/images/infoitems1/2.jpg" },
{ title: "پودر سنگ جوشقان", image: "/images/infoitems1/3.jpg" },
{ title: "سوپر گچ صالح", image: "/images/files/eADGpxlT4k.jpg" },
];
export const location = {
title: "مــوقــعــیــت مـــــا",
heading: "مجتمع تولیدی کارخانجات سنک کوبی و آهک پزی صالح",
subtitle: "( صالح کارگر و پسران)",
coverage: "پخش در سرتاسر ایران",
};
export const footer = {
brand: "سایــــت معــــــدن",
aboutTitle: "درباره ما",
aboutText: "تولید انواع سنگ معدنی و پودر آهک",
addressTitle: "آدرس ما",
address:
"قم - جاده اراک - کیلومتر 8 - دوربرگردان مارال - بعد از بیمارستان امام رضا- کوچه دوم - داخل کوچه ( ریخته گری ها)",
addressNotes: [
"مجتمع تولید کارخانجات سنگ کوبی و آهک پزی صالح",
"شعارما: کیفیت برتر- بارگیری سریع- جلب رضایت مشتری است",
],
contactTitle: "تماس با ما",
contacts: [
"حسابداری : 8700105-0253",
"فروش : 4-8700061-0253",
"بارگیری: 8700074-8700683-0253",
],
};
+82
View File
@@ -0,0 +1,82 @@
export const aboutChalk = {
title: "درباره سوپر گچ صالح",
sections: [
{
title: "تاریخچـه تولیـد گــچ",
image: "/images/about-chalk/1.jpg",
body: `گَچ‌ کلسیم سولفات آبدار طبیعی است و در چندین فرم بلوری یافت می‌شود که در ذخایر پوسته جامد کره زمین به فرم قشرهای نسبتاً ضخیم و کلفت یافت می‌شود که آن را از دل زمین استخراج می‌کنند و مورد به‌کارگیری قرار می‌دهند. گچ یکی از قدیمی‌ترین مصالح ساختمانی مورد استفاده در دنیا می‌باشد که در قرون گذشته با روش‌های متفاوتی تولید و استفاده می‌شده‌ است. گچ را پس از استخراج از معدن مانند آهک به کوره می‌برند و تا دمای نزدیک به ۱۸۰ درجه سانتی‌گراد گرما می‌دهند تا شماری از مولکول‌های آب تبلورش را از دست بدهند و به فرم گچ قابل بکارگیری به عنوان مصالح ساختمانی و قالب گیری درآید. معمولاً گچ را با آسیاب های مخصوص به صورت پودر درمی‌آورند و در کیسه‌های گچ یا به صورت فله به فروش می‌رسد. پودرهای گچ مرغوب باید کوچکتر از ۰٫۱۵ میلی‌مترباشد.`,
},
{
title: "روش تولیـد گــچ",
image: "/images/about-chalk/2.jpg",
body: `خلوص سنگ گچ بر پایه درصد کانی ژیپس در آن تعریف می‌شود. بر پایه انجمن استاندارد مصالح آمریکا (ASTM) دست‌ کم خلوص مورد نیاز برای سنگ گچ در مواد صنعتی ۷۰ درصد ژیپس است در صورتی که بیش‌تر سنگ گچ‌های تجارتی و بازرگانی دارای ۷۵ تا ۹۰ درصدخلوص می‌باشند. نا خالصی‌های موجود درسنگ گچ بیش‌تر شیل، رس‌ها و کربنات کلسیم است و گاهی بازمانده کنش‌ها و فعالیت‌های حیاتی نیز در آن دیده می‌شود.
رنگ گچ به فرم طبیعی سفید بوده و ممکن است به دلیل ناخالصی‌های مواد آلی رس و اکسید آهن به رنگ‌های خاکستری، خاکستری مایل به آبی، صورتی یا زرد دیده شود. سنگ گچ دارای سیستم تبلور منوکلینیک، وزن مخصوص ۲/۲ و سختی ۲ می‌باشد. ژیپس مورد بکارگیری با سنگ گچ به فرم توده‌ای بلوری‌ شده که به فرم دانه‌های ریز و درشت است؛ که در اسید کلریدریک و آب گرم به فرم محلول در می‌آید. سنگ گچ خالص دارای ۹/۲۰ درصد آب ترکیبی و ۶/۶۴ درصد SO3 و ۵/۳۲ درصد CaO است.
فرمول تهیه گچ : 2CaSO4.4H2O → 2CaSO4 + H2O 3H2O (در اثر حرارت تبخیر می‌شود)`,
},
{
title: "مقاومت گچ",
image: "/images/about-chalk/3.jpg",
body: `گچ مقاومت نسبتا خوبی دارد و حداکثر تنش فشاری قابل تحمل آن حدود ۳۰ کیلوگرم بر سانتیمتر مربع است، در کشش البته گچ ضعیفتر عمل کرده و تنش کششی حداکثر ۵ کیلوگرم بر سانتیمتر مربع را تحمل مینماید؛ توجه داشته باشید که این مقاومت برای گچ خالص است و اگر گچ به صورت ناخالص (گچ و خاک) بکار رود، مقاومت کاهش چشم گیری می یابد. میزان آب مصرفی به شدت در مقاومت گچ موثر است. مقاومت گچ در برابر آتش سوزی: گچ در مقابل سوانح آتش سوزی مقاومت کرده و می تواند به عنوان یک لایه عایق در برابر فولاد عمل نماید.`,
},
{
title: "مــزایـای گـــچ",
image: "/images/about-chalk/4.jpg",
body: `ارزانی گچ: گچ به دلیل ارزانی و در دسترس بودن، از جمله مصالحی است که همگان با آن کار می کنند. شکل پذیری: گچ شکل پذیری فوق العاده ای دارد و این خاصیت باعث می شود که در بسیاری از صنعت ها مانند چینی سازی، به عنوان قالب مورد استفاده قرار گیرد. اکوستیک بودن یا خاصیت جذب صدا در گچ: گچ می تواند حدود تقریبا ۷۰ درصد امواج صوتی را جذب نماید. سفید بودن: رنگ سفید گچ باعث می شود که در فضای داخلی ساختمان جلوه فوق العاده ای به فضا ببخشد. قابلیت حجیم شدن: گچ در هنگام گیرش افزایش حجم پیدا می کند و منافذ را پر می کند.`,
},
{
title: "معـــــایب گـــچ",
image: "/images/about-chalk/1.jpg",
body: `گچ کثیفی ها را زود به خود می گیرد. مشکل دیگر گچ این است که در مقابل رطوبت عملکردی بسیار ضعیف از خود نشان می دهد و اگر آب روی آن بریزد و رطوبت ادامه یابد، ضایعه طبله در گچ بروز می کند. این مشکل باعث شده است استفاده از گچ در مناطقی که از لحاظ رطوبتی غنی می باشند، مانند شمال ایران به مراتب کاهش یافته و از مصالح جایگزین آهک و سیمان سفید، برای سفیدکاری استفاده شود.`,
},
{
title: "گــــچ سوپــــر کارگـــــر",
image: "/images/products/super-chalk.jpg",
body: `گچ سوپر کارگر سه برابر مستحکم تر از سایر گچ هاست. سوپر گچ کارگر به عنوان یک لایه نازک به ضخامت ۳-۴ میلیمتر روی لایه زیرین گچ کاری (گچ سفید کاری و ساختمانی) اجرا می شود که سفیدی و درخشندگی و براقیت فوق العاده ای را به نمای داخلی ساختمان می بخشد این گچ از نظر سفیدی جایگزین رنگ می شود که به طبع آن هزینه را کاهش و سرعت و سهولت اجرا را افزایش می دهد. قابل شستشو: گچ سوپر کارگر میکرونیزه و قابل شستشو می باشد. پرداخت پذیری عالی: این گچ با پرداخت پذیری عالی که دارد باعث می شود سطحی بسیار سیقلی و عاری از هر گونه پستی و بلندی ایجاد شود.`,
},
],
};
export const aboutLime = {
title: "درباره آهک",
sections: [
{
title: "تاریخچـــه تولیـــد آهــــک",
image: "/images/about-lime/1.jpg",
body: `عموما مردم از آهک و نوع و شیوه تولید آن چیزی نمی دانند. تولید آهک به دو روش سنتی و صنعتی تولید می گردد. روش سنتی تولید آهک هزاران سال است که توسط بشر انجام می شود. امروزه نیز با وجود ابداع روش های صنعتی همچنان از روش های سنتی گذشتگان برای تولید آهک استفاده می گردد، زیرا هم کیفیت مناسبی دارد و هم برای کارگاه های کوچک تولید آهک روش خوبی محسوب می شود. فرآوری آهک همیشه با پخت آن همراه است و برای این منظور نیاز به کوره آهک پزی است.`,
},
{
title: "روش تولیـد سنتـی آهـک",
image: "/images/about-lime/2.jpg",
body: `در روش سنتی معمولا محل کارگاه در محل معدن آهک انتخاب می شود برای این منظور یک حفره در زمین ایجاد کرده و درون آن به صورت لایه ای سنگ آهک می چینند. بدین ترتیب زمین نقش کوره در روش سنتی تولید آهک ایفا می کند. این کوره های آهک پزی به کوره آهک چاهی یا تنوری شهرت دارند. در ادامه کوره را از پایین روشن کرده و روی آن را با گل آهک مهر می کنند. این روش تولید آهک زنده (پخته) سنتی است. همچنین در صورتی که هدف تولید آهک شکفته باشد در حین پخت روی آهک را مرطوب می کنند تا آهک هیدراته شود. در این نوع پخت خلوص آهک به درصدی بالای ۹۴٪ می رسد.`,
},
{
title: "تفاوت آهـک سنتـی و صنعتـی",
image: "/images/about-lime/3.jpg",
body: `البته پخت آهک در روش سنتی زمان بیشتر و حرارت کمتری نسبت به حالت صنعتی دارد. نمی توان گفت که آهک سنتی از نظر کیفیت بهتر است یا آهک صنعتی زیرا هریک دارای کاربردهای مخصوص به خود بوده و هر صنعتی ترجیح می دهد از یکی از این دو نوع محصول استفاده نماید. تفاوت اصلی در تولید سنتی و صنعتی آهک در کوره های آن می باشد. کوره سنتی در داخل زمین به صورت تنور بوده و کوره آهک صنعتی به شکل دوار یا روتاری و از جنس آلیاژ خاصی می باشد.`,
},
{
title: "کاربردهـای آهـک سنتــی",
image: "/images/products/building-lime.jpg",
body: `آهک سنتی دیر واکنش است و درصد خلوص بالاتری نسبت به صنعتی دارد به همین دلیل در بخش ساختمان، ضدعفونی در پرورش دام و طیور، دفن زباله، تولید آهک هیدراته و تولید آجرهای اتو کلاو شده که از نظر سبک سازی ساختمان بسیار موثر است مورد استفاده قرار می گیرد.`,
},
],
};
export const aboutUs = {
title: "درباره ما",
image: "/images/about-us/1.jpg",
icon: "/images/about-us/2.png",
paragraphs: [
"مجتمع تولیدی صالح کارگر و پسران مفتخر است که تمامی محصولات خود را از بهترین نوع سنگهای معدنی موجود در کشور و با کیفیت عالی د ردسترس مشتریان محترم خود قرار می دهد.",
"این مجتمع تولید مفتخر است که تمامی مصولات خود را به صورت بسته بندی و فله با کیفیت عالی به طور مستقیم در دسترس مشتریان عزیز خود قرار داده ودارای نمایندگی چندین نوع گچ سمنان و تولید کننده گچ سوپر صالح قم می باشد.",
"شعار ما: کیفیت برتر بارگیری سریع جلب رضایت مشتری",
],
};
export const galleryImages = Array.from({ length: 22 }, (_, i) => ({
id: i + 1,
src: `/images/gallery/${i + 1}.jpg`,
alt: `گالری تصاویر ${i + 1}`,
}));
+42
View File
@@ -0,0 +1,42 @@
export type Product = {
id: string;
slug: string;
title: string;
price: number;
image: string;
description: string;
};
/**
* Sample product data for UI design.
* Replace `getProducts` / `getProductBySlug` with backend API calls later.
* Localized title/description live in messages/{locale}.json under Products.items.
*/
export const products: Product[] = [
{
id: "5853",
slug: "super-chalk",
title: "سوپر گچ صالح",
price: 24000,
image: "/images/products/super-chalk.jpg",
description:
"این گچ سه برابر مستحکم تر از سایر گچ هاست. سوپر گچ صالح به عنوان یک لایه نازک به ضخامت 4-3 میلی متر روی لایه زیرین گچ کاری (گچ سفید کاری و ساختمانی) اجرا می شود که سفیدی و درخشندگی و براقیت فوق العاده ای را به نمای داخلی ساختمان می بخشد این گچ از نظر سفیدی جایگزین رنگ می شود که به طبع، هزینه را کاهش و سرعت و سهولت اجرا را افزایش می دهد.",
},
];
export function getProducts(): Product[] {
return products;
}
export function getProductBySlug(slug: string): Product | undefined {
return products.find((p) => p.slug === slug);
}
export function formatPrice(
price: number,
locale = "fa",
currencyLabel = "تومان",
): string {
const numberLocale = locale === "ar" ? "ar-EG" : "fa-IR";
return `${price.toLocaleString(numberLocale)} ${currencyLabel}`;
}
+57
View File
@@ -0,0 +1,57 @@
export const siteConfig = {
name: "کارخانه صالح کارگر و پسران",
nameEn: "Saleh Kargar Factory",
shortName: "صالح کارگر",
description:
"مجتمع تولیدی کارخانجات سنگ‌کوبی و آهک‌پزی صالح کارگر و پسران — تولید پودر سنگ، آهک، گچ سوپر صالح و مصالح معدنی با کیفیت برتر، بارگیری سریع و جلب رضایت مشتری",
url: process.env.NEXT_PUBLIC_SITE_URL ?? "https://www.salehkargar.ir",
locale: "fa_IR",
phone: ["0253-8700105", "0253-8700061", "0253-8700074"],
email: undefined as string | undefined,
address: {
locality: "قم",
street:
"جاده اراک - کیلومتر 8 - دوربرگردان مارال - بعد از بیمارستان امام رضا - کوچه دوم - داخل کوچه (ریخته‌گری‌ها)",
country: "IR",
},
slogan: "کیفیت برتر — بارگیری سریع — جلب رضایت مشتری",
ogImage: "/images/slider/slider.jpg",
};
export const seoPages = {
home: {
title: "خانه",
description: siteConfig.description,
path: "/",
},
products: {
title: "محصولات",
description:
"مشاهده محصولات کارخانه صالح کارگر و پسران شامل سوپر گچ صالح، پودر سنگ معدنی، آهک ساختمانی و صنعتی و سایر مصالح معدنی.",
path: "/products",
},
aboutChalk: {
title: "درباره سوپر گچ صالح",
description:
"آشنایی با تاریخچه، روش تولید، مزایا و ویژگی‌های سوپر گچ صالح؛ گچ میکرونیزه قابل شستشو با استحکام سه برابر گچ معمولی.",
path: "/aboutsuperchalk",
},
aboutLime: {
title: "درباره آهک",
description:
"آشنایی با تاریخچه و روش تولید سنتی و صنعتی آهک در مجتمع صالح کارگر و پسران و کاربردهای آهک ساختمانی و صنعتی.",
path: "/aboutlime",
},
gallery: {
title: "گالری تصاویر",
description:
"گالری تصاویر کارخانه و معدن صالح کارگر و پسران؛ مشاهده فضای تولید، محصولات و فعالیت‌های مجموعه.",
path: "/gallery",
},
aboutUs: {
title: "درباره ما",
description:
"درباره مجتمع تولیدی صالح کارگر و پسران؛ تولیدکننده سنگ‌های معدنی، پودر آهک و گچ سوپر صالح با شعار کیفیت برتر و بارگیری سریع.",
path: "/aboutus",
},
} as const;
+5
View File
@@ -0,0 +1,5 @@
import { createNavigation } from "next-intl/navigation";
import { routing } from "./routing";
export const { Link, redirect, usePathname, useRouter, getPathname } =
createNavigation(routing);
+15
View File
@@ -0,0 +1,15 @@
import { hasLocale } from "next-intl";
import { getRequestConfig } from "next-intl/server";
import { routing } from "./routing";
export default getRequestConfig(async ({ requestLocale }) => {
const requested = await requestLocale;
const locale = hasLocale(routing.locales, requested)
? requested
: routing.defaultLocale;
return {
locale,
messages: (await import(`../../messages/${locale}.json`)).default,
};
});
+9
View File
@@ -0,0 +1,9 @@
import { defineRouting } from "next-intl/routing";
export const routing = defineRouting({
locales: ["fa", "ar"],
defaultLocale: "fa",
localePrefix: "always",
});
export type AppLocale = (typeof routing.locales)[number];
Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

+2
View File
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>NoSuchKey</Code><Message>The specified key does not exist.</Message><Key>sites/user_themes/salehkargar_DsyYdptMYr/assets/img/infoItems/icon.png</Key><BucketName>meshkee-templates</BucketName><Resource>/sites/user_themes/salehkargar_DsyYdptMYr/assets/img/infoItems/icon.png</Resource><RequestId>18CB1AC108A191BC</RequestId><HostId>dd9025bab4ad464b049177c95eb6ebf374d3b3fd1af9251148b658df7ac2e3e8</HostId></Error>
Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 327 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 247 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 297 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 219 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 244 KiB

Some files were not shown because too many files have changed in this diff Show More