Создание значения множественного числа (Больше чем, Меньше чем) в Javascript - PullRequest
1 голос
/ 30 мая 2011

У меня есть следующий код:

    $(function(){
          var total_click = 0;
          $("#mapKey a.showKey").click(function(){
            total_click = total_click + 1;
            $("#counter").text("I cheated " + total_click + " whole" + (total_click = 1 ? + ' time' + ((total_click > 1) ? 's ' : ' ') : ''));
return false;
          });
        });

Я пытаюсь вывести его так:

Один раз нажал: "Я обманул 1 раз за все время".

Щелкнул несколько раз: «Я обманул X целых раз».

- С 's' в конце "времен".

Счетчик работает нормально, он простопоследняя часть, заставляющая «время» или «времена», соответственно, обнаруживать, что у меня возникли трудности.

Есть идеи, что я делаю неправильно?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 30 мая 2011

Вот ваша проблема: total_click = 1.Попробуйте изменить его на total_click == 1.Однако я не понимаю, почему у вас есть такое условие, поскольку оно все равно не будет работать так, как вы ожидаете.Попробуйте $("#counter").text("I cheated " + total_click + " whole time" + ((total_click == 1) ? ' ' : 's '));

0 голосов
/ 18 сентября 2016

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

С этимв виду, я создал очень простую библиотеку JavaScript, которую можно использовать для множественного использования слов практически на любом языке.Он прозрачно использует базу данных CLDR для нескольких локалей.Его API очень минималистичен, а интеграция чрезвычайно проста.Она называется Многочисленные .

Я также написала небольшую вступительную статью к ней: « Как перемножить любое слово на разных языках с помощью JavaScript? ».

Не стесняйтесь использовать его в своем проекте.Я также буду рад за ваши отзывы об этом!

0 голосов
/ 30 мая 2011
  $(function(){
          var total_click = 0;
          $("#mapKey a.showKey").click(function(){
            total_click = total_click + 1;
            $("#counter").text("I cheated " + total_click + " whole " + (total_click == 1 ? "time" : "times");
return false;
          });
        });
0 голосов
/ 30 мая 2011

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

function pluralize(singular, times) {
    if (times == 1) return singular;
    else return singular + 's';
}

Затем измените строку на

var text = "I cheated " + clicks + " whole " + pluralize("time", clicks);

Вот пример .

...