یک برنامه نوشتم که برای تغییر زبان سایت البته هم به روش Razor و هم به روش mvc لطفا الان برنامه ای که به روش razore نوشتم کاملا درست کار میکنه ولی برنامه ای که به روش mvc نوشتم بلد نیستم چطوری culture را به صفحه ارسال کنم ممنون میشم عزیزان اگر کسی بلد هست بهم کمک کنه
لازم به ذکر میدانم که بگوییم کدهای هر دو برنامه که نوشتم دقیقا مثل هم هستن فقط در مدل mvc بلد نیستم که چطوری culture را به صفحه view ارسال کنم
در مدل mvc
شما چون به صورت ثابت Culture رو داخل View تعریف کردید نمی تونید بین زبان های مختلف جابجا بشید. یکی از روش ها این هست که از طریق Url زبان مورد نظر رو تعیین کنید. به عنوان مثال سایت خبری تابناک رو اگر به صورت tabnak.ir باز کنید فارسی نمایش داده میشه اما اگر به صورت tabnak.ir/en باز کنید به صورت انگلیسی نمایش داده میشه یا اگر به صورت tabnak.ir/ar باز کنید عربی نمایش داده میشه. پس یکی از راه حل های شما اینه که Culture رو از طریق Url ارسال کنید.
یه مثال رو انجام میدم شما هم باید همین روش رو توی پروژه خودتون انجام بدید. البته روشهای دیگه ای هم برای تغییر Culture به صورت داینامیک هست ولی از این روش خودم استفاده کردم و جواب داده برای پروژه.
public class RouteValueRequestCultureProvider : RequestCultureProvider
{
public override Task<ProviderCultureResult> DetermineProviderCultureResult(HttpContext httpContext)
{
string cultureCode = null;
if (httpContext.Request.Path.HasValue && httpContext.Request.Path.Value == "/")
cultureCode = this.GetDefaultCultureCode();
// TODO: make it look more beautiful
else if (httpContext.Request.Path.HasValue && httpContext.Request.Path.Value.Length >= 4 && httpContext.Request.Path.Value[0] == '/' && httpContext.Request.Path.Value[3] == '/')
{
cultureCode = httpContext.Request.Path.Value.Substring(1, 2);
if (!this.CheckCultureCode(cultureCode))
cultureCode = this.GetDefaultCultureCode(); //throw new HttpException(HttpStatusCode.NotFound);
}
else cultureCode = this.GetDefaultCultureCode(); //throw new HttpException(HttpStatusCode.NotFound);
// TODO: from the SEO point of view, we should return 404 error code for unknown cultures
ProviderCultureResult requestCulture = new ProviderCultureResult(cultureCode);
return Task.FromResult(requestCulture);
}
private string GetDefaultCultureCode()
{
return this.Options.DefaultRequestCulture.Culture.TwoLetterISOLanguageName;
}
private bool CheckCultureCode(string cultureCode)
{
return this.Options.SupportedCultures.Select(c => c.TwoLetterISOLanguageName).Contains(cultureCode);
}
}
RequestLocalizationOptions requestLocalizationOptions = new RequestLocalizationOptions();
requestLocalizationOptions.SupportedCultures = requestLocalizationOptions.SupportedUICultures =
new CultureInfo[] { new CultureInfo("en"), new CultureInfo("fa"), new CultureInfo("ar") }.ToList();
requestLocalizationOptions.RequestCultureProviders.Insert(0, new RouteValueRequestCultureProvider() { Options = requestLocalizationOptions });
app.UseRequestLocalization(requestLocalizationOptions);
app.UseMvc(configureRoutes =>
{
configureRoutes.MapRoute(name: "Default", template: "{culture}/{controller}/{action}/{id?}", defaults: new { culture = "en", controller = "Default", action = "Index" });
}
);
builder.Services.AddMvc(options => options.EnableEndpointRouting = false);
@{
ViewData["Title"] = "تغییر Culture";
}
<div class="alert alert-success" style="text-align:center;">
<p> کالچر سیستم : @System.Globalization.CultureInfo.CurrentCulture.DisplayName</p>
<p> کالچر عمومی سیستم : @System.Globalization.CultureInfo.CurrentUICulture.DisplayName</p>
</div>
خب حالا پروژه رو اجرا کنید و Url رو به صورت زیر می نویسیم :
ابتدا Culture پیش فرض سیستم
نمایش Culture عربی
نمایش culture انگلیسی
تاریخ :
1404/01/24
- ساعت :
07:09:00 AM
- بازدید :
76
- پاسخ :
0
|
تاریخ :
1402/04/28
- ساعت :
09:04:00 PM
- بازدید :
1339
- پاسخ :
0
|
تاریخ :
1403/12/01
- ساعت :
01:07:00 PM
- بازدید :
202
- پاسخ :
0
|
تاریخ :
1403/12/26
- ساعت :
03:04:00 PM
- بازدید :
102
- پاسخ :
1
|
تاریخ :
1403/12/23
- ساعت :
11:21:00 AM
- بازدید :
201
- پاسخ :
1
|
تاریخ :
1399/09/20
- ساعت :
01:21:00 PM
- بازدید :
6864
- پاسخ :
1
|
تاریخ :
1403/12/22
- ساعت :
11:05:00 AM
- بازدید :
245
- پاسخ :
1
|
تاریخ :
1403/12/19
- ساعت :
11:21:00 PM
- بازدید :
99
- پاسخ :
1
|
تاریخ :
1403/12/18
- ساعت :
07:24:00 PM
- بازدید :
149
- پاسخ :
1
|
تاریخ :
1398/09/06
- ساعت :
09:06:00 PM
- بازدید :
3450
- پاسخ :
1
|
تاریخ :
1404/01/29
- ساعت :
10:55:00 AM
- بازدید :
8
- پاسخ :
0
|
تاریخ :
1404/01/28
- ساعت :
09:29:00 PM
- بازدید :
19
- پاسخ :
0
|
تاریخ :
1404/01/28
- ساعت :
10:46:00 AM
- بازدید :
32
- پاسخ :
1
|
تاریخ :
1404/01/28
- ساعت :
10:27:00 AM
- بازدید :
17
- پاسخ :
1
|
تاریخ :
1404/01/26
- ساعت :
05:27:00 PM
- بازدید :
66
- پاسخ :
1
|
تاریخ :
1404/01/24
- ساعت :
07:09:00 AM
- بازدید :
76
- پاسخ :
0
|
تاریخ :
1404/01/25
- ساعت :
03:09:00 PM
- بازدید :
36
- پاسخ :
1
|
تاریخ :
1404/01/16
- ساعت :
07:20:00 PM
- بازدید :
212
- پاسخ :
1
|
تاریخ :
1404/01/07
- ساعت :
05:02:00 AM
- بازدید :
149
- پاسخ :
1
|
تاریخ :
1402/04/28
- ساعت :
09:04:00 PM
- بازدید :
1339
- پاسخ :
0
|