Re: [PHPTAL] i18n:translate and dynamic tal:content

2009-11-23 Thread Kornel Lesiński

On 23-11-2009 at 05:28:13 lo...@nic.fi wrote:

I want my translator to translate if there's a translation available and  
use the key text when there isn't. So I added a few lines to translate  
function. Does this seem like a good way of doing this?


public function translate($key, $htmlencode=true) {

$value = @$this-_currentDomain[$key];

if (empty($value)) {
return $key;
}


It's better to use:

if (!isset($this-_currentDomain[$key])) {
  return $key;
}

$value = $this-_currentDomain[$key];


This won't trigger PHP errors.


--
regards, Kornel

___
PHPTAL mailing list
PHPTAL@lists.motion-twin.com
http://lists.motion-twin.com/mailman/listinfo/phptal


Re: [PHPTAL] i18n:translate and dynamic tal:content

2009-11-23 Thread Tjerk Meesters
Hi,

What do you mean by all-whitespace translation keys? I hope that
doesn't mean i18n:translate= will stop working, because we rely
heavily on this feature ;-)

On 11/23/09, Kornel Lesiński kor...@aardvarkmedia.co.uk wrote:
 On 22.11.2009, at 20:16, lo...@nic.fi wrote:

 I'v got a problem translating text that is printed dynamically from a
 mysql database. I'm printing body part names and the related muscle names
 by using nested tal:repeat. In the inner loop I'd like to echo the muscle
 name and translate it if there's a translation available. Here's what I
 got so far:

 ul
   li tal:repeat=bodyPart bodyParts
   tal:block tal:content=bodyPart/name /
   ul
   li tal:repeat=muscle php:bodyPart.Muscles
   tal:block i18n:translate=
   span tal:content=muscle/name /
   /tal:block
   /li
   /ul
   /li
 /ul

 .. but all that the inner loop prints is empty li elements. What am I
 doing wrong?

 Use this instead:

 tal:block i18n:translate=muscle/name


 i18n:translate= builds translation key at compile time, ignoring tags and
 dynamic content.

 i18n:translate=expression will use value of the expression as translation
 key.


 I've changed PHPTAL to reject all-whitespace translation keys. Version in
 SVN will now prevent this gotcha.

 --
 regards, Kornel




 ___
 PHPTAL mailing list
 PHPTAL@lists.motion-twin.com
 http://lists.motion-twin.com/mailman/listinfo/phptal



-- 
--
Tjerk

___
PHPTAL mailing list
PHPTAL@lists.motion-twin.com
http://lists.motion-twin.com/mailman/listinfo/phptal


Re: [PHPTAL] i18n:translate and dynamic tal:content

2009-11-22 Thread loupe



On 22.11.2009, at 20:16, lo...@nic.fi wrote:


I'v got a problem translating text that is printed dynamically from a mysql 
database. I'm printing body part names and the related muscle names by using 
nested tal:repeat. In the inner loop I'd like to echo the muscle name and 
translate it if there's a translation available. Here's what I got so far:

ul
  li tal:repeat=bodyPart bodyParts
  tal:block tal:content=bodyPart/name /
  ul
  li tal:repeat=muscle php:bodyPart.Muscles
  tal:block i18n:translate=
  span tal:content=muscle/name /
  /tal:block
  /li
  /ul
  /li
/ul

.. but all that the inner loop prints is empty li elements. What am I doing 
wrong?


Use this instead:


tal:block i18n:translate=muscle/name



i18n:translate= builds translation key at compile time, ignoring tags and 
dynamic content.

i18n:translate=expression will use value of the expression as translation key.


I've changed PHPTAL to reject all-whitespace translation keys. Version in SVN 
will now prevent this gotcha.



Oh I see. Then I'v got another guestion since I'm creating my own translator similar to this 
http://phptal.org/manual/en/split/i18n-translatekey.html and if I use tal:block 
i18n:translate=muscle/name all the translations have to exists.

I want my translator to translate if there's a translation available and use 
the key text when there isn't. So I added a few lines to translate function. 
Does this seem like a good way of doing this?

public function translate($key, $htmlencode=true) {

$value = @$this-_currentDomain[$key];

if (empty($value)) {
return $key;
}

   while (preg_match('/\${(.*?)\}/sm', $value, $m)) {

list ($src, $var) = $m;
   
   if (!array_key_exists($var, $this-_context)) {

   $err = sprintf('Interpolation error, var %s not set', $var);
   throw new Exception($err);
   }
   
   $value = str_replace($src, $this-_context[$var], $value);

   }

   return $value;   
}

-lp

___
PHPTAL mailing list
PHPTAL@lists.motion-twin.com
http://lists.motion-twin.com/mailman/listinfo/phptal