Как локализовать веб-сайт, управляемый базой данных

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Я играл со встроенными функциями локализации .NET, и, похоже, все они полагаются на помещение данных в файлы resx.

Но большинство систем не могут на это положиться, поскольку они управляются базой данных.Так как же решить эту проблему?Есть ли встроенный способ .NET или вы создаете таблицу переводов в SQL и делаете все это вручную?И если вам приходится делать это на большинстве ваших сайтов, есть ли смысл вообще использовать способ локализации resx?

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

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

Решение

По моему мнению, локализация динамического контента (например, часто задаваемых вопросов) должна выполняться вами в вашей базе данных.В зависимости от того, как хранятся ваши вопросы, я, вероятно, создам столбец «локаль» и буду использовать его при выборе вопросов часто задаваемых вопросов из базы данных.Я не уверен, что это будет хорошо масштабироваться, когда вы начнете локализовать множество таблиц.

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

Вот некоторые ссылки по теме:

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

Для данного элемента в вашей модели данных разделите часть описания на локализованную таблицу со столбцом идентификатора локали (LCID).

Таким образом, таблица Product фактически не будет содержать описание или название продукта, а только его фиксированные значения (ProductId, EAN, NumberInStock, NextStockData, IsActive, IsPublished) и т. д.

ProductDescription затем содержит ProductId, название, описание, LCID

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

Вариант А

Item (ItemID, ...)
ItemLocal (ItemID,LocaleID,....)

Вариант Б

Item (ItemID, ...)
Item_ENUS (ItemID,....)
Item_ENGB (ItemID,....)
Item_FR (ItemID,....)

Третий вариант, о котором я подумал недавно, и который был бы очень хорош, если бы база данных поддерживала его изначально, — это хранить значения для всех локальных значений в одном и том же поле.А если поле было настроено как varchar-multilocal, вам нужно будет получить к нему доступ, передав параметр для указания языка.Ничего подобного, насколько я знаю, не существует, но я думаю, что это действительно сделает все намного проще и более плавно.

В настоящее время перевод не может выполняться автоматически.Лучший способ — заставить человека перевести и использовать методы Ника, чтобы показать правильный язык.

Мы используем сочетание файлов RESX и варианта ответа Кибби.Мы создали простой инструмент для онлайн-управления файлами RESX:http://blog.lavablast.com/post/2008/02/RESX-file-Web-Editor.aspx

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