gallery.zip
حجم:
13.4M
گالری چند تصویر برای فروشگاه که از پروژه جدا کردم
Lang.zip
حجم:
18.5M
پروژه دو زبان فارسی و انگلیسی که زبان از طریق کوکی ذخیره می شود
6.4M حجم رسانه بالاست
مشاهده در ایتا
آموزش ایجاد جدول فایل Resource.resx یادت باشد برای نام گذاری Views.Home.Index.en و پوشه Resources که به صورت زیر باشد
Resources/Views.{Controller}.{View}.{culture}.resx
اگر در نام گذاری اشتباه باشد نمیتوانید پروژه را چند زبان قرار دهید
توی پروژههای چندزبانه مثل اون چیزی که داری با ASP.NET Core MVC میسازی، Culture به معنی فرهنگ یا زبان-کشور کاربره. دقیقتر بگم:
✅ تعریف Culture در برنامهنویسی
🔹 Culture یعنی مجموعهای از تنظیمات مرتبط با زبان، کشور و فرمتهای محلی، مثل:
| مورد | نمونه مقدار |
| زبان | en یا fa |
| کشور | US, IR |
| تاریخ | MM/dd/yyyy یا yyyy/MM/dd |
| اعداد | 1,000.50 یا ۱٬۰۰۰٫۵۰ |
| واحد پول | $, ﷼ |
مثلاً:
- "en-US" = انگلیسی - آمریکا
- "fa-IR" = فارسی - ایران
در ASP.NET Core، اینها با کلاس CultureInfo مدیریت میشن.
✅ تفاوت Culture و UICulture
| مورد | نقش |
| Culture | فرمتهای محلی مثل اعداد، تاریخ |
| UICulture | زبان واسط کاربر (مترجم فایلهای .resx) |
معمولاً برای سایتی که زبان و نمایش هم مهمه، هر دو تنظیم میشن:
Thread.CurrentThread.CurrentCulture = new CultureInfo("fa-IR");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fa-IR");
🎯 کاربرد در پروژه تو
- با تنظیم Culture، مثلاً تاریخها در فرم تماس بهشکل ۱۴۰۴/۰۴/۱۳ نمایش داده میشن.
- با تنظیم UICulture، ترجمه از فایلهای .resx انجام میشه (مثل ارتباط با ما به جای Contact Us).
در پروژههای چندزبانه ASP.NET Core MVC، نامگذاری فایلهای .resx بسیار مهمه تا سیستم بتونه ترجمهی درست رو برای View یا کلاس مربوطه تشخیص بده. بیا با هم ساختار حرفهای و دقیقش رو یاد بگیریم:
✅ انواع Resource و الگوی نامگذاری
1. فایلهای مخصوص Viewها (View-specific Resources)
برای ترجمه Viewها باید فایلها رو طبق این الگو نامگذاری کنی:
Resources/Views.{Controller}.{View}.{culture}.resx
مثالها:
| View | زبان فارسی | زبان انگلیسی |
| Index.cshtml | Views.Home.Index.fa.resx | Views.Home.Index.en.resx |
| Contact.cshtml | Views.Home.Contact.fa.resx | Views.Home.Contact.en.resx |
حتماً پوشه Resources رو در ریشهی پروژه قرار بده، نه داخل Views
2. فایلهای عمومی (Shared Resources)
برای ترجمههایی که بین چند View یا کنترلر مشترکه، فایلهایی مثل زیر بساز:
Resources/SharedResources.fa.resx
Resources/SharedResources.en.resx
در Program.cs باید از IStringLocalizer<SharedResources> استفاده کنی تا این فایلها خونده بشن.
3. فایلهای ترجمه برای کلاسها یا مدلها
اگر بخوای اعتبارسنجی یا متون سیستم رو ترجمهپذیر کنی، فایلها باید با اسم کامل کلاس باشن:
مثلاً برای کلاس ContactModel.cs:
Resources/Models.ContactModel.fa.resx
Resources/Models.ContactModel.en.resx
البته برای این مورد از IStringLocalizer<ContactModel> استفاده میکنی.
🧠 نکته تکمیلی
در Program.cs باید این تنظیم باشه تا مسیر Resourceها درست شناسایی بشه:
builder.Services.AddLocalization(options =>
{
options.ResourcesPath = "Resources";
});
در ادامه، ساختار کامل پروژهمون با معماری ASP.NET Core 8 MVC، دوزبانه، فرم ارتباط با ما، نمایش نتایج فرم، و تم دارک/لایت/سیستم رو برات مینویسم. این ساختار تمیز و قابل توسعهست که بتونی راحت مدیریت کنی.
---
🧱 ساختار پوشهها و فایلها
MyLangProject/ ├── Controllers/ │ └── HomeController.cs ├── Views/ │ └── Home/ │ ├── Index.cshtml │ ├── Contact.cshtml │ └── Result.cshtml │ └── Shared/ │ └── _Layout.cshtml ├── Resources/ │ ├── Views.Home.Index.en.resx │ ├── Views.Home.Index.fa.resx │ ├── Views.Home.Contact.en.resx │ ├── Views.Home.Contact.fa.resx │ ├── Views.Home.Result.en.resx │ ├── Views.Home.Result.fa.resx │ └── Views.Shared._Layout.en.resx │ └── Views.Shared._Layout.fa.resx ├── wwwroot/ │ ├── css/ │ │ └── site.css │ └── js/ │ └── theme.js ├── Program.cs └── appsettings.json--- 💬 خلاصه نقش هر بخش فایل / پوشه توضیح کاربرد Controllers/HomeController.cs اکشنهای مربوط به صفحات، فرم ارتباط و تغییر زبان Views/Home/*.cshtml صفحه اصلی، فرم ارتباط، و صفحه نمایش نتایج فرم Views/Shared/_Layout.cshtml قالب مشترک صفحات شامل منو، Dropdown زبان و تم، و <title> چندزبانه Resources/*.resx ترجمههای متنهای ثابت برای هر View و Layout wwwroot/css/site.css استایلهای تم دارک / لایت wwwroot/js/theme.js کد JavaScript برای تشخیص تم مرورگر، انتخاب دستی تم، و ذخیره در کوکی Program.cs تنظیمات پروژه، localization، مسیریابی، و middleware appsettings.json تنظیمات عمومی پروژه (مثلاً پیکربندیها و اتصالها در صورت نیاز)
آموزش پیاده سازی پنل پیامکی کاوه نگار در ASP.NET Core
https://toplearn.com/c/5784
MyShop (10).zip
حجم:
40.9M
ادامه درس باگتو، اسلاید ها هم زمان همه تصاویر می آمد حالا درست کردم هر اسلاید مربوطه خودش میاد
MyShop (11).zip
حجم:
40.9M
## 🧨 علت خطا چی بود؟
در خط اولیه جاوااسکریپت:
javascript
const endTime = new Date('@Model.DiscountEndTime.Value.ToString("yyyy-MM-ddTHH:mm:ss")');
اگر
DiscountEndTimeمقدار نداشت (یعنی
nullبود)، Razor سعی میکرد
Valueرو بخونه و چون مقدار نداشت، خطای
Nullable object must have a valueمیداد—even قبل از اینکه جاوااسکریپت اجرا بشه. --- ## ✅ چه کار کردی که درست شد؟ تو خیلی هوشمندانه نوشتی: javascript const endTime = new Date('@Model.DiscountEndTime'); در این حالت، اگر
DiscountEndTimeمقدار داشته باشه، Razor اون رو به صورت رشته وارد میکنه (مثلاً:
2025/07/07 17:00:00) اگر
nullباشه، Razor فقط مقدار خالی وارد میکنه (
"") و در جاوااسکریپت: javascript new Date("") // خروجی: Invalid Date (ولی بدون خطا) یعنی با اینکه تاریخ نامعتبره، دیگه خطای Razor نمیگیری 😁 --- ## 🔐 نتیجه خطا از Razor بود—not جاوااسکریپت. با حذف `.Value.ToString(...)`، اجازه دادی Razor خودش مقدار رو بهصورت امن رندر کنه، و همین باعث شد مشکلت حل بشه.
در اسلاید دایرههای Indicators داخل اسلایدر (کلاس <li>) با box-shadow زیباتر دیده بشن، میتونی بهصورت Inline CSS به ol.carousel-indicators بدی، یا بهتر به هر <li> بهصورت style جداگانه. و در پنل کاربری و محصولات و اطلاعات بیشتر خطا داشتم که وقتی مقدار زمان باقیانده نداشته باشم و حالا برطرف شد