C# 如何将我的网站转换为支持多种语言的网站
我用ASP.net&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
<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
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>