C# 如何将我的网站转换为支持多种语言的网站

C# 如何将我的网站转换为支持多种语言的网站,c#,asp.net,asp.net-mvc,multilingual,web-site-project,C#,Asp.net,Asp.net Mvc,Multilingual,Web Site Project,我用ASP.net&c开发了这个网站,它支持英语,但现在我想把我的网站转换成英语 多语言支持的网站。请任何人解释一下,怎么做?我面临的问题是什么? <div id="google_translate_element"></div> <script type="text/javascript"> function googleTranslateElementInit() { new google.translate.TranslateElement({pa

我用ASP.net&c开发了这个网站,它支持英语,但现在我想把我的网站转换成英语 多语言支持的网站。请任何人解释一下,怎么做?我面临的问题是什么?


<div id="google_translate_element"></div>

<script type="text/javascript">
function googleTranslateElementInit() {
  new google.translate.TranslateElement({pageLanguage: 'en'}, 'google_translate_element');
}
</script>

<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
函数googleTranslateElementInit(){ 新的google.translate.TranslateElement({pageLanguage'en'},'google_translate_element'); }
对于c#后端:

  • 在您的解决方案中创建一个新的语言项目,给它一个类似ProjectName.language的名称。向其中添加一个名为Resources的文件夹,并在该文件夹中为要支持的每种语言创建资源文件(.resx)

  • 对项目的引用:右键单击
    References->addreference->Prjects\Solutions

  • 在文件中使用命名空间:
    使用ProjectName.Language

  • 像这样使用:
    string someText=Resources.productGeneralErrorMessage


通常,您可以动态加载视图页面中的标签和文本,标签数据存储在本地数据库中。根据预期页面请求的数量,您可以使用类似SQLite的lite权重数据库

放置按钮供用户选择语言

基本方法: 通过NUGET软件包管理器安装SQLite

添加using语句

using System.Data.SQLite;
创建一个名为mydb.db的数据库

SQLiteConnection.CreateFile("mydb.db"); 
创建一个连接方法



 public const string connectionString = @"Data Source=.\mydb.db;Version=3";
    public static SQLiteConnection ConnectionFactory()
    { return new SQLiteConnection(connectionString); }


创建标签表方法:




     public void CreateTable()
                {
                              string createTableQuery= 
                                 @"CREATE TABLE IF NOT EXISTS [LabelLanguage] (
                                 [id] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
                                 [labelName] Text NULL,
                                 [englishValue] Text NULL,
                                 [germanValue] Text Null
                                )";

                    using (IDbConnection connection = ConnectionFactory())
                    { connection.Execute(createTableQuery);}

                }

用信息填充数据库表


    public void SaveQuery()

