Kentico MVC культура двухбуквенный код в шаблоне URL - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь создать более дружественный URL-адрес страницы в Кентико с двухбуквенным кодом культуры (en) вместо полного кода культуры (en-US). Я изменил шаблон URL страницы, как показано на рисунке ниже. Есть ли лучший способ сделать это, я должен создать собственное выражение макроса?

Еще одна вещь, которую я хотел достичь, это наличие культуры по умолчанию, а не URL-адреса. Может быть, я мог бы также использовать пользовательское выражение макроса для него.

Current situation

Ответы [ 3 ]

1 голос
/ 23 января 2020

Я решил проблему с пользовательским выражением макроса. Это используется в шаблоне URL в сочетании с DocumentCulture. Выражение макроса принимает имя псевдонима культуры, которое в случае культуры по умолчанию пусто, а также двухбуквенный код, и возвращает его с помощью «/».

Шаблон URL для страницы:

{%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}";
    }
}
0 голосов
/ 22 января 2020

Если вы используете Dynami c Routing module , вы можете подключиться к глобальным событиям GetCulture и GetPage, чтобы сделать то, что вы ищете.

Для GetCulture вы бы проверьте, имеет ли URL двухбуквенный код культуры, если он используется, то используйте его в качестве языка.

Вы также можете настроить GetPage, если необходимо, хотя слагы сгенерированного URL должны работать правильно, если только вы не хотите падение вернемся к этому на GetPage.After, если не найдена страница, вы можете попробовать удалить любую культуру из URL и найти страницу по ней.

Я рекомендовал использовать NodeAliasPath для оставшейся части UrlPattern для удобства использования.

0 голосов
/ 21 января 2020

Вы можете попытаться обновить коды культур в Localization -> Cultures, однако я не уверен, что у них не будет побочных эффектов

...