TYPO3 8.7 множественные аргументы в локальных переводах

У меня была аналогичная проблема, и для меня она сводилась к добавлению следующих HTTP-заголовков в ответ на принимающий конец:

Access-Control-Allow-Headers: Content-Type
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Origin: *

Вы можете не использовать * на end, но только имя домена хоста, отправляющего данные. Как *.example.com

Но это возможно только при наличии доступа к конфигурации сервера.

1
задан Kathara 20 March 2019 в 10:30
поделиться

1 ответ

То, что вы видите в строке формата (%1$s), это то, что называется перестановка аргументов (см. Примеры 1-4 для полного понимания).

Вы бы использовали его, если порядок ваших заполнителей отличается от порядка аргументов. Пример:

У вас есть строка

$str = "%s had a %s %s";

и массив

$args = [
  'Mary',
  'little',
  'lamb',
];

И ваш результат форматирования будет: «У Мэри был маленький ягненок». Но что произойдет, если аргументы будут в другом порядке, например:

$args = [
  'lamb',
  'Mary',
  'little',
];

Тогда вы получите «ягненок имел маленькую Марию». Используя подстановку аргументов (я знаю, запутанное имя), вы указываете форматировщику, где именно искать данный аргумент. Эти заполнители настраиваются по позициям, а не по индексу, поэтому они начинаются с 1, а не с 0.

Таким образом, чтобы получить правильный вывод для вышеупомянутых неупорядоченных аргументов, вам потребуется строка формата:

$str = "%2$s had a %3$s %1$s";

Обратите внимание, что замена аргументов имеет смысл тогда и только тогда, когда вы можете гарантировать, что порядок аргументов в вашем массиве всегда будет одинаковым. Кроме того, если вы не можете контролировать порядок аргументов (но можете гарантировать, что он будет одинаковым), вам, скорее всего, придется его использовать.

Как отметил Бернд Уилк πφ , обмен аргументами очень полезен при работе с локализацией, как, например, в вашем случае.

Разные языки имеют разные лингвистические типологии, то есть где, например, субъект, глагол и объект помещены в предложение или даже как написана дата.

Стандартным английским форматом даты является, например, month-day-year. В Германии он отформатирован как day.month.year, а японский - как year-month-date. Теперь, когда вы получите массив аргументов из любого места, содержащий значения для года, месяца и дня, в этом порядке

$arguments = [
  "2019",
  "03",
  "20",
];

, вы не сможете обойтись с помощью замены аргументов, чтобы расположить элементы в правильном порядке.

На английском языке ваша строка формата будет %2$s-%3$s-%1$s, для немецкого %3$.%2$.%1$ и для японского либо %1$s-%2$s-%3$s, либо даже %s-%s-%s (по совпадению, аргументы уже в правильном порядке, но во избежание путаницы и оставайтесь последовательными, вы должны использовать позиционное форматирование, как и в других языках).

Когда вы можете управлять порядком аргументов, обычно проще использовать непозиционную строку форматирования, но, как объяснено выше, это не очень хорошо работает для локализации, если вообще.

0
ответ дан TheKvist 20 March 2019 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: