Советы по многоязычной стратегии ASP.NET - PullRequest
3 голосов
/ 01 сентября 2009

Привет, братья и сестры,

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

У меня есть клиент, который хочет иметь систему полу-ППМ, в которой хранятся все материалы и спецификации продукта. Эта информация впоследствии будет использоваться для других модулей, таких как «Счета-фактуры», «Закупки», «Маркетинг» (извлечение информации для печати) и многих других.

Дело в том, что он хочет, чтобы все хранилось на нескольких языках. Он также не может фиксировать количество языков. Следовательно, количество языков будет расти с течением времени.

Итак, я думаю, что я спрашиваю, какова лучшая стратегия для настройки веб-сайта с поддержкой динамического языка, который включает имена полей (например, имя), а также их данные (например, Ласкер).

Большое спасибо заранее, Ласкер

Ответы [ 2 ]

4 голосов
/ 01 сентября 2009

Доступно несколько вариантов.


Во-первых, к меткам и элементам пользовательского интерфейса .

Здесь, как правило, возможны два варианта: вы либо используете ресурсы (* .resx), либо разворачиваете свою собственную многоязычную поддержку на уровне базы данных. У них обоих есть свои преимущества и недостатки.

Resoures:

[+] Простое решение, все готово к немедленному использованию. Вы определяете текстовый ресурс в семействе файлов с именами, такими как Orders.en.resx, Orders.fr.resx и т. Д. В коде вы ссылаетесь на эти строки как Resources.Orders.Title. Так что это простое решение для статических элементов пользовательского интерфейса.

[+] Файлы ресурсов - это, по сути, простые XML-документы, которые можно быстро прочитать и проанализировать, так что это не приведет к значительным потерям или снижению производительности.

[-] Если вам нужно что-то изменить, вам придется перекомпилировать проект. Следовательно, это означает, что вам понадобится установить среду разработки (VS) для всех, кто может подумать об обновлении текстов. Затем вам также нужно будет снова развернуть перекомпилированную версию. То же самое касается введения новых языков в систему.

[-] Не будет работать для нетехнических вещей, так как требуется участие специалистов.

Специальное многоязычное решение на основе базы данных:

[-] Потребуется некоторое усилие и время для разработки и реализации

[-] Каждый отдельный текст пользовательского интерфейса будет извлечен из базы данных, что означает падение производительности и дополнительную нагрузку на базу данных

[+] Позволяет динамически изменять текст на лету и удалять / добавлять новые языки. Перекомпиляция или развертывание не требуются.

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


Теперь к динамическим текстам (фактическое содержание).

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

Несколько записей:

Представьте себе следующую модель базы данных:

[Language]
-----------------
ID    Description

[Translation]
------------------
ID    FallbackText

[TranslationText]
--------------------------------
ID    TRID    LanguageID    Text

[Order]
------------------------------------------------
ID    TitleTRID    DescriptionTRID    RemarkTRID

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

Одно лицо:

Вы храните все переводы для данного текста в одной строке, используя некоторые средства различения конкретных переводов. XML естественно работает здесь.

<translation>
  <en>Order</en>
  <de>Bestellung</de>
  <fr>Commande</fr>
</translation>

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


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

Надеюсь, это поможет. :)

0 голосов
/ 01 сентября 2009

у нас была та же головоломка, и New in Town в основном дал варианты.

почему мы выбрали опцию resx, главным образом потому, что в большинстве случаев, особенно веб-сайтах, все, что нужно изменить, - это статический контент, то есть метки, элементы пользовательского интерфейса. Если вы работаете с VS, после того, как вы создадите страницу, есть возможность создать для вас файлы resx. Это можно найти в разделе «Создать локальный ресурс» в разделе «Инструменты». Это подберет все элементы, которые имеют идентификаторы (это важно), и сгенерирует первый файл resx для вас. после этого довольно просто создавать копии для разных языков.

изменить язык так же просто, как изменить ваш web.config. пример

<globalization enableClientBasedCulture="true" culture="ar-EG" uiCulture="ar-EG"/> 

надеюсь, что поможет

...