Localizing a Form
You can change the structure of a form depending on the locale. For example, you can include different address fields, such as state or province, depending on the country. To localize the form structure, you can create different form definitions for each locale. These form definitions have the same name, but a different structure or different fields for different locales.
In your cartridge, create a forms/default
folder for the standard locale
and then separate folders that are named for each locale of the form. Store a different
form definition in each locale folder. If a locale doesn't have a separate folder, the
default form definition is used.
forms
default
billingaddress.xml
it_IT
billingaddress.xml
ja_JP
billingaddress.xml
Localizing Strings Within Simple Forms
You can use resource strings directly from a form. The following example is of the
loginform.isml
that logs customers into the site. In this case, the
form uses the label.input.login.email resource string identifier.
<form action="${pdict.actionUrl}" class="login" method="POST" name="login-form">
<div class="form-group required">
<label class="form-control-label" for="login-form-email">
${Resource.msg('label.input.login.email', 'login', null)}
</label>
<input type="email" id="login-form-email" class="form-control" name="loginEmail" value="${pdict.userName}">
<div class="form-control-feedback"></div>
</div>
Depending on the locale, this resource identifier resolves to different values
In the English
app_storefront_base/cartridge/templates/resources/login.properties
file:
label.input.login.email=Email
In the French
app_storefront_base/cartridge/templates/resources/login_fr_FR.properties
file:
label.input.login.email=E-mail
Localizing Strings Within Complex Forms
All form strings can be replaced with resource strings. Resource strings for forms are
located by default in the forms.properties
file for your cartridge and
referenced from the form definition file. Add files with the name
forms_locale_.properties
to add localized strings. For example, add
a forms_it_IT.properties
file for an Italian version of the same
properties. You can have different fields for the form, depending on the locale. Make
sure that the strings for those fields are included in the localized version of the
properties files.
Example: Localizing Labels and Error Messages
The following form definition file defines a form to enter contact information. This
example doesn't show the entire form definition, just some of the fields that use
localized strings for labels and error messages. You can find this file as the
contactus.xml
form in the SiteGenesis
cartridge.
app_storefront_core
<?xml version="1.0"?>
<form xmlns="http://www.demandware.com/xml/form/2008-04-19">
<field formid="firstname" label="contactus.firstname.label" type="string" mandatory="true" binding="firstName" max-length="50"/>
<field formid="lastname" label="contactus.lastname.label" type="string" mandatory="true" binding="lastName" max-length="50"/>
<field formid="email" label="contactus.email.label" type="string" mandatory="true" parse-error="contactus.email.parse-error" />
The
label and error strings in bold reference the properties set in the
forms.properties
file, which contains entries like the following
for the default site locale:
##############################################
# Template name: forms/contactus
##############################################
contactus.firstname.label=First Name
contactus.lastname.label=Last Name
contactus.email.label=Email
contactus.email.parse-error=The email address is invalid.
forms_it_IT.properties
file (along with the
other locale-specific forms_locale_.properties
files) with entries like
the
following:
##############################################
# Template name: forms/contactus
##############################################
contactus.firstname.label=Nome
contactus.lastname.label=Cognome
contactus.email.label=Email
contactus.email.parse-error=L'indirizzo email non รยจ valido.