But showing add coments, instead of show comments is a matter of logic
of your application, I18N isn't intended to do it.
if (count($comments) == 0) {
// show add comment
} else {
// show comment/comments (here comes the __n)
}
On Mon, Mar 31, 2008 at 8:17 AM, Dardo Sordi Bogado
<[EMAIL PROTECTED]> wrote:
> I think you need to specify in the header of your po file the number
> of plural forms for your language.
>
>
> http://www.gnu.org/software/gettext/manual/html_chapter/gettext_10.html#PO-Files
> (at the end of chapter)
>
> http://www.gnu.org/software/gettext/manual/html_chapter/gettext_10.html#Plural-forms
> (the whole chapter)
>
> I've not tested this on CakePHP.
>
>
>
>
> On Sat, Mar 29, 2008 at 2:36 PM, Claudinei <[EMAIL PROTECTED]> wrote:
> >
> > Hi,
> >
> > I'm trying to understand how I18n works on Cake and after a lot of
> > tests and reads of the I18n and Basic classes source I've found
> > something.
> >
> > I'm not really sure if my problem is with class Basic "__n" function
> > or class I18n "translate" function, or even maybe I'm
> > missunderstanding those functions purporses.
> > Anyway I have this scenario:
> >
> > A post description with a comments link where the text for the
> > comments link should change according with the number of comments:
> > "Leave a comment"
> > "Show Comment"
> > "Show Comments (xx)" (where xx is the number of comments)
> >
> > I think "__n" function should result:
> > a "singular" string for the no comments case
> > a "plural" string for the just one comment case (what works right now)
> > and a plural string for more than 1 comment case
> >
> > But as the 1.2 beta release if you do call I18n::translate with a
> > singular msgid different than plural msgid and if the singular msgid
> > exists, it will be returned, regardless of the number of comments.
> > So if I really want to use I18n::translate or "__n" function from
> > Basic class I will have to do something like "__n($plural_msgid,
> > $plural_msgid)" with the plural msgid twice, as for the singular and
> > plural args.
> >
> > As first I thought the solution could be simple as editing Basic class
> > and adding the follow code after the "App::import" into "__n"
> > function:
> > if($count == 0)
> > {
> > $trans = I18n::translate($singular);
> > }
> > else
> > {
> > $trans = I18n::translate($singular, $plural, null, 5, $count);
> > }
> >
> > if($return === false)
> > {
> > echo $trans;
> > }
> > else
> > {
> > return $trans;
> > }
> >
> > But after that, "__n" function still resulting the singular msgid.
> > To solve the remaining problem, I've just changed I18n::translate
> > function a bit, changing this follow "if":
> >
> > if (($trans = $_this->__domains[$_this->category][$domain][$singular])
> > || ($pli) && ($trans = $_this->__domains[$_this->category][$domain]
> > [$plural]))
> >
> > to:
> >
> > if (u$trans = $_this->__domains[$_this->category][$domain][$plural])
> > || ($trans = $_this->__domains[$_this->category][$domain][$singular]))
> >
> >
> > Now I can call "__n" in this way:
> > printf(__n('add_comment', 'comments', $n, true), $n); #(where $n is
> > the number of comments)
> >
> > And I18n class will return the correct string from default.po:
> > msgid "add_comment"
> > msgstr "Leave a comment"
> >
> > msgid "comments"
> > msgid_plural "comments"
> > msgstr[0] "Show Comment"
> > msgstr[1] "Show Comments (%d)"
> >
> >
> > Is there anyone having the some problem? Is there another clean
> > solution without having to change both Basic and I18n classes?
> > Or am I trying to do something in the wrong place?
> >
> > Thanks in any advice.
> >
> > Claudinei
> >
> > > >
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Cake
PHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---