准备Asp​​.net MVC网站的国际化

时间:2016-11-08 03:09:15

标签: asp.net asp.net-mvc localization internationalization globalization

我将开设一个我知道将以多种语言呈现的网站。但是,对于第一个版本,我们只需要英文版。一旦这些功能全部有效,我们就会添加其他语言。

不幸的是,由于Asp.Net Core中没有足够的功能,我们必须在网站上使用Asp.Net MVC 5。我的问题有两个部分:

  1. 目前,哪种做法被认为是最佳方法?使用资源文件并在剃刀页面中加载它们?使用框架?我们能以某种方式使用Asp.Net MVC 6的新本地化和全球化功能吗?还是有更好的选择吗?我个人讨厌使用资源文件。它为代码增加了太多的混乱。
  2. 您是否建议立即使用平面文字,然后将国际化功能添加到网站或立即开始,只添加翻译?

2 个答案:

答案 0 :(得分:1)

我会使用资源文件,似乎是最简单的解决方案。您还可以使用数据库资源提供程序,这样可以减少混乱。

如果您从纯文本开始,稍后添加翻译将变得更加复杂和繁琐。所以我不会这样做。

答案 1 :(得分:0)

我们使用Smart internationalization for ASP.NET

功能

  • 本地化所有内容:HTML,Razor,C#,VB,JavaScript,.NET属性 和数据注释,......;
  • SEO-friendly:语言选择会改变URL,并且内容语言设置得恰当;
  • 自动:应用中无需更改网址/路由;
  • 高性能,最小开销和最小堆分配;单元测试支持;
  • Smart:基于i18n最佳实践知道何时抓住它们,折叠它们,走开或跑步。

我如何在项目中逐步使用i18n:

  1. 将I18N nuget包添加到MVC项目中。

  2. Web服务中的
  3.           

  4. 添加一个名为" locale"的文件夹到您网站的根目录。为您希望支持的每种文化创建一个子文件夹。例如,/ locale / fr /.

  5. 将i18n.PostBuild.exe复制到区域设置文件夹

  6. 右键点击项目名称 - >属性 - >构建事件: 在Post-build事件命令行中:

  7. " $(TARGETDIR)i18n.PostBuild.exe" " $(PROJECTDIR)\的web.config"

    1. 在视图中,使用[[[some text]]]稍后进行翻译

    2. 构建项目

    3. 刷新解决方案资源管理器并按“显示所有文件”

    4. 在"区域设置"中包含所有文件文件夹进入项目

    5. 提供locale \ fr \ messages.po

    6. 中单词的翻译
    7. 在Global.aspx中添加:

    8. public class MvcApplication : System.Web.HttpApplication
      {
          protected void Application_Start()
          {
              //other app start code
              UrlLocalizer.UrlLocalizationScheme = UrlLocalizationScheme.Void;
          }
      }
      
      1. 创建DefaultController:
      2. public class DefaultController : Controller
        {   
            protected override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                base.OnActionExecuting(filterContext);
        
                if (Session["currentLanguage"] == null)
                {
                    Session["currentLanguage"] = "en";
                }
             }    
        }
        
        1. 在HomeController中添加DefaultController和SwitchLanguage的继承(string lang):
        2. 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);
                  }
              }
          }
          
          1. 在导航栏中查看(在我的情况下为_LoginPartial.cshtml)添加链接以在不同语言之间切换:
          2.         @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