123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- {% extends '@WebProfiler/Profiler/layout.html.twig' %}
- {% import _self as helper %}
- {% block toolbar %}
- {% if collector.messages|length %}
- {% set icon %}
- {{ include('@WebProfiler/Icon/translation.svg') }}
- {% set status_color = collector.countMissings ? 'red' : collector.countFallbacks ? 'yellow' %}
- {% set error_count = collector.countMissings + collector.countFallbacks %}
- <span class="sf-toolbar-value">{{ error_count ?: collector.countDefines }}</span>
- {% endset %}
- {% set text %}
- <div class="sf-toolbar-info-piece">
- <b>Default locale</b>
- <span class="sf-toolbar-status">
- {{ collector.locale|default('-') }}
- </span>
- </div>
- <div class="sf-toolbar-info-piece">
- <b>Missing messages</b>
- <span class="sf-toolbar-status sf-toolbar-status-{{ collector.countMissings ? 'red' }}">
- {{ collector.countMissings }}
- </span>
- </div>
- <div class="sf-toolbar-info-piece">
- <b>Fallback messages</b>
- <span class="sf-toolbar-status sf-toolbar-status-{{ collector.countFallbacks ? 'yellow' }}">
- {{ collector.countFallbacks }}
- </span>
- </div>
- <div class="sf-toolbar-info-piece">
- <b>Defined messages</b>
- <span class="sf-toolbar-status">{{ collector.countDefines }}</span>
- </div>
- {% endset %}
- {{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { link: profiler_url, status: status_color }) }}
- {% endif %}
- {% endblock %}
- {% block menu %}
- <span class="label label-status-{{ collector.countMissings ? 'error' : collector.countFallbacks ? 'warning' }} {{ collector.messages is empty ? 'disabled' }}">
- <span class="icon">{{ include('@WebProfiler/Icon/translation.svg') }}</span>
- <strong>Translation</strong>
- {% if collector.countMissings or collector.countFallbacks %}
- {% set error_count = collector.countMissings + collector.countFallbacks %}
- <span class="count">
- <span>{{ error_count }}</span>
- </span>
- {% endif %}
- </span>
- {% endblock %}
- {% block panel %}
- <h2>Translation</h2>
- <div class="metrics">
- <div class="metric">
- <span class="value">{{ collector.locale|default('-') }}</span>
- <span class="label">Default locale</span>
- </div>
- <div class="metric">
- <span class="value">{{ collector.fallbackLocales|join(', ')|default('-') }}</span>
- <span class="label">Fallback locale{{ collector.fallbackLocales|length != 1 ? 's' }}</span>
- </div>
- </div>
- <h2>Messages</h2>
- {% if collector.messages is empty %}
- <div class="empty">
- <p>No translations have been called.</p>
- </div>
- {% else %}
- {% block messages %}
- {# sort translation messages in groups #}
- {% set messages_defined, messages_missing, messages_fallback = [], [], [] %}
- {% for message in collector.messages %}
- {% if message.state == constant('Symfony\\Component\\Translation\\DataCollectorTranslator::MESSAGE_DEFINED') %}
- {% set messages_defined = messages_defined|merge([message]) %}
- {% elseif message.state == constant('Symfony\\Component\\Translation\\DataCollectorTranslator::MESSAGE_MISSING') %}
- {% set messages_missing = messages_missing|merge([message]) %}
- {% elseif message.state == constant('Symfony\\Component\\Translation\\DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK') %}
- {% set messages_fallback = messages_fallback|merge([message]) %}
- {% endif %}
- {% endfor %}
- <div class="sf-tabs">
- <div class="tab {{ collector.countMissings == 0 ? 'active' }}">
- <h3 class="tab-title">Defined <span class="badge">{{ collector.countDefines }}</span></h3>
- <div class="tab-content">
- <p class="help">
- These messages are correctly translated into the given locale.
- </p>
- {% if messages_defined is empty %}
- <div class="empty">
- <p>None of the used translation messages are defined for the given locale.</p>
- </div>
- {% else %}
- {% block defined_messages %}
- {{ helper.render_table(messages_defined) }}
- {% endblock %}
- {% endif %}
- </div>
- </div>
- <div class="tab">
- <h3 class="tab-title">Fallback <span class="badge {{ collector.countFallbacks ? 'status-warning' }}">{{ collector.countFallbacks }}</span></h3>
- <div class="tab-content">
- <p class="help">
- These messages are not available for the given locale
- but Symfony found them in the fallback locale catalog.
- </p>
- {% if messages_fallback is empty %}
- <div class="empty">
- <p>No fallback translation messages were used.</p>
- </div>
- {% else %}
- {% block fallback_messages %}
- {{ helper.render_table(messages_fallback, true) }}
- {% endblock %}
- {% endif %}
- </div>
- </div>
- <div class="tab {{ collector.countMissings > 0 ? 'active' }}">
- <h3 class="tab-title">Missing <span class="badge {{ collector.countMissings ? 'status-error' }}">{{ collector.countMissings }}</span></h3>
- <div class="tab-content">
- <p class="help">
- These messages are not available for the given locale and cannot
- be found in the fallback locales. Add them to the translation
- catalogue to avoid Symfony outputting untranslated contents.
- </p>
- {% if messages_missing is empty %}
- <div class="empty">
- <p>There are no messages of this category.</p>
- </div>
- {% else %}
- {% block missing_messages %}
- {{ helper.render_table(messages_missing) }}
- {% endblock %}
- {% endif %}
- </div>
- </div>
- </div>
- <script>Sfjs.createFilters();</script>
- {% endblock messages %}
- {% endif %}
- {% endblock %}
- {% macro render_table(messages, is_fallback) %}
- <table data-filters>
- <thead>
- <tr>
- <th data-filter="locale">Locale</th>
- {% if is_fallback %}
- <th>Fallback locale</th>
- {% endif %}
- <th data-filter="domain">Domain</th>
- <th>Times used</th>
- <th>Message ID</th>
- <th>Message Preview</th>
- </tr>
- </thead>
- <tbody>
- {% for message in messages %}
- <tr data-filter-locale="{{ message.locale }}" data-filter-domain="{{ message.domain }}">
- <td class="font-normal text-small nowrap">{{ message.locale }}</td>
- {% if is_fallback %}
- <td class="font-normal text-small nowrap">{{ message.fallbackLocale|default('-') }}</td>
- {% endif %}
- <td class="font-normal text-small text-bold nowrap">{{ message.domain }}</td>
- <td class="font-normal text-small nowrap">{{ message.count }}</td>
- <td>
- <span class="nowrap">{{ message.id }}</span>
- {% if message.transChoiceNumber is not null %}
- <small class="newline">(pluralization is used)</small>
- {% endif %}
- {% if message.parameters|length > 0 %}
- <button class="btn-link newline text-small sf-toggle" data-toggle-selector="#parameters-{{ loop.index }}" data-toggle-alt-content="Hide parameters">Show parameters</button>
- <div id="parameters-{{ loop.index }}" class="hidden">
- {% for parameters in message.parameters %}
- {{ profiler_dump(parameters, maxDepth=1) }}
- {% endfor %}
- </div>
- {% endif %}
- </td>
- <td class="prewrap">{{ message.translation }}</td>
- </tr>
- {% endfor %}
- </tbody>
- </table>
- {% endmacro %}
|