【发布时间】:2020-04-30 10:16:58
【问题描述】:
我正在开发一个使用域名来确定本地化文化的 ASP.NET Core 3.1 MVC 网站。
例如,所有发往example.com 域的请求都将具有en-US 文化,而所有发往example.org 域的请求都将具有de-DE 文化。
我修改了我以前未本地化的网站以在视图等中使用本地化。我利用自己的RequestCultureProvider 实现来设置基于域名的文化。结果如下:
-
https://example.com/Products/My-Application/Help使用en-US作为文化并有英文文本。 -
https://example.org/Products/My-Application/Help使用de-DE作为文化并有德语文本。
注意:Products 是控制器,My-Application 是应用程序的名称(来自数据库的 URL slug),Help 是 Products 控制器中的操作。 URL 结构是我用于网站的实际结构。
但是,我还想翻译 URL,同时在实际源代码(控制器类和操作函数)中仅依赖英文名称。
例如,这是一个具有单个操作的虚拟控制器(由于简化,与上面的示例 URL 不同)。
[Controller]
[Route("/Products")]
public class ProductController : Controller
{
[ActionName("EnglishName")]
public IActionResult EnglishName()
{
return View();
}
}
对于这个简化的例子:
- 网址示例:
- 英文网址:
https://example.com/Products/EnglishName - 德语网址:
https://example.org/Produkte/GermanName
- 英文网址:
- 在源代码中(为清楚起见),控制器的
Route的值不得更改。 - 在源代码中(为了清楚起见),
EnglishName操作函数的ActionName的值不得更改。 - 在源代码中(为了清楚起见),动作
EnglishName的函数名称不得更改。 - 在路由上下文中,
Route的值在de-DE文化中应为“/Produkte”。 - 在路由上下文中,
EnglishName操作的ActionName的值在de-DE文化中应为“GermanName”。 - 所有本地化都应使用“常规方式”(.resx 文件,例如视图的本地本地化等)。
如何在不手动构建动态路由表的情况下实现这一点?
目前,我没有起点。例如的搜索结果ASP.NET Core 路由本地化 只是提出了在 URL 中包含文化的答案(域名除外),但这不是我的用例。我尝试为属性使用变量名,但这当然行不通。
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc asp.net-core-3.1