我们使用Smart internationalization for ASP.NET。
特点
- 本地化所有内容:HTML、Razor、C#、VB、JavaScript、.NET 属性
和数据注释,...;
- SEO 友好:语言选择会改变 URL,并且 Content-Language 设置适当;
- 自动:应用中无需更改 URL/路由;
- 高性能、最小开销和最小堆分配;单元测试支持;
- 智能:根据 i18n 最佳实践,知道何时握住、折叠、走开或奔跑。
我如何在项目中逐步使用i18n:
将 I18N nuget 包添加到您的 MVC 项目中。
-
在 Web.config 中:
将名为“locale”的文件夹添加到站点的根目录。为您希望支持的每种文化创建一个子文件夹。例如,/locale/fr/。
将 i18n.PostBuild.exe 复制到语言环境文件夹中
右键单击项目名称 --> 属性 --> 构建事件:
在构建后事件命令行中:
"$(TargetDir)i18n.PostBuild.exe" "$(ProjectDir)\web.config"
在视图中使用[[[some text]]] 稍后翻译它
构建项目
刷新解决方案资源管理器并推送显示所有文件
将“locale”文件夹中的所有文件包含到项目中
提供 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";
}
}
}
- 在 HomeController 中添加 DefaultController 和 SwitchLanguage(string lang) 的继承:
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);
}
}
}
- 在导航栏视图(在我的例子中为_LoginPartial.cshtml)添加链接以在语言之间切换:
@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>
}
构建项目,在浏览器中启动并享受!!!
请参阅以下方面的帮助:
https://www.codeday.top/2017/09/19/42409.html