C# ASP.NET Core 3.1,i18n-用户内容本地化

C# ASP.NET Core 3.1,i18n-用户内容本地化,c#,asp.net-core,internationalization,C#,Asp.net Core,Internationalization,我完全没有设计多语言应用程序的经验,我想我应该开始一个学习项目。我正在寻找如何正确实施的最佳实践。当然,我有一个想法,我会怎么做 让我们想象一个非常简单的CMS系统,用户可以创建一个网站并向其中添加页面。因此,只有一种语言支持,一个非常简单的数据库将如下所示: | PageID | Language | Title | Content | |--------|----------|----------|-------------------------| |

我完全没有设计多语言应用程序的经验,我想我应该开始一个学习项目。我正在寻找如何正确实施的最佳实践。当然,我有一个想法,我会怎么做

让我们想象一个非常简单的CMS系统,用户可以创建一个网站并向其中添加页面。因此,只有一种语言支持,一个非常简单的数据库将如下所示:

| PageID | Language | Title    | Content                 |
|--------|----------|----------|-------------------------|
| 1      | hu-HU    | Cím      | Ide jön a tartalom      |
| 1      | en-US    | Title    | Here goes the content   |
| 2      | hu-HU    | Rólunk   | A mi célunk az, hogy... |
| 2      | en-US    | About us | Our goal is...          |
  • 页面ID(int),主键-页面的唯一ID
  • 标题(文本)-页面标题
  • 内容(文本)-页面内容
如果我想支持多种语言,我会添加一个新字段:

  • 语言(文本)-页面的语言,表示为IETF语言标签(如hu hu,en US)
另外,我会更改键,使其成为一个复杂的主键(PageID,Language)。示例数据库如下所示:

| PageID | Language | Title    | Content                 |
|--------|----------|----------|-------------------------|
| 1      | hu-HU    | Cím      | Ide jön a tartalom      |
| 1      | en-US    | Title    | Here goes the content   |
| 2      | hu-HU    | Rólunk   | A mi célunk az, hogy... |
| 2      | en-US    | About us | Our goal is...          |
我想使用Accept Language标头来确定我需要用哪种语言将内容发送到客户端。这是一个非常简单的值,比如

Accept-Language: hu-HU
因为Accept语言是一个优先级列表,所以我将取两个集合(标题列表和我的系统支持的语言)的交集,并从中取优先级最高的语言——假设我们总是有一个非空的交集。但在这里它变得非常困难(至少对我来说)

  • 如果接受的语言是“呼,恩”,我该怎么办?在本例中,我在数据库中没有精确的匹配(因为我有“hu-hu”和“en-US”)。更糟糕的是,标题是“en”,但在数据库中我有“en-US”和“en-GB”

  • 应用程序配置是否应设置支持的语言?我认为这是一个好主意,因为应用程序可以强制用户为每种语言创建内容,但向系统添加新语言可能会非常困难。但是如果它没有存储在配置中,那么用户可能会为hu-hu创建内容,而不是为en-US创建内容

  • 如果客户端以系统不支持的语言请求内容,我该怎么办?我的想法是在这种情况下在应用程序配置中设置“默认语言”

  • ASP.NET Core 3.1中是否有任何支持可以帮助我

  • 嗯。。。这是它通常的实现方式,还是我的方向完全错了