Symfony2: выборка всех переводов под родительским именем


В контроллере symfony2 вы можете получить определенный перевод, используя: $this->get('translator')->trans('dropdown.state.CA.AB');

Пример messages.en.yml:

dropdown:
    state:
        CA:
            AB: Alberta
            BC: British Columbia
            MB: Manitoba

Как я могу получить AB, BC и MB в одном вызове (возможно, в массиве) и, надеюсь, также смогу вызвать его индивидуально, используя вышеупомянутый или аналогичный вызов перевода.

Пара вещей, которые я пробовал:

$this->get('translator')->trans('zuora.dropdown.state.CA);

dropdown:
    state:
        CA:
            - AB: Alberta
            - BC: British Columbia
            - MB: Manitobavarious

Конечно, пропуская какой-то Шаг

1 3

1 ответ:

Нет, вы не можете получить его через переводчик.
Это из-за того, что ArrayLoader сплющивает результат анализа yml.

Метод Flatten преобразует входные данные, такие как

Array (
    [foo] => Array(
        [bar] => baz
        [sub] => Array(
            [fiz] => foobaz
        )
    )
)

К

Array (
    [foo.bar] => baz
    [foo.sub.fiz] => foobaz
)

Единственный способ, который я смог найти, - это снова проанализировать файл перевода.

use Symfony\Component\Yaml\Yaml;

// From a controller
$file   = __DIR__.'/../Resources/translations/messages.en.yml';
$parsed = Yaml::parse(file_get_contents($file));

foreach ($parsed['dropdown']['state']['CA'] as $ca => $content) {
    // Your logic...
}