//一种更好的方法是创建一个标签和值的列表,并使用为每个标签和值创建一个列表来将它们添加到数据库中 //插入带有房屋值的标签1

        {      



string saveQuery = @""insert into LabelLanguage
                          (labelName, englishValue, germanValue) values 
                           (label1, house, hous)  "
        using (IDbConnection connection = new SQLiteConnection(connectionString))
               { 
                  connection.Execute(saveQuery);
               }
//插入标签2以显示car值


     saveQuery = @""insert into LabelLanguage
                               (labelName, englishValue, germanValue) values 
                                (label1, car, Wagen)  "
              using (IDbConnection connection = new SQLiteConnection(connectionString))
                    { 
                       connection.Execute(saveQuery);
                    }

         }
 ```

Create a class to hold label values


首先,如果我们谈论的是本地化:

有一种方法可以做到这一点

在解决方案资源管理器中,创建一个名为:Resources

转到您的
Startup.cs

在您的
ConfigureServices
文件夹中注册资源的本地化设置:

services.AddLocalization(options =>
{
      // Store localization files under the Resources folder.
      options.ResourcesPath = "Resources";
});
在注册MVC时,请在
ConfigureServices
中添加以下内容:

services.AddMvc()
     .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)                           
     .SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2);

services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new List<CultureInfo>
    {
         new CultureInfo("en-US"), // => English option
         new CultureInfo("it-it")  // => Italian option
    };
    options.DefaultRequestCulture = new RequestCulture("en-US");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});
var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(options.Value);
//This will be your main Cookie Culture Info controller.
public class LanguageController : Controller
{
     [HttpPost]
     public IActionResult SetLanguage(string culture, string returnURL)
     {
         Response.Cookies.Append(
             CookieRequestCultureProvider.DefaultCookieName,
             CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))                
             );

         return LocalRedirect(returnURL);
     }
}
现在请创建一个名为can=>
LanguageController.cs

请添加以下内容:

services.AddMvc()
     .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)                           
     .SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2);

services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new List<CultureInfo>
    {
         new CultureInfo("en-US"), // => English option
         new CultureInfo("it-it")  // => Italian option
    };
    options.DefaultRequestCulture = new RequestCulture("en-US");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});
var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(options.Value);
//This will be your main Cookie Culture Info controller.
public class LanguageController : Controller
{
     [HttpPost]
     public IActionResult SetLanguage(string culture, string returnURL)
     {
         Response.Cookies.Append(
             CookieRequestCultureProvider.DefaultCookieName,
             CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))                
             );

         return LocalRedirect(returnURL);
     }
}
现在,您必须在资源文件下创建
.resx
文件: 假设您有一个
HomeController.cs
和一个
public IActionResult Index()
方法, 因此,对于此页面,您必须创建一个
.resx
文件,如下所示:

services.AddMvc()
     .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)                           
     .SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2);

services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new List<CultureInfo>
    {
         new CultureInfo("en-US"), // => English option
         new CultureInfo("it-it")  // => Italian option
    };
    options.DefaultRequestCulture = new RequestCulture("en-US");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});
var options = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(options.Value);
//This will be your main Cookie Culture Info controller.
public class LanguageController : Controller
{
     [HttpPost]
     public IActionResult SetLanguage(string culture, string returnURL)
     {
         Response.Cookies.Append(
             CookieRequestCultureProvider.DefaultCookieName,
             CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture))                
             );

         return LocalRedirect(returnURL);
     }
}
->英式
Views.Home.Index.en-US.resx

->意大利人
Views.Home.Index.it.resx

这些.resx文件易于使用,如Excel视图和xml格式,您必须为每个.resx文件提供相同的键,但不同的值

示例:

->en-US.resx->键:你好,值:
你好

->it-it.resx->键:您好和值:再见

现在,您可以在
Index.cshtml
文件中的视图文件夹下使用它:

示例:
@Localizer[“Hello”]
现在,您可以在您的网站中创建一个表单,无论您想在何处创建,让我们假设您想在
导航栏上创建它

转到您的
navbar.cshtml
(在我的示例中,这可以是您站点中的任何不同页面)

并在
.cshtml

@{
    var requestCulture = Context.Features.Get<IRequestCultureFeature>();
    var cultureItems = LocOptions.Value.SupportedUICultures
        .Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
        .ToList();
}

注意:因为
。resx
文件是XML格式的,您可以在任何地方使用它们,而且使用起来非常方便。

是的,我尝试了此代码,但答案无助于回答问题。请解释您的代码以及它如何解决问题中所述的问题。
<form asp-controller="Language" asp-action="SetLanguage" id="selectLanguage" 
      asp-route-returnURL="@Context.Request.Path" method="post" class="form-horizontal" role="form">
    <ul class="navbar mt-auto">
            <li class="nav-item dropdown">               
               <button name="culture" value="@cultureItems[1].Value" type="submit">
                    <span class="flag-icon flag-icon-us mr-1"> </span> 
               @cultureItems[0].Value
               </button>
               <br />
               <button name="culture" value="@cultureItems[2].Value" type="submit">
                    <span class="flag-icon flag-icon-it mr-1"> </span> 
                @cultureItems[1].Value</button>
          </li>
   </ul>
</form>