Php 如何让PoEdit识别Symfony翻译组件中的复数字符串

Php 如何让PoEdit识别Symfony翻译组件中的复数字符串,php,symfony,translation,poedit,plural,Php,Symfony,Translation,Poedit,Plural,我有一个非Symfony的PHP项目,在这个项目中我想使用带有MoFileLoader的Symfony翻译组件。我已经设置了PoEdit,以便在解析文件查找翻译时识别trans(“string”)函数。 代码的这一部分按原样解析 问题是我无法使PoEdit将其识别为复数字符串 1显然是结果的数量,有了这些数据,我希望能够使用正确的复数字符串 最大的问题是我的主要语言是克罗地亚语,它的复数形式是‪nplurals=3;复数=(n%10==1&&n%100!=11?0:n%10>=2&&n%10 您

我有一个非Symfony的PHP项目,在这个项目中我想使用带有MoFileLoader的Symfony翻译组件。我已经设置了PoEdit,以便在解析文件查找翻译时识别trans(“string”)函数。 代码的这一部分按原样解析

问题是我无法使PoEdit将其识别为复数字符串

1显然是结果的数量,有了这些数据,我希望能够使用正确的复数字符串

最大的问题是我的主要语言是克罗地亚语,它的复数形式是
‪nplurals=3;复数=(n%10==1&&n%100!=11?0:n%10>=2&&n%10
您在此处给出了两个相互冲突的指示-一个指示将
trans
视为单数,另一个指示将其视为复数。此外,复数指示,
trans:1,2
没有意义:您要求将第一个参数提取为单数,第二个参数提取为复数,但您甚至没有两个字符串参数。请参阅

$translator->trans('找到{result}搜索结果',['{result}'=>1])

trans()
不可能像这样工作-它如何知道使用什么数字来确定要选择的复数版本?如果在代码中找不到复数版本,它如何知道英语复数版本使用什么


您需要使用
transChoice()
,因为复数总是一个中等复杂的主题,在编写任何代码之前,您必须阅读文档以理解概念。

我阅读了Symfony文档,没有使用transChoice()因为它在版本4.2中被贬值了。但是我会尝试使用它,因为它不是Symfony项目,我只使用translate组件。@mmijic然后相同的弃用通知会告诉你如果你不想要
transChoice()
trans
trans:1,2
<?php
require_once __DIR__.'/vendor/autoload.php';
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\MessageSelector;
use Symfony\Component\Translation\Loader\MoFileLoader;

$lang = "hr";
$translator = new Translator($lang, new MessageSelector());
$translator->setFallbackLocales(['en']);
$translator->addLoader('mo', new MoFileLoader());
$translator->addResource('mo', "locale/$lang/LC_MESSAGES/messages.mo", $lang);

echo $translator->trans("Welcome");
echo $translator->trans('Found {result} search result', ['{result}' => 1]);
?>
<?php echo $translator->trans('Found {result} search result', ['{result}' => 1]); ?>
trans
trans:1,2