TYPO3 Flow / Fluid - translating select fields
In a TYPO3 Flow project, I had to create a select box with countries, from which the user could select one. This task is really easy with TYPO3 Flow. Just create a domain and repository for the countries, add the necessary templates and create the country-records. Now you are ready to create a relation from a existing domain (e.g. a domain with some address-fields) to the country domain. No problems here. But what, if you want to translate the country-names in different languages?The Fluid viewhelper "f:form.select" seems to have an argument called "translate" which can handle translation of select fields labels. I could'nt find a tutorial how to use this argument and finally found out, that everything was described directly in the viewhelpers class.
Here is a short summary on how to use the f:form.select viewhelper together with the "translate" argument.
Assume you have an domain called "country". It only has one property called "alpha2", which is a string representing the country's ISO-3166 alpha2-code. You create some records in the new domain like "DE" for Germany, "DK" for Denmark and so on. You also have an domain called "address", where you have a relation to the country domain.
The first thing to do is to create the translation files. In this example I create one for english and one for german.
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file original="" source-language="en" datatype="plaintext">
<body>
<trans-unit id="DE">
<source>Germany</source>
</trans-unit>
<trans-unit id="DK">
<source>Denmark</source>
</trans-unit>
</body>
</file>
</xliff>
<?xml version="1.0" encoding="UTF-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file original="" source-language="en" target-language="de" datatype="plaintext">
<body>
<trans-unit id="DE">
<source>Germany</source>
<target>Deutschland</target>
</trans-unit>
<trans-unit id="DK">
<source>Denmark</source>
<target>Dänemark</target>
</trans-unit>
</body>
</file>
</xliff>
Next you should configure your f:form.select viewhelper, so it uses the translations.
<f:form.select property="country" id="country" options="{countries}" optionLabelField="alpha2" translate="{using: 'label'}"/>
The viewhelper is configured to use "alpha2" as a label field and to use the label field for translation. There are several other options for the translate argument (e.g. the "source" attribute which enables you to select a different localization file), which are described directly in the class.
Now you just have to assign the object "countries" (containing all countries from the country-repository) through the controller to the corresponding view and you're done.