我将开设一个我知道将以多种语言呈现的网站。但是,对于第一个版本,我们只需要英文版。一旦这些功能全部有效,我们就会添加其他语言。
不幸的是,由于Asp.Net Core中没有足够的功能,我们必须在网站上使用Asp.Net MVC 5。我的问题有两个部分:
答案 0 :(得分:1)
我会使用资源文件,似乎是最简单的解决方案。您还可以使用数据库资源提供程序,这样可以减少混乱。
如果您从纯文本开始,稍后添加翻译将变得更加复杂和繁琐。所以我不会这样做。
答案 1 :(得分:0)
我们使用Smart internationalization for ASP.NET。
功能
我如何在项目中逐步使用i18n:
将I18N nuget包添加到MVC项目中。
:
添加一个名为" locale"的文件夹到您网站的根目录。为您希望支持的每种文化创建一个子文件夹。例如,/ locale / fr /.
将i18n.PostBuild.exe复制到区域设置文件夹
右键点击项目名称 - >属性 - >构建事件: 在Post-build事件命令行中:
" $(TARGETDIR)i18n.PostBuild.exe" " $(PROJECTDIR)\的web.config"
在视图中,使用[[[some text]]]
稍后进行翻译
构建项目
刷新解决方案资源管理器并按“显示所有文件”
在"区域设置"中包含所有文件文件夹进入项目
提供locale \ fr \ messages.po
在Global.aspx中添加:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
//other app start code
UrlLocalizer.UrlLocalizationScheme = UrlLocalizationScheme.Void;
}
}
public class DefaultController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (Session["currentLanguage"] == null)
{
Session["currentLanguage"] = "en";
}
}
}
public class HomeController : DefaultController
{
public HomeController() : base()
{
[AllowAnonymous]
public async Task<ActionResult> SwitchLanguage(string lang)
{
LocalizedApplication.Current.DefaultLanguage = lang;
Session["currentLanguage"] = lang;
return Redirect(Request.UrlReferrer.PathAndQuery);
}
}
}
@if (Session["currentLanguage"].ToString() == "fr")
{
<li class="navItem">@Html.ActionLink("EN", "SwitchLanguage", "Home", new { lang = "en", area = "" }, null)</li>
}
else
{
<li class="navItem">@Html.ActionLink("FR", "SwitchLanguage", "Home", new { lang = "fr", area = "" }, null)</li>
}
构建项目,在浏览器中启动并享受!!!