Расширение ResourceExpressionBuilder с помощью пользовательского ExpressionBuilder - PullRequest
0 голосов
/ 12 февраля 2020

Я работаю над приложением. NET, которое в настоящее время локализовано с использованием файлов .resx.

Ресурсы используются по-разному, но большинство используется через синтаксис построителя выражений:

<asp:Literal runat="server" Text="<%$ Resource: Generic, Title %>" />

У нас есть дополнительное требование, которое означает, что определенные слова и фразы в приложении будут различаться в зависимости от компании / пользователя, вошедшего в систему. Первоначально я хотел реализовать список всех терминов компании в пара значений ключа и во время выполнения отправьте их через Replace() logi c, чтобы слова могли быть заменены.

Я думал, что возможно расширить ResourceExpressionBuilder с помощью пользовательского ExpressionBuilder, что привело бы к необходимости просто заменить все экземпляры построителя выражений на:

<asp:Literal runat="server" Text="<%$ CompanyTerm: Generic, Title %>" />

Я не уверен, возможно ли это, поскольку я дошел до создания пользовательского построителя выражений, унаследованного от ResourceExpressionBuilder и назвал базу. Вот так:

public class CompanyTermExpressionBuilder : ResourceExpressionBuilder
{
   /// <returns>A <see cref="T:System.CodeDom.CodeExpression" /> that invokes a method.</returns>
    public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
     {
          return base.GetCodeExpression(entry, parsedData, context);
     }
}

Вышеприведенное работает, но, очевидно, просто оборачивает существующую реализацию выражения Resource.

Я действительно хочу быть в состоянии перехватить фактический вывод выражения и передать его через дополнительные логи c.

Так, например, вызов:

<asp:Literal runat="server" Text="<%$ Resource: Generic, Title %>" />

... получит ресурс Generic.Title, как это было ранее, но затем пропустит его через некоторые Компания Термин Логи c. Скажем, у нас был словарь замененных слов, и «Заголовок» → «Название компании» существовал.

Он получит «Заголовок» из .resx, а затем в конструкторе выражений клиентов заменит это извлеченное значение соответствующим ключом в словарь, в данном случае «Название компании».

Надеюсь, все это имеет смысл, но я с удовольствием уточню все, что упустил.

Моя главная причина надеяться на то, что этот метод сработает, заключается в том, что, как я упоминал выше, это означало бы, что я могу просто заменить все экземпляры <%$ Resource: ..., ...%>" /> на <%$ CompanyTerm: ..., ...%>" />, и это будет довольно безопасное изменение, чтобы придать смысл все результаты будут работать так, как они работают в настоящее время, но если на дисплее будет найден соответствующий термин для замены, то это будет сделано.

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

...