ASP.NET Локализованный веб-сайт & # 8212; обновление на лету

StackOverflow https://stackoverflow.com/questions/417729

  •  03-07-2019
  •  | 
  •  

Вопрос

Я думаю, что у меня есть решение, но есть ли лучший способ, или это сломает меня?

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

Это кажется достаточно простым - у меня есть форма для отображения строк, и изменения сохраняются с кодом, подобным следующему фрагменту:

string filename = MapPath("App_GlobalResources/strings.hu.resx");
XmlDocument xDoc = new XmlDocument();
XmlNode xNode;

xDoc.Load(filename);
xNode = xDoc.SelectSingleNode("//root/data[@name='PageTitle']/value");
xNode.InnerText = txtNewTitle.Text;
xDoc.Save(filename);

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

Это было полезно?

Решение

Ранее я использовал аналогичный метод для очень простой " CMS " ;. Сайт не использовался массово, но он не доставлял мне никаких проблем.

Я не думаю, что изменение resx приведет к рециркуляции.

Другие советы

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

Тем не менее, я думаю, что ваш метод должен работать нормально.

Рассматривали ли вы создание объекта Resource? Вам нужно будет обернуть ваши настройки в один объект, который будет использовать весь клиентский код. Что-то вроде:

public class GuiResources
{
    public string PageTitle
    {
        get return _pageTitle;
    }

    // Fired once when the class is first created.
    void LoadConfiguration()
    {
        // Load settings from config section
        _pageTitle = // Value from config
    }
}

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

Затем в своем файле web.config вы можете создать пользовательский раздел и установите restartOnExternalChanges = " true " . Таким образом, ваше приложение получит изменения, когда они будут сделаны.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top