{% import 'macros/form.html' as form %} {# Renders a per-locale translation field: one input row per language actually in use, plus a picker to add more, rather than one input per site locale. name - The base form field name. Each locale's value is submitted as name[]. label - The human-readable label, reused (with the locale code appended) on every row. value - The current translation, either a {locale: text} mapping or a plain string (treated as the default locale's value). error - Error string(s) for the field, shown on the default locale's row. required - (translated_input only) Whether the default locale's row is required. attrs - (translated_input only) Extra attributes applied to each element. Examples: {% from 'tour/snippets/translated_field.html' import translated_input, translated_markdown %} {{ translated_input('title', label=_('Title'), value=data.title, error=errors.title, required=true) }} {{ translated_markdown('body', label=_('Body'), value=data.body, error=errors.body) }} #} {% macro translated_input(name, label, value, error, required=false, attrs={'class': 'form-control'}) %} {{ _translated_field("input", name, label, value, error, required, attrs) }} {% endmacro %} {% macro translated_markdown(name, label, value, error) %} {{ _translated_field("markdown", name, label, value, error, false, {}) }} {% endmacro %} {% macro _translated_field(kind, name, label, value, error, required, attrs) %} {% set default_locale = h.tour_default_locale() %} {% set filled_locales = (value or {}).keys() | list %} {% set shown_locales = [default_locale] + (filled_locales | reject("equalto", default_locale) | list) %} {% set all_locales = h.get_available_locales() %} {% set remaining_locales = all_locales | rejectattr("short_name", "in", shown_locales) | list %} {% set locale_labels = {} %} {% for locale in all_locales %} {% do locale_labels.update({locale.short_name: locale.display_name or locale.english_name}) %} {% endfor %}
{% for locale_code in shown_locales %} {% set is_default = locale_code == default_locale %} {% set field_label = label if is_default else label ~ " (" ~ locale_code ~ ")" %} {% set field_attrs = dict(attrs) %} {% if required and is_default %} {% do field_attrs.update({"required": 1}) %} {% endif %} {% if kind == "markdown" %} {% call form.markdown(name ~ "[" ~ locale_code ~ "]", label=field_label, value=(value or {}).get(locale_code, ""), error=error if is_default else none, classes=["tour-translated-field__row"]) %} {% if not is_default %} {% endif %} {% endcall %} {% else %} {% call form.input(name ~ "[" ~ locale_code ~ "]", label=field_label, value=(value or {}).get(locale_code, ""), error=error if (required and is_default) else none, attrs=field_attrs, is_required=(required and is_default), classes=["tour-translated-field__row"]) %} {% if not is_default %} {% endif %} {% endcall %} {% endif %} {% endfor %}
{% if remaining_locales %} {% set picker_id = "field-" ~ (name ~ "-add-language") | replace("[", "-") | replace("]", "-") %} {% endif %}
{% endmacro %}