2013-03-26 9 views
2

너무 자주 웹 사이트에서 조회수 1 일, 남은 1 일 또는 답변 1 개를 보게됩니다. 나에게이 같은으로 해결하기 위해 종종 쉽게처럼 게으른 :공통 언어로 된 단수/복수 단어를 처리하기위한 하나의 라이너가 있습니까?

if(views == 1) 
    print views + " view" 
else print views + " views" 

내가 등 자바, 파이썬, PHP와 같은 공통의 언어로 하나의 라이너가 있는지 알고 싶어, 이 코드를 코드에 추가하는 것처럼 쉽게 할 수있는 사이트에 댓글을 달 수 있습니다. 그게 가능하니?

답변

3

내 사이트에서 이것을 처리 할 때 ternary operators을 사용합니다. 많은 c 기반 프로그래밍 언어가 삼항 연산자를 지원하는 것처럼 보입니다. PHP에서이만큼 쉽게 :

<?= $views . ' view' . ($views == 1 ? '' : 's'); ?> 
+2

같은 출력 문자열 :'에서 System.out.println (numAnswers + "대답"+ (numAnswers == 1? "": "s"));'numAnswers'는 물론 거기에 얼마나 많은 응답이 들어 있는지를 나타내는 int입니다. – asteri

+1

파이썬의 경우 :''{{foo> 1 else ''의 경우 ''{{{}} '형식으로보기 @ –

+0

@asteri 독립형 답변으로 재 게시하고 싶습니다. 매우 유용합니다. –

1
당신은, 우리는 종종 다음과 같은 방식으로

1 view(s), 1 day(s) left, or 1 answer(s) 

에 복수/단수 단어를 표시 문제를 처리하지만, 다르게보고하는 조건 또는 삼항 연산자를 사용할 수 있습니다

이것은 추가 조건이 입력 필드처럼 단순하지 않을 때 유용합니다.

파이썬에 관해서는, 당신은 비교하고 당신이 장고 (파이썬)를 사용하는 경우에는 pluralize 필터를 사용 할 수 있습니다

>>> def pluralize(n, text): 
    return "{} {}{}".format(n,text, 's' if n > 1 else '') 

>>> pluralize(3,'word') 
'3 words' 
>>> pluralize(1,'word') 
'1 word' 
1

에 대한 별도의 's'를 추가하는 반복적 인 작업을 수행하는 함수를 만들 수 있습니다 :

You have {{ num_messages }} message{{ num_messages|pluralize }}. 

특수한 경우도 지원됩니다. documentation을 살펴보십시오.

일반 파이썬 코드에서 비슷한 작업을 수행하려는 경우 inflect 모듈을 살펴보십시오. 그것은 꽤 강력한 될 수 있습니다처럼 보이는, 그리고 분명히 제대로 대부분의 복수형을 추측 :

import inflect 
p = inflect.engine() 
print("You have {}.".format(p.no('message',num_messages))) 

어느 것 자바에 대한

You have no messages. 
You have 1 message. 
You have 34 messages.