Синтаксис сообщения ICU довольно мощный, и один из его множественных вариантов - {{X0 }} переменная, которая используется для определения формы множественного числа.

Я могу представить, как это можно было бы использовать, но похоже, что эту функцию легко заменить кодом (псевдокод для демонстрации в качестве примера - попробуйте здесь):

icuFormat('You worked for {count, plural, offset:1 one {{count} hour} other {{count} hours}} today.', {count: workedHours});
icuFormat('You worked for {count, plural, one {{count} hour} other {{count} hours}} today.', {count: workedHours+1});

Короче говоря, вместо добавления дополнительной разметки к синтаксису ICU для простого смещения переменных, почему бы не сместить саму переменную и не уменьшить размер разметки ICU?

Есть ли какой-то сценарий использования, который я пропускаю, который сделал бы offset полезным или было бы справедливо, если бы целью было сделать разметку простой для переводчиков, было бы лучше избегать использования offset?

3
Nicolas Bouvrette 22 Сен 2019 в 21:23

2 ответа

Лучший ответ

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

14 ноября 2019 г., изменить . После попытки найти пример, следующий за ответом @ Luckylooke, в некоторых библиотеках могут быть причудливые реализации, но в целом, если offset не был реализован, чтобы избежать "уродливого кода" в некоторых языках, у нас пока нет никаких доказательств того, что это требуется решать реальные случаи использования.

1
Nicolas Bouvrette 14 Ноя 2019 в 21:16

Вот один пример: http://userguide.icu-project.org/formatparse/messages

Если вы сделаете смещение в программе, оно не будет работать для отрицательных чисел. -1 в упомянутом примере.

Вы получите: Error in render: "SyntaxError: Expected integer but "-" found."

Вы можете доказать, что я не прав :)

РЕДАКТИРОВАТЬ: Пример воспроизведен: https://codesandbox.io/s/vue-template-tlteb

0
Luckylooke 10 Ноя 2019 в 07:11