Самый изящный способ иметь дело с одиночными играми/множественными числами?

Редактирование: Это не работает перекрестный домен, если соответствующее заголовок CORS не установлено.

здесь существует две разных вещи: стиль iframe блока и стиль страницы встраиваются в iframe. Можно установить стиль iframe блока обычный путь:


стиль страницы, встроенной в iframe, должен быть или установлен включением его на дочерней странице:


Или это может быть загружено из родительской страницы с JavaScript:

var cssLink = document.createElement("link");
cssLink.href = "style.css"; 
cssLink.rel = "stylesheet"; 
cssLink.type = "text/css"; 
frames['iframe1'].document.head.appendChild(cssLink);

10
задан Click Upvote 21 July 2009 в 20:35
поделиться

6 ответов

Пожалуйста, используйте функцию ngettext для подобных вещей. Это позволяет правильно работать с множественным числом в английском и других языков раз и навсегда. Вы используете его так:

printf(ngettext("%d Comment", "%d Comments", $numComments), $numComments);

Функция ngettext вернет первую строку формата ( "% d Комментарий "), если есть только один комментарий и второй формат строка ( «% d комментариев» ), если их больше. Функция printf будет затем введите число в строку.

Это может показаться большим трудом, но это очень мощный инструмент: он работает с языками, имеющими более одной формы множественного числа (!) - они действительно существуют. В руководстве по PHP приведен пример слова «окно». что становится "1 окно", "2 окна" и " 5 окен " в некоторых экзотических язык, который я не знаю ...

Если вы намерены использовать ngettext , то ваши будущие пользователи из далеких стран будут вам очень благодарны: -)

Edit: Как было предложено в комментариях, есть одна функция для выполните указанные выше действия:

function pluralize($num, $singleWord, $pluralWord) {
    return printf(ngettext($singleWord, $pluralWord, $num), $num);
}

По умолчанию xgettext не распознает эту новую функцию, но вы можете добавьте его с помощью флага - keyword . Имея файл test.php с

echo ngettext("foo", "foos", 1);
echo pluralize(2, "bar", "bars");

, вы можете извлечь строки с помощью

xgettext --keyword=pluralize:2,3 test.php 

. Полученный файл messages.po содержит такие записи:

#: test.php:7
msgid "foo"
msgid_plural "foos"
msgstr[0] ""
msgstr[1] ""

#: test.php:8
msgid "bar"
msgid_plural "bars"
msgstr[0] ""
msgstr[1] ""

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

13
ответ дан 3 December 2019 в 15:52
поделиться

Почему бы не найти время, чтобы еще больше очеловечить вещи ....

switch ($numComments)
{
    case 0:
        echo "Be the first to write a comment";
        break;
    case 1:
        echo "Just one comment so far";
        break;
    default:
        echo "There are $numComments comments";

}
4
ответ дан 3 December 2019 в 15:52
поделиться

Создайте функцию, которая принимает число и слово и возвращает строку, содержащую и то, и другое. Он будет добавлять букву «s» (или обращаться к создаваемому вами словарю), если число больше 1.

3
ответ дан 3 December 2019 в 15:52
поделиться

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

string commentWord = numComments != 1 ? "Comments" : "Comment"; 

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

// should load "{0} Comments" or "{0} Comment" if we run in an English locale
string comments = string.Format(
        numComments != 1 ? GetResource("Comments") : GetResource("Comment"),
        numComments);
3
ответ дан 3 December 2019 в 15:52
поделиться

Не самый элегантный, но самый простой для вывода «Комментарии».

[Entry title]
[Content........]
1 Comment(s)
2
ответ дан 3 December 2019 в 15:52
поделиться

Проверьте Модуль инфлектора направляющих . Это обеспечивает удобное, централизованное и настраиваемое решение этой проблемы.

0
ответ дан 3 December 2019 в 15:52
поделиться
Другие вопросы по тегам:

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