c# - asp mvc 核心 url 本地化
问题描述
我正在尝试本地化我的应用程序的 URL。不幸的是,大多数页面都向我展示了应用本地化的示例,例如:
这不是我想要的。我会像这样本地化 URL:
http://localhost/Bienvenue [法语欢迎词]
在我这边,文化已经通过 cookie 进行了管理,并且与“CookieRequestCultureProvider”类一起工作得很好。
所以我有这些信息,并且页面中的本地化都可以。
我成功注册了我需要的所有路线。上面的两个示例都在工作并显示页面。多亏了这个:
public void Apply(ApplicationModel application)
{
foreach (var controller in application.Controllers)
{
foreach (var action in controller.Actions)
{
var localizedRouteAttributes = action.Attributes.OfType<LocalizedRouteAttribute>().ToArray();
if (localizedRouteAttributes.Any())
{
foreach (var localizedRouteAttribute in localizedRouteAttributes)
{
var localizedVersions = GetLocalizedVersionsForARoute(localizedRouteAttribute.Name); // GetLocalizedVersionsForARoute contains all routes translated and group by culture.
foreach (var localizedVersion in localizedVersions)
{
if (!action.Selectors.Any(s => s.AttributeRouteModel.Template == localizedVersion.Template))
action.Selectors.Add(new SelectorModel(action.Selectors.First()) { AttributeRouteModel = localizedVersion });
}
}
}
}
}
}
所以 mvc 取 Selectors 中的最后一个路由寄存器(如果是 FR,则取 FR 路由)。我无法通过这段代码管理其他路线,因为它与应用程序一起加载。并且不能用于动态使用(该应用程序允许在我需要时更改语言)。
提前致谢。
解决方案
我发现这个示例项目有效:https ://github.com/tomasjurasek/AspNetCore.Mvc.Routing.Localization
设置好后,您可以使用
[LocalizedRoute("culture", "RouteName")]
为您想要一个唯一名称的每种文化执行此操作,它创建的动态路线将转换为正确的操作并执行它。它还有一个用于创建翻译链接的标签助手,但如果你想使用 Url.Action 或 Html.ActionLink,我发现你必须创建将文化考虑在内的扩展方法才能让它们充分发挥作用。
在您的情况下,希望它们在路由级别而不是 /culture/Controller/Action 可能需要更多的工作,但这对您来说可能是一个有用的起点。
推荐阅读
- c++ - 递归帕斯卡三角规划的成本分析
- php - 暴露隧道应用程序,无法在 Mac 上运行
- c++ - F#:使用自定义类型参数调用本机函数
- ember.js - 关于 Ember 教程的问题,为什么链接 http://localhost:4200/rentals/grand-old-mansion 不起作用
- google-sheets - 谷歌电子表格更改标签
- python - 基数排序python语法
- python-3.x - doopl bin目录路径
- parsing - 关于解析pdf时没有Unicode映射错误
- android - 无法阻止 android apk (release) 中的屏幕截图
- java - Java 中的泛型与 Java 中的非泛型的区别