2009-10-07 26 views
9

Tôi có rất nhiều thông tin để hiển thị từ cơ sở dữ liệu. Một số là tiếng Pháp, khác là tiếng Anh. Một số là một độc đáo, một số danh sách ...đa nguyên trong PHP

Câu hỏi đặt ra: làm thế nào để bạn quản lý tất cả những gì tùy chọn khác nhau trong PHP

NẾU ELSE CÔNG TẮC ARRAY (với tất cả các văn bản)

khác phương pháp ...

bây giờ vấn đề tăng lên trên một danh sách các mùi, một số có một (mùi) khác có nhiều (mùi) đặt s hay không là một nỗi đau ..... giúp đỡ!

nhờ

+2

Bạn có thể giải thích rõ hơn? Câu hỏi của bạn là rất không rõ ràng. – rogeriopvl

+0

Tại sao bạn không viết lại câu hỏi để hỏi làm thế nào để số nhiều từ trong php cho cả tiếng Pháp và tiếng Anh –

Trả lời

6

Cách tốt nhất IMO là phải có một mảng của tất cả các quy tắc pluralization của bạn cho mỗi ngôn ngữ, ví dụ: array('man'=>'men', 'woman'=>'women'); và viết một hàm pluralize() cho mỗi từ số ít.

Bạn có thể muốn xem xét phần giới thiệu của CakePHP.

https://github.com/cakephp/cakephp/blob/master/src/Utility/Inflector.php

+1

Liên kết đó hiện đang chết; nguồn có thể được tìm thấy ở đây: https://github.com/cakephp/cakephp/blob/c2f298a8b7b461584dfdbe6a1c3feb81ba47e525/lib/Cake/Utility/Inflector.php – mpen

+0

nhờ người đàn ông này giúp tôi – netto

22

Bạn có thể muốn nhìn vào gettext extension. Cụ thể hơn, có vẻ như ngettext() sẽ thực hiện những gì bạn muốn: nó làm tròn chính xác các từ miễn là bạn có số để đếm.

print ngettext('odor', 'odors', 1); // prints "odor" 
print ngettext('odor', 'odors', 4); // prints "odors" 
print ngettext('%d cat', '%d cats', 4); // prints "4 cats" 

Bạn cũng có thể xử lý các biểu mẫu số nhiều dịch một cách chính xác, đó là mục đích chính của nó, mặc dù có khá nhiều việc phải làm.

+3

thực sự nó sẽ là 'printf (ngettext ('% d mèo ','% d mèo ', 4), 4); // in "4 cats" ' – Bot

+0

Điều đó không được kết hợp với printf. Có lẽ PHP có một cái gì đó mới ngày hôm nay? :-) – Alex2php

3

Nếu bạn đang đi để đi xuống con đường của văn bản chức năng pluralize của riêng bạn thì bạn có thể tìm thấy mô tả này thuật toán của pluralisation hữu ích:

http://www.csse.monash.edu.au/~damian/papers/HTML/Plurals.html

Hoặc cách tiếp cận dễ dàng hơn nhiều có lẽ sẽ được sử dụng một trong những chức năng pluralize làm sẵn có trên Internet:

http://www.eval.ca/2007/03/03/php-pluralize-method/

20

Bạn có thể thử chức năng này tôi đã viết:

/** 
* Pluralizes a word if quantity is not one. 
* 
* @param int $quantity Number of items 
* @param string $singular Singular form of word 
* @param string $plural Plural form of word; function will attempt to deduce plural form from singular if not provided 
* @return string Pluralized word if quantity is not one, otherwise singular 
*/ 
public static function pluralize($quantity, $singular, $plural=null) { 
    if($quantity==1 || !strlen($singular)) return $singular; 
    if($plural!==null) return $plural; 

    $last_letter = strtolower($singular[strlen($singular)-1]); 
    switch($last_letter) { 
     case 'y': 
      return substr($singular,0,-1).'ies'; 
     case 's': 
      return $singular.'es'; 
     default: 
      return $singular.'s'; 
    } 
} 

Cách sử dụng:

pluralize(4, 'cat'); // cats 
pluralize(3, 'kitty'); // kitties 
pluralize(2, 'octopus', 'octopii'); // octopii 
pluralize(1, 'mouse', 'mice'); // mouse 

Có rõ ràng là rất nhiều những lời đặc biệt rằng chức năng này sẽ không pluralize một cách chính xác, nhưng đó là những gì mà tranh luận $plural là dành cho :-)

Hãy xem Wikipedia để xem cách đa dạng phức tạp như thế nào!

+0

không hoạt động với "Ranch"/"Ranches" – Francesco

+3

@Francesco Chắc chắn là vậy. Cách sử dụng: 'đa nguyên (3, 'Ranch', 'Ranches')'. Đối số thứ 3 chỉ là tùy chọn cho các từ cơ bản nhất. – mpen

0

Giải pháp tùy chỉnh, minh bạch và tiện ích mở rộng. Không chắc chắn về tốc độ của nó.

/** 
* Custom plural 
*/ 
function splur($n,$t1,$t2,$t3) { 
    settype($n,'string'); 
    $e1=substr($n,-2); 
    if($e1>10 && $e1<20) { return $n.' '.$t3; } // "Teen" forms 
    $e2=substr($n,-1); 
    switch($e2) { 
     case '1': return $n.' '.$t1; break; 
     case '2': 
     case '3': 
     case '4': return $n.' '.$t2; break; 
     default: return $n.' '.$t3; break; 
    } 
} 

Cách sử dụng bằng tiếng Ukraina/Nga:

splur(5,'сторінка','сторінки','сторінок') // 5 сторінок 
splur(4,'сторінка','сторінки','сторінок') // 4 сторінки 
splur(1,'сторінка','сторінки','сторінок') // 1 сторінка 
splur(12,'сторінка','сторінки','сторінок') // 12 сторінок 

splur(5,'страница','страницы','страниц') // 5 страниц 
splur(4,'страница','страницы','страниц') // 4 страницы 
splur(1,'страница','страницы','страниц') // 1 страница 
splur(12,'страница','страницы','страниц') // 12 страниц 
Các vấn đề liên quan