Я решил проблему с пользовательским выражением макроса. Это используется в шаблоне 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}";
}
}