Локализации и диалекты
Я читал различные композитные дискуссии, касающиеся разработки веб-сайтов не только для многоязычных сценариев, но также и для поддержки локализации словарного запаса и грамматики для конкретного сообщества; например, технические и общественные сообщества.
Я нашел эти дискуссии убедительными, однако они не объяснили, как реализовать эти сценарии в контексте C1 для добавления различных "диалектов".
Я предполагаю, что эти диалекты должны быть вручную добавлены в следующий файл источника данных и обрабатываться как язык: "Composite.Cultures.en-us".
Пожалуйста, объясните, есть ли лучшая практика для обработки вышеупомянутого сценария и есть ли менее ручной метод для его достижения.
2 ответа
Если вы хотите показывать разный контент в одной и той же структуре страницы для разных "диалектов", тогда да - рассматривать их как языки имеет смысл. Список языков извлекается системой из реестра Windows, поэтому, если вы хотите добавить диалект в качестве языка, вы можете зарегистрировать его с помощью некоторого кода ( http://msdn.microsoft.com/en-us/library/ms172469.aspx). Однако я бы не рекомендовал это делать, поскольку связанный процесс ASP.NET должен был бы иметь доступ к реестру Windows, и каждый раз, когда вам нужно переместить сайт в новую среду, может потребоваться дополнительная работа.
Вы также можете использовать существующий культурный код, который вы не собираетесь использовать в качестве переключателя диалектов Fe en-US / en-GB / en-AU.
Другой альтернативой может быть наличие отдельных заполнителей для контента на каждой странице, один для технических пользователей и еще один для нетехнических. Тот или иной будет отображаться в зависимости от URL /cookie. При таком подходе вы также должны решить, хотите ли вы сохранить их под одним и тем же URL для сканеров или под разными, должны ли страницы иметь одинаковые комментарии или разделяться и т. Д.
Если сайты на диалектах не сохраняют одинаковую структуру страниц, вы также можете решить, что они должны быть разными деревьями страниц, и использовать какое-либо поле метаданных для связи связанных страниц друг с другом, когда это необходимо.
Я не уверен, что понимаю вопрос. Это потому, что вы хотите, чтобы на вашем веб-сайте была определенная строка, которая говорила бы по-разному, в зависимости от того, кто вошел в систему, а не на каком языке показывается сайт?
Файлы локализации по умолчанию в С1 находятся в ~/Composite/localization
в формате Some.Namespace.language.xml
, Это означает, что если ваш сайт на американском английском, но вы хотите показывать разные версии определенных строк для техников или других, вы можете создать следующие xml-файлы
- My.Component.General.en-us.xml
- My.Component.Technical.en-us.xml
И когда вам нужно получить строки для отображения, у вас будет следующая логика
var ns = "My.Component";
var mode = is_tech ? "Technical" : "General";
return StringResourceSystemFacade.GetString(ns +"."+ mode, "title");