Как интернационализировать данные, которые пришли из базы данных? - PullRequest
3 голосов
/ 02 октября 2011

У меня есть веб-сайт ASP.NET MVC, который использует файлы ресурсов для интернационализации пользовательского интерфейса.Некоторые данные в базе данных будут сгенерированы пользователями (на их языке), но некоторые данные сгенерированы мной, и пользователи не должны их редактировать.Для этих системных данных мне нужно было бы просто сохранить «токен» в базе данных и перевести его в момент его воспроизведения пользователю на его языке.

Мне действительно не нравится идея иметьперевод в базе данных и объедините каждый текстовый столбец с таблицами перевода.

Какие у меня есть альтернативы для достижения этой цели?Может быть гибрид БД и ресурсов?

РЕДАКТИРОВАТЬ: Количество языков не определено, так как сейчас мы работаем с 3 языками, но я надеюсь, что нам может понадобиться много других.*

РЕДАКТИРОВАТЬ 2: Это в основном для данных каталога ... некоторые каталоги содержат системные и пользовательские данные в одной таблице.Системные данные требуют перевода, поскольку пользователь не может их редактировать.

Ответы [ 2 ]

1 голос
/ 02 октября 2011

На самом деле вы можете хранить только идентификаторы в базе данных и преобразовывать их в языковой контент из файлов ресурсов (обычный * .resx) во время выполнения.
Хотя в таком случае совсем не имеет смысла хранить это в базе данных (достаточно использовать файлы ресурсов). И, конечно, поддержание этого было бы кошмаром (вам нужно было бы фактически синхронизировать содержимое базы данных с файлами ресурсов).

Кроме этого, вы могли бы фактически создать свой собственный Resource Manager для чтения содержимого из базы данных и поместить переводы вместе с идентификаторами - в таком случае ваш первичный ключ должен быть определен как по идентификатору ресурса, так и по языку (I думаю, это называется составной ключ, не так ли?):

---------------------------------------------------------
| Id | Locale | Translation                             |
---------------------------------------------------------
| 1  | en-US  | Something happened on the way to heaven |
| 1  | pl     | Coś się stało na drodze do nieba        |
---------------------------------------------------------

Но для этого потребуется изменить схему базы данных ...

0 голосов
/ 10 октября 2011

Мне непонятно, читая ваше сообщение, поддерживаете ли вы пользовательский контент вместе с вашим собственным локализуемым контентом в той же таблице БД.Если это так, похоже, вы должны рассмотреть их разделение.

Если ваш собственный контент стабилен (то есть вы не будете добавлять новый контент или менять его между развертываниями обновлений вашего приложения), тогда ондолжны храниться в ваших локализуемых ресурсах, а не в базе данных, и вы должны обращаться с ними так же, как с локализованным пользовательским интерфейсом.

Если, с другой стороны, это динамический контент, то, похоже, нет альтернативы его хранению вDB.Вам потребуется хранить идентификатор содержимого, а также идентификатор языка для каждого (составной ключ, на который ссылается Павел Дида) в отдельной таблице локализации, которая содержит переведенные версии каждого содержимого.Или, возможно, вы могли бы полагаться на многоязычную CMS для управления этим многоязычным контентом (см., Например, плагин WPML для WordPress)

...