A placeholder is a group of elements separated with comma. First element
is required and defines index of value to insert (numeration starts from
0, and is directly used to access element from $values array). Second
element is a name of formatter to use. It's optional, and if not given,
value will be simply string-casted. Remaining elements are formatter-
specific and they are directly passed to the formatter class.
public resolvePlaceholders ( string $textWithPlaceholders, array $arguments, |
||
$textWithPlaceholders | string | String message with placeholder(s) |
$arguments | array | An array of values to replace placeholders with |
$locale | Locale to use (NULL for default one) | |
return | string | The $text with placeholders resolved |
/** * @test */ public function formatResolverWorksCorrectlyForFullyQualifiedFormatterClassNames() { $actualFormatter = new Fixtures\SampleFormatter(); $locale = new I18n\Locale('de'); $testResult = $this->formatResolver->resolvePlaceholders(sprintf('{0,%s}', Fixtures\SampleFormatter::class), ['foo'], $locale); $this->assertEquals($actualFormatter->format('foo', $locale), $testResult); }
/** * Returns translated string found under the $labelId. * * Searches for a translation in the source as defined by $sourceName * (interpretation depends on concrete translation provider used). * * If any arguments are provided in the $arguments array, they will be inserted * to the translated string (in place of corresponding placeholders, with * format defined by these placeholders). * * If $quantity is provided, correct plural form for provided $locale will * be chosen and used to choose correct translation variant. * * @param string $labelId Key to use for finding translation * @param array $arguments An array of values to replace placeholders with * @param mixed $quantity A number to find plural form for (float or int), NULL to not use plural forms * @param Locale $locale Locale to use (NULL for default one) * @param string $sourceName Name of file with translations, base path is $packageKey/Resources/Private/Locale/Translations/ * @param string $packageKey Key of the package containing the source file * @return string Translated message or NULL on failure * @api * @see Translator::translateByOriginalLabel() */ public function translateById($labelId, array $arguments = [], $quantity = null, Locale $locale = null, $sourceName = 'Main', $packageKey = 'Neos.Flow') { if ($locale === null) { $locale = $this->localizationService->getConfiguration()->getCurrentLocale(); } $pluralForm = $this->getPluralForm($quantity, $locale); $translatedMessage = $this->translationProvider->getTranslationById($labelId, $locale, $pluralForm, $sourceName, $packageKey); if ($translatedMessage === false) { return null; } if (!empty($arguments)) { return $this->formatResolver->resolvePlaceholders($translatedMessage, $arguments, $locale); } return $translatedMessage; }
/** * @test * @expectedException \Neos\Flow\I18n\Exception\UnknownFormatterException */ public function throwsExceptionWhenFormatterDoesNotExist() { $mockObjectManager = $this->createMock(ObjectManagerInterface::class); $mockObjectManager->expects($this->at(0))->method('isRegistered')->with('foo')->will($this->returnValue(false)); $mockObjectManager->expects($this->at(1))->method('isRegistered')->with('Neos\\Flow\\I18n\\Formatter\\FooFormatter')->will($this->returnValue(false)); $formatResolver = new I18n\FormatResolver(); $formatResolver->injectObjectManager($mockObjectManager); $formatResolver->resolvePlaceholders('{0,foo}', [123], $this->sampleLocale); }