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
-~----------~----~----~----~------~----~------~--~---