Kentico MVC文化URL模式中的两个字母代码

我正在尝试使用两个字母的区域性代码(en)而不是完整的区域性代码(en-US)在Kentico中创建一个更友好的页面URL。我修改了页面URL模式,如下图所示。有没有更好的方法,我应该创建一个自定义宏表达式吗?

我想实现的另一件事是在URL中没有默认区域性。也许我也可以为其使用自定义宏表达式。

Kentico MVC文化URL模式中的两个字母代码

hg999520 回答:Kentico MVC文化URL模式中的两个字母代码

我已经通过自定义宏表达式解决了该问题。 URL模式与DocumentCulture结合使用。宏表达式使用区域性别名(在默认区域性为空的情况下为假)以及两个字母代码,并以“ /”返回。

页面的网址格式:

{%Util.GetUrlCultureCode(DocumentCulture)%}{%NodeAliasPath%}

我为解决此问题而编写的宏表达式如下。

public class CustomCultureMacroExpression : MacroMethodContainer
{
    [MacroMethod(typeof(List<string>),"Returns the url culture code of current document",1)]
    [MacroMethodParam(0,"Culture",typeof(string),"Current culture.")]
    public static object GetUrlCultureCode(EvaluationContext context,params object[] parameters)
    {
        // Branches according to the number of the method's parameters
        switch (parameters.Length)
        {
            case 1:
                return GetCultureAliasOfCulture(parameters[0].ToString());
            case 2:
                // Weird bug causing macro expression in url pattern to have two parameters where the first parameter is null.
                return GetCultureAliasOfCulture(parameters[1].ToString());
            default:
                // No other overloads are supported
                return string.Empty;
        }
    }

    private static string GetCultureAliasOfCulture(string cultureCode)
    {
        var culture = CultureInfoProvider.GetCultureInfo(cultureCode);
        var culturealias = culture?.CultureAlias ?? string.Empty;

        return string.IsNullOrEmpty(culturealias) ? string.Empty : $"/{culturealias}";
    }
}
,

您可以尝试在Localization-> Cultures中更新文化代码,但是我不确定它是否没有副作用

,

如果使用Dynamic Routing module,则可以加入GetCulture和GetPage全局事件以执行所需的操作。

对于GetCulture,您将检查URL是否具有2个字母的区域性代码,如果确实如此,则将其用作区域性。

您也可以根据需要调整GetPage,尽管生成的URL标记应该可以正常工作,除非您希望在GetPage上回退该URL。如果没有找到页面,则可以尝试从URL中删除任何区域性并以此查找页面。

为便于使用,我建议对UrlPattern的其余部分使用NodeAliasPath。

本文链接:https://www.f2er.com/2738029.html

大家都在问