[Translation] Collect original locale in case of fallback translation

This commit is contained in:
Markus Fasselt 2019-08-04 11:58:04 +02:00 committed by Fabien Potencier
parent 2b0f2de485
commit 5564e149cb
3 changed files with 21 additions and 9 deletions

View File

@ -13,7 +13,7 @@
{% set text %} {% set text %}
<div class="sf-toolbar-info-piece"> <div class="sf-toolbar-info-piece">
<b>Locale</b> <b>Default locale</b>
<span class="sf-toolbar-status"> <span class="sf-toolbar-status">
{{ collector.locale|default('-') }} {{ collector.locale|default('-') }}
</span> </span>
@ -73,7 +73,7 @@
<div class="metrics"> <div class="metrics">
<div class="metric"> <div class="metric">
<span class="value">{{ collector.locale|default('-') }}</span> <span class="value">{{ collector.locale|default('-') }}</span>
<span class="label">Locale</span> <span class="label">Default locale</span>
</div> </div>
<div class="metric"> <div class="metric">
<span class="value">{{ collector.fallbackLocales|join(', ')|default('-') }}</span> <span class="value">{{ collector.fallbackLocales|join(', ')|default('-') }}</span>
@ -152,7 +152,7 @@
</div> </div>
{% else %} {% else %}
{% block fallback_messages %} {% block fallback_messages %}
{{ helper.render_table(messages_fallback) }} {{ helper.render_table(messages_fallback, true) }}
{% endblock %} {% endblock %}
{% endif %} {% endif %}
</div> </div>
@ -185,11 +185,14 @@
{% endblock %} {% endblock %}
{% macro render_table(messages) %} {% macro render_table(messages, is_fallback) %}
<table> <table>
<thead> <thead>
<tr> <tr>
<th>Locale</th> <th>Locale</th>
{% if is_fallback %}
<th>Fallback locale</th>
{% endif %}
<th>Domain</th> <th>Domain</th>
<th>Times used</th> <th>Times used</th>
<th>Message ID</th> <th>Message ID</th>
@ -200,6 +203,9 @@
{% for message in messages %} {% for message in messages %}
<tr> <tr>
<td class="font-normal text-small nowrap">{{ message.locale }}</td> <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 text-bold nowrap">{{ message.domain }}</td>
<td class="font-normal text-small nowrap">{{ message.count }}</td> <td class="font-normal text-small nowrap">{{ message.count }}</td>
<td> <td>

View File

@ -145,6 +145,7 @@ class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInter
$id = (string) $id; $id = (string) $id;
$catalogue = $this->translator->getCatalogue($locale); $catalogue = $this->translator->getCatalogue($locale);
$locale = $catalogue->getLocale(); $locale = $catalogue->getLocale();
$fallbackLocale = null;
if ($catalogue->defines($id, $domain)) { if ($catalogue->defines($id, $domain)) {
$state = self::MESSAGE_DEFINED; $state = self::MESSAGE_DEFINED;
} elseif ($catalogue->has($id, $domain)) { } elseif ($catalogue->has($id, $domain)) {
@ -153,10 +154,9 @@ class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInter
$fallbackCatalogue = $catalogue->getFallbackCatalogue(); $fallbackCatalogue = $catalogue->getFallbackCatalogue();
while ($fallbackCatalogue) { while ($fallbackCatalogue) {
if ($fallbackCatalogue->defines($id, $domain)) { if ($fallbackCatalogue->defines($id, $domain)) {
$locale = $fallbackCatalogue->getLocale(); $fallbackLocale = $fallbackCatalogue->getLocale();
break; break;
} }
$fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue(); $fallbackCatalogue = $fallbackCatalogue->getFallbackCatalogue();
} }
} else { } else {
@ -165,6 +165,7 @@ class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInter
$this->messages[] = [ $this->messages[] = [
'locale' => $locale, 'locale' => $locale,
'fallbackLocale' => $fallbackLocale,
'domain' => $domain, 'domain' => $domain,
'id' => $id, 'id' => $id,
'translation' => $translation, 'translation' => $translation,

View File

@ -34,6 +34,7 @@ class DataCollectorTranslatorTest extends TestCase
'id' => 'foo', 'id' => 'foo',
'translation' => 'foo (en)', 'translation' => 'foo (en)',
'locale' => 'en', 'locale' => 'en',
'fallbackLocale' => null,
'domain' => 'messages', 'domain' => 'messages',
'state' => DataCollectorTranslator::MESSAGE_DEFINED, 'state' => DataCollectorTranslator::MESSAGE_DEFINED,
'parameters' => [], 'parameters' => [],
@ -42,7 +43,8 @@ class DataCollectorTranslatorTest extends TestCase
$expectedMessages[] = [ $expectedMessages[] = [
'id' => 'bar', 'id' => 'bar',
'translation' => 'bar (fr)', 'translation' => 'bar (fr)',
'locale' => 'fr', 'locale' => 'en',
'fallbackLocale' => 'fr',
'domain' => 'messages', 'domain' => 'messages',
'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK, 'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
'parameters' => [], 'parameters' => [],
@ -52,6 +54,7 @@ class DataCollectorTranslatorTest extends TestCase
'id' => 'choice', 'id' => 'choice',
'translation' => 'choice', 'translation' => 'choice',
'locale' => 'en', 'locale' => 'en',
'fallbackLocale' => null,
'domain' => 'messages', 'domain' => 'messages',
'state' => DataCollectorTranslator::MESSAGE_MISSING, 'state' => DataCollectorTranslator::MESSAGE_MISSING,
'parameters' => [], 'parameters' => [],
@ -60,7 +63,8 @@ class DataCollectorTranslatorTest extends TestCase
$expectedMessages[] = [ $expectedMessages[] = [
'id' => 'bar_ru', 'id' => 'bar_ru',
'translation' => 'bar (ru)', 'translation' => 'bar (ru)',
'locale' => 'ru', 'locale' => 'en',
'fallbackLocale' => 'ru',
'domain' => 'messages', 'domain' => 'messages',
'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK, 'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
'parameters' => [], 'parameters' => [],
@ -69,7 +73,8 @@ class DataCollectorTranslatorTest extends TestCase
$expectedMessages[] = [ $expectedMessages[] = [
'id' => 'bar_ru', 'id' => 'bar_ru',
'translation' => 'bar (ru)', 'translation' => 'bar (ru)',
'locale' => 'ru', 'locale' => 'en',
'fallbackLocale' => 'ru',
'domain' => 'messages', 'domain' => 'messages',
'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK, 'state' => DataCollectorTranslator::MESSAGE_EQUALS_FALLBACK,
'parameters' => ['foo' => 'bar'], 'parameters' => ['foo' => 'bar'],