Самый простой способ создания форм в Composite C1 CMS - с использованием специального пакета расширения Forms Renderer.
В двух словах, вы создаете тип данных. А затем представляете его поля на странице сайта с помощью функции Composite.Forms.Renderer, которая появляется у вас после установки одноименного пакета расширения.
Функция имеет один главный параметр - тип данных, который нужно использовать с этой формой, а также несколько необязательных, но полезных параметров (например, отсылка уведомления по электронной почте о заполнении формы пользователем).
Надписи полей формы на странице - это надписи полей указанного типа данных. А сообщения, появляющиеся при неправильном заполнении поля формы - это текст справки поля этого типа данных, а если его нет - то стандартное сообщение .NET Framework для такого типа поля.
Типы полей в форме являются эквивалентами виджетов, которые используются для соответствующих полей в типе данных. Но, к сожалению, не все виджеты поддерживаются такой формой. Например, селекторы страниц и медиа-файлов - не поддерживаются, но это вполне логично.
Обычно, когда вы создаете тип данных, то надпись и текст справки для конкретного его поля вы указываете на подходящем вам языке. Если же вы используете
Forms Renderer для форм на страницах, то надписи и сообщения для полей будут показаны именно на этом языке. То есть, если посетитель сайта переключит язык на вашем сайте, надписи и сообщения в такой форме останутся на оригинальном языке, что никак не устроит ни пользователя, ни вас.
Но для этого предусмотрена локализация таких форм:
- Локализация форм, созданных с помощью Forms Renderer, осуществляется с помощью строк из ресурсных файлов, которые вам нужно будет создать отдельно для каждого языка на вашем сайте.
- А в полях "Надпись" и "Справка" вместо строк на одном языке используется специальный синтаксис вызова нужной строки из соответствующего файла.
Создание типа данных и формы
Она создана с помощью Forms Renderer на основе типа данных Demo.Messages с такими полями:
- Имя: Title
- Надпись: Заголовок
- Справка: Укажите заголовок вашего сообщения.
- Тип: Строка (64)
- Обязательное: Да
- Виджет: TextBox
- Имя: Message
- Надпись: Сообщение
- Справка: Напишите сообщение.
- Тип: Строка (512)
- Обязательное: Да
- Виджет: TextArea
И вы уже добавили форму на страницу с помощью функции Composite.Forms.Renderer.
Создание ресурсных файлов для строк на разных языках
Создание ресурсных файлов для строк на разных языках
Теперь вам нужно поместить строки из "Надписи" и "Справки" в ресурсный файл для языка по умолчанию. Условимся, что язык по умолчанию у нас - английский, а второй язык сайта - русский.
Я рекомендую использовать Visual Studio для создания и редактирования ресурсных файлов.
- Открываем наш веб-сайт в Visual Studio.
- Добавляем в корневую папку сайта папку ~/App_GlobalResources, если ее нет (правый клик на корневой папке сайта / Add ASP.NET Folder / App_GlobalResources)
- Создаем ресурсный файл (.resx) в этой папке под названием "Forms.resx": ~/App_GlobalResources/Forms.resx. Это файл для строк на английском языке.
- Добавляем в него нашу строку по английски:
- Name: ContactFormTitleLabel / Value: Title
- Name: ContactFormTitleHelp / Value: Specify the title of your message
- Name: ContactFormMessageLabel / Value: Message
- Name: ContactFormMessageHelp / Value: Write your message
- Теперь делаем копию этого файла, но добавляем в его название суффикс "ru-ru" для русского языка (или соответствующий суффикс для нужного языка): ~/App_GlobalResources/Forms.ru-ru.resx. В этой копии у нас уже есть нужные нам строки, только по-английски.
- Переведем значения этих строк с английского на русский:
- Name: ContactFormTitleLabel / Value: Заголовок
- Name: ContactFormTitleHelp / Value: Укажите заголовок вашего сообщения
- Name: ContactFormMessageLabel / Value: Сообщение
- Name: ContactFormMessageHelp / Value: Напишите вашe сообщение
А теперь воспользуемся этими строками в соответствующих свойствах полей нашего типа данных.
Использование локализированных строк в типе данных
Для вызова строки из ресурсного файла вам следует использовать такой синтаксис:
${Resource, Resources.<имя ресурсного файла>.<имя строки>}
Причем имя ресурсного файла не включает в себя расширение и код языка. В нашем случае оно будет "Forms": ${Resource, Resources.Forms.<имя строки>}
- Откройте тип данных "Demo.Messages" на редактирование.
- На вкладке "Поля" выберите поле "Title".
- В свойстве "Надпись" вставьте: ${Resource, Resources.Forms.ContactFormTitleLabel}
- В свойстве "Справка": ${Resource, Resources.Forms.ContactFormTitleHelp}
- Теперь выберите поле "Message".
- В свойстве "Надпись" вставьте: ${Resource, Resources.Forms.ContactFormMessageLabel}
- В свойстве "Справка": ${Resource, Resources.Forms.ContactFormMessageHelp}
- Сохраните изменения.
Локализация кнопки Submit
Кстати, и кнопку "Submit" на форме можно локализировать подобным образом:
- Добавьте в ресурсные файлы строку для текста на этой кнопке, что-то вроде:
- Forms.resx: Name: SubmitButton / Value: Submit
- Forms.ru-ru.resx: Name: SubmitButton / Value: Отправить
- Вызовите диалог свойств функция Composite.Forms.Renderer на той странице, где она вставлена.
- В параметр Send Button Label переключите на "Константу" и в поле ниже вставьте: ${Resource, Resources.Forms.SubmitButton} (или так, как вы назвали строку)
- Нажмите ОК и сохраните/опубликуйте страницу
Замечу, что если вы уже перевели страницу с формой, то вам нужно будет проделать указанные выше шаги отдельно для страниц с этой формой на каждом языке.
Предыдущие сообщения:
Предыдущие сообщения:
- Создание многоязычного сайта в Composite C1 CMS (1). Введение
- Создание многоязычного сайта в Composite C1 CMS (2). Добавление языка
- Создание многоязычного сайта в Composite C1 CMS (3). Перевод страниц
- Создание многоязычного сайта в Composite C1 CMS (4). Переключение языка
- Создание многоязычного сайта в Composite C1 CMS (5). Перевод данных
Этот комментарий был удален автором.
ОтветитьУдалить