在ASP.NET MVC中动态地为多语言屏幕/用户界面添加翻译,可以使用资源文件和本地化实现。下面是一个解决方法示例:
创建资源文件: 在项目中创建一个资源文件,例如"Resources.resx",用于存储默认语言的文本。
添加其他语言的资源文件: 在项目中创建其他语言的资源文件,例如"Resources.fr.resx"(法语)和"Resources.es.resx"(西班牙语),用于存储对应语言的文本。
在视图中使用资源文件:
在视图中通过调用资源文件的键来显示文本。例如,在视图中使用@Resources.WelcomeMessage
来显示欢迎消息。
设置默认语言:
在Global.asax.cs
文件中的Application_Start
方法中设置默认语言。例如,设置默认语言为法语:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr");
CurrentUICulture
值来实现切换语言。例如,使用下拉列表选择器:@Html.DropDownList("Language", new SelectList(new[]
{
new SelectListItem { Text = "English", Value = "en" },
new SelectListItem { Text = "French", Value = "fr" },
new SelectListItem { Text = "Spanish", Value = "es" }
}, "Value", "Text"), new { onchange = "ChangeLanguage(this.value)" })
function ChangeLanguage(lang) {
$.ajax({
url: '/Home/ChangeLanguage',
type: 'POST',
data: { lang: lang },
success: function () {
location.reload();
}
});
}
Home
控制器中添加一个ChangeLanguage
动作方法来切换语言,并将语言设置保存在会话或Cookie中。[HttpPost]
public ActionResult ChangeLanguage(string lang)
{
Session["Language"] = lang; // Save language in session
// Alternatively, save language in cookie: Response.Cookies["Language"].Value = lang;
return Json(true);
}
CurrentUICulture
值。public class LanguageFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var lang = filterContext.HttpContext.Session["Language"] as string;
if (lang != null)
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(lang);
}
// Alternatively, get language from cookie: Request.Cookies["Language"].Value;
base.OnActionExecuting(filterContext);
}
}
Global.asax.cs
文件中的Application_Start
方法中注册语言过滤器。public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// Register language filter
GlobalFilters.Filters.Add(new LanguageFilter());
// Other application startup code
}
}
通过以上步骤,你可以在ASP.NET MVC中动态地为多语言屏幕/用户界面添加翻译。根据选择的语言,视图将显示对应语言的文本。