summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/L10N/L10NString.php9
-rw-r--r--tests/data/l10n/de.json5
-rw-r--r--tests/lib/L10N/L10nTest.php21
3 files changed, 29 insertions, 6 deletions
diff --git a/lib/private/L10N/L10NString.php b/lib/private/L10N/L10NString.php
index ef33babac5a..0722057de02 100644
--- a/lib/private/L10N/L10NString.php
+++ b/lib/private/L10N/L10NString.php
@@ -61,10 +61,6 @@ class L10NString implements \JsonSerializable {
$translations = $this->l10n->getTranslations();
$identityTranslator = $this->l10n->getIdentityTranslator();
- $parameters = $this->parameters;
- // Add $count as %count% as per \Symfony\Contracts\Translation\TranslatorInterface
- $parameters['%count%'] = $this->count;
-
// Use the indexed version as per \Symfony\Contracts\Translation\TranslatorInterface
$identity = $this->text;
if (array_key_exists($this->text, $translations)) {
@@ -84,7 +80,10 @@ class L10NString implements \JsonSerializable {
$identity = str_replace('%n', '%count%', $identity);
- return $identityTranslator->trans($identity, $parameters);
+ // $count as %count% as per \Symfony\Contracts\Translation\TranslatorInterface
+ $text = $identityTranslator->trans($identity, ['%count%' => $this->count]);
+
+ return vsprintf($text, $this->parameters);
}
diff --git a/tests/data/l10n/de.json b/tests/data/l10n/de.json
index c2b6f34c081..d9e75d303c5 100644
--- a/tests/data/l10n/de.json
+++ b/tests/data/l10n/de.json
@@ -1,6 +1,9 @@
{
"translations" : {
- "_%n file_::_%n files_": ["%n Datei", "%n Dateien"]
+ "_%n file_::_%n files_": ["%n Datei", "%n Dateien"],
+ "Ordered placeholders one %s two %s": "Placeholder one %s two %s",
+ "Reordered placeholders one %s two %s": "Placeholder two %2$s one %1$s",
+ "Reordered placeholders one %1$s two %2$s": "Placeholder two %2$s one %1$s"
},
"pluralForm" : "nplurals=2; plural=(n != 1);"
}
diff --git a/tests/lib/L10N/L10nTest.php b/tests/lib/L10N/L10nTest.php
index 0de09386fba..3fb22b3f66e 100644
--- a/tests/lib/L10N/L10nTest.php
+++ b/tests/lib/L10N/L10nTest.php
@@ -76,6 +76,27 @@ class L10nTest extends TestCase {
$this->assertEquals('5 oken', (string)$l->n('%n window', '%n windows', 5));
}
+ public function dataPlaceholders(): array {
+ return [
+ ['Ordered placeholders one %s two %s', 'Placeholder one 1 two 2'],
+ ['Reordered placeholders one %s two %s', 'Placeholder two 2 one 1'],
+ ['Reordered placeholders one %1$s two %2$s', 'Placeholder two 2 one 1'],
+ ];
+ }
+
+ /**
+ * @dataProvider dataPlaceholders
+ *
+ * @param $string
+ * @param $expected
+ */
+ public function testPlaceholders($string, $expected): void {
+ $transFile = \OC::$SERVERROOT.'/tests/data/l10n/de.json';
+ $l = new L10N($this->getFactory(), 'test', 'de', 'de_AT', [$transFile]);
+
+ $this->assertEquals($expected, $l->t($string, ['1', '2']));
+ }
+
public function localizationData() {
return [
// timestamp as string