2010-06-08 3 views
5

У меня есть веб-сайт, который выходит на несколько клиентов. Иногда клиент настаивает на незначительных изменениях. По причинам, не зависящим от меня, я должен подчиняться независимо от того, насколько незначительна просьба. Обычно это не проблема, я просто создаю клиентскую версию пользовательского элемента управления или страницы и перезаписываю по умолчанию во время сборки или создаю настройку конфигурации для ее обработки.Изменение места нахождения ресурса во время выполнения?

Теперь, когда я локализую сайт, мне любопытно, как лучше всего внести незначительные изменения в формулировки.

Скажем, у меня есть файл ресурсов Resources.resx, в котором есть 300 ресурсов. У этого есть ресурс, названный Continue. Английская ценность - «Продолжить», французское значение - «Продолжение».

Теперь один клиент по какой-либо причине хочет, чтобы он сказал «Далее» и «Апрес», а остальные хотят сохранить его. Каков наилучший способ размещения такого запроса? (Это простой пример).

только два способа я могу думать о том, чтобы

  • Создать другой Resources.resx специфичные для клиента, и заменить .dll во время сборки. Поскольку я буду полностью заменять dll, новый файл ресурсов должен содержать все 300 строк. Очевидная проблема заключается в том, что у меня теперь есть 2 файла ресурсов, каждый из которых содержит 300 строк.
  • Создайте пользовательский элемент управления/страницу и измените его, чтобы использовать пользовательский файл ресурсов. например SignIn.ascx будет заменен во время сборки, и он потянет свои ресурсы с ClientName.resx вместо Resources.resx.

Есть ли какие-нибудь другие вещи, которые я мог бы попробовать? Есть ли способ изменить его, чтобы приложение всегда выглядело в файле ClientResources.resx для переопределенных значений, прежде чем фактически посмотреть на указанный файл ресурсов?

ответ

1

Вы могли бы, возможно, использовать следующий шаблон:

#if ClientName1 
Continue="Next"; 
#elif ClientName2 
    Continue="Apres"; 
#else 
Continue="Continue" 
#endif 

Это позволяет определить все возможные значения в том же файле (и ту же переменную в том же регионе), и вы можете легко определить символ " ClientName1 "из командной строки во время сборки.

0

Ненавижу говорить об этом, но самым простым может быть изменение файлов ресурсов приложения с помощью специального действия при установке.

Использование ResXResourceWriter/ResXResourceReader и открытие существующих файлов ресурсов для целевой культуры и повторение тегов, которые вы хотите изменить. Это, очевидно, имеет смысл только в том случае, если для конкретного клиента существует несколько незначительных изменений. Это также предполагает, что файлы ресурсов не встроены в сборку.

Создание пользовательских действий для установщика Windows очень просто, если вы в порядке, запустив их после завершения установки.

Альтернативой может быть замена компонента ComponentResourceManager по умолчанию собственной версией, которая выборочно изменяет значения тегов. Это также может стать ужасно быстрым.

Последний взлом, который я могу придумать, заключается в том, чтобы поместить весь перевод по умолчанию в файл базового ресурса. В файле настраиваемых ресурсов необходимо изменить теги, которые это интересует. Любой тег, оставленный пустым, получит исходное значение.Я не уверен, насколько это реалистично, поскольку культура по умолчанию, вероятно, является английской ...

Редактировать: Это может быть менее хакерское (все еще взломанное!) Решение. Вы можете создать другой файл ресурсов в той же культуре, как бельгийский французский. Бельгийский файл ресурсов Франции по сути будет наследовать от файла ресурсов Франции. Это позволит вам изменить только несколько текстовых ресурсов. Затем в вашем приложении измените текущую культуру на «fr-BE» вместо «fr». Клиент, вероятно, никогда не узнает.

Смежные вопросы