3

在 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

当然,错过了一些步骤

4

1 回答 1

2

不,您无法通过翻译器获得它。
这是因为扁平化了解析的 yml 的结果。ArrayLoader

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...
}
于 2013-08-13T14:42:21.267 回答