为什么Laravel的trans_choice()总是显示单一的情况?

时间:2015-08-02 19:15:16

标签: laravel laravel-5

我正在尝试使用trans_choice()将字符串格式化为“注释”或“注释”,具体取决于它们的数量。它应该是相当简单的,就像这样。

在我看来:

{{ trans_choice('posts.num comments', $post->comments->count()) }}

在帖子本地化文件中:

return [
    'num comments' => 'comment|comments',
];

但是,每一个都只返回“评论”。如果我进入修补程序:

>>> trans_choice('posts.num comments', 1);
=> "comment"
>>> trans_choice('posts.num comments', 2);
=> "comment"
>>> trans_choice('posts.num comments', 4);
=> "comment"

我确定我错过了一些明显的东西,但它看起来好像我完全按照文档。

编辑:问题似乎在Symfony\Component\Translation\MessageSelector的某处,但我还没有找出原因。

3 个答案:

答案 0 :(得分:9)

终于找到了答案。显然,如果语法环境在Symfony的PluralizationRules类中不可用,则转换器默认为第一个选择 - 即始终为索引零。通过更改区域设置名称(我甚至没有意识到它拼写错误...),我得到了它的工作。

答案 1 :(得分:1)

如果您是巴西人,那可能就是您的答案!

我遇到了同样的问题,发现这是因为我的语言环境选项(和lang文件夹)。 而不是' br'我们必须使用' xbr'为了Symphony在PluralizationRules(vendor / symphony / translation / PluralizationRules)中找到它。

在该文件中有一个包含所有可用语言的数组,因此可以查看它。

P.S。我使用的是Laravel 5.3

答案 2 :(得分:1)

我知道这篇文章很旧,但是我遇到了这个问题,因此,如果Joel's解决方案不起作用,希望我的解决方案对某人有所帮助。

我正在使用Laravel 7.x,并且在一个项目中使用本地化来解决美国英语与英语之间的差异(即中心与中心)。

我将本地化文件夹设置为默认文件夹 en ,将 en_ca 作为加拿大英语文件夹,其中 en 后备语言。

使用use Laravel\Fortify\Actions\EnableTwoFactorAuthentication; class UserObserver { public function created(User $user, EnableTwoFactorAuthentication $enable) { $enable($user); ... 时,我发现必须专门设置翻译字符串中的计数,否则当在非默认语言环境中查看页面时,翻译引擎只会吐出单数。

更改完成后,无论设置了哪种语言环境,trans_choice()都可以正常工作。

例如,无论我在哪里:

trans_choice()

我将其更改为:

'general.posts' => 'Posts|Posts',

此后一切正常。