ASP.NET Локализованный веб-сайт & # 8212; обновление на лету
-
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 "
. Таким образом, ваше приложение получит изменения, когда они будут сделаны.