number_format
только позволяет форматировать ... ну, цифры - и это будет только отформатировать их как чистое число.
С другой стороны, MessageFormater
класс делает больше, чем это:
- Это позволяет форматировать числа, да; но не только как «чистые числа», но и как (например) деньги
- И как формат номера, так и единица измерения, отличаются в зависимости от языкового стандарта.
- Например, во Франции вы бы использовали
1234,25 €
; в то время как в США, вы бы использовать (простите меня, если я ошибаюсь) что-то вроде $1,234.25
- Это позволяет форматировать больше, чем только цифры:
- Вы можете также форматировать даты, например
- включая название дней/месяц
- И это делает больше, чем просто форматирование некоторого куска данных: она позволяет указать полные строки, в которых вы используете заполнители - указание того, какие которые должны представлять данные.
- Этот последний момент важен, когда вы пытаетесь перевести/локализовать приложение: форматирует изменения, да; но позиции данных также могут изменяться в зависимости от языка.
Это здорово, когда вы developping приложения, имея кого-то еще делать переводы для Вас:
- Вы закодировать приложение таким образом, он загружает свои строки перевода из файла, что зависит от языка
- И вы говорите, что для каждой строки, в каком порядке вы передадите данные
- Тогда кто-то принимает ваш (английский, например) файл перевода, и перевести его на другой язык
- Используя те же заполнители, как вы делали, для динамических данных
- Размещение их в другой порядок, при необходимости
- Затем, когда приложение выполняется:
- Вы загружаете правильный пла nslation,
- Вы вводите данные
- И никто не должен заботиться о формировании чисел/дат/... или о порядке данных в строках; который является большим ;-)
Также отметим, что MessageFormater
провайдеры некоторые additionnal особенности, как MessageFormatter::parseMessage
метод, который делает прямо противоположное.
Я никогда не использовал этот вариант, хотя, хотя это может оказаться полезным в некоторых ситуациях, я уверен.
Наконец, вы говорите, это:
Приведенный пример, кажется, показывают, что если вы уже знаете язык, который вы используете
Да, MessageFormater
ожидает, что вы знаете, какие язык, на котором ваше приложение в настоящее время работает.
На самом деле, роль класса MessageFormater
состоит в том, чтобы ... форматировать сообщения - ничего более.
Но у вас есть какие-то другие классы, которые позволяют определить, какой язык следует использовать ;-)
Например, вы можете захотеть взглянуть на Locale
класс - Locale::acceptFromHttp
может особенно заинтересовать вас (цитирую):
пытается найти локали, которые могут удовлетворить список языков, который был затребован НТТР "Accept-Language" заголовок
В принципе, это должно помочь вам определить, какой язык используется браузером вашим пользователем, - который, скорее всего, укажет, какой язык/язык, который, по-видимому, сейчас может понять текущий пользователь.
Например, учитывая мой браузер посылает это для Accept-languag
электронной HTTP заголовка:
fr,en;q=0.7,en-us;q=0.3
Locale::acceptFromHttp
бы указать, что я предпочитаю 'fr'
локаль - который я предпочитаю ^^
Этот gettext, как строка/множественная сортировка вызывающе делает этот класс его достоинством.gettext по-прежнему так глючит и неудобен в PHP, что я все еще просто использую языковые файлы на основе PHP, и возможность использовать этот класс для выбора множественных форм действительно поможет. – Xeoncross
@Xeoncross Используйте то, что подходит. Это еще один пакет, который вы * можете * выбирать и использовать, например, математику против bc_math или GD против imagemagick. – Gordon
Ваш ответ может быть не таким хорошим, как Pascal, но этот пример плюрализации - это то, что я искал, и статья DevZone также была очень полезна. Благодаря! – Xeoncross