Errors in my php example / code:

invoke:
  xlate("Search found {count} pages for {keywords}", $count, $query);

in xlate():

  $xlated = preg_replace("/{([^\}]+)}/e", "\$replace_map[$1]" , $xlated);

Sorry :-)
Hans


On Wed, 2002-07-24 at 10:57, Hans Lellelid wrote:
> For translating text that might have dynamic values, I build a wrapper
> function for gettext() -- note that if you do this you'll probably need
> to use a shell/perl script to replace the wrapper function name with
> gettext() or _() before feeding it into thee xgettext tool.
> 
> So my wrapper function is invoked like this:
> 
> xlate("Search found {count} pages for {keywords}", $count, $query$);
> 
> It doesn't matter how you label your {tags}, but make sure you use
> the same label in all translations.  
> 
> ** This way you can re-order the tags in the translated text & PHP will
> still insert the correct values.**
> 
> In the [bad French] POT file:
> 
> msgid "Search found {count} pages for {keywords}"
> msgstr "En cherchant le database pour {keywords}, on a trouve {count}
> results."
> 
> Notice that the the order changes for dynamic elements.
> 
> 
> Here's the actual wrapper function I use:
> 
> function xlate($text) 
> {   
> 
>   // 1) get array of {tags} in text
>   // these will be replaced with passed params
> 
>      preg_match_all("/{([^}]+)}/", $text, $var_matches);
> 
>      $replace_tags = $var_matches[1];
> 
>   // $replace_tags is an array of all tags we need to replace
>   // in original order.
> 
>    $num_args = func_num_args();
>    $num_replace_tags = sizeof($replace_tags);
> 
>    if( ($num_args - 1) < $num_replace_tags) {
>       trigger_error("More replace tags than arguments", E_USER_WARNING);
>    }
> 
>     $replace_map = array();
> 
>     // build a hash of tags & values to replace them with.
> 
>     for($c = 0; $c < $num_replace_tags; $c++) {
>       $replace_map[ $replace_tags[$c] ] = func_get_arg($c+1);
>     }
> 
> 
>    // 2) translate the text
>                       
>       $xlated = gettext($text);
> 
>    // 3) re-insert the values from the hash
>       
>       $xlated = preg_replace("/{([^\}]+)}/e", "\$replace_map[$1]" ,
> $text);]
>                                                               
>                       
>     return $xlated;
> 
> }
> 
> 
> Cheers,
> Hans
> 
> On Wed, 2002-07-24 at 10:11, Anatole Varin wrote:
> > Good question. I'll tell you my hack, however I'd be really curious to hear
> > other people's opinions as well.
> > 
> > For text without links I do something similar to the phpMyAdmin way, however
> > I put my language into an array, just so that if I use language inside of
> > functions I don't have to declare each variable as a global, just the one
> > array. For example (using romanji for the Japanese for non-Japanese enabled
> > mail clients on this list):
> > 
> > $lang = array(
> >     "verify" => "kakunin",
> >     "name" => "namae",
> >     "no" => iie",
> >     "delete" => "sakujo,
> >     "close_window" => "tojiru"
> > );
> > 
> > Then, when I want to use it in a function I just use "global $lang" and I
> > can use the bits that I want (i.e. <?php print($lang[name]); ?>
> > 
> > For pieces that are a bit more complex, such as phrases that contain links
> > or bolding or other attributes that might not line up because of the
> > differences in expressing English and Japanese, I use functions:
> > 
> > function lang_show_result($start,$finish) {
> >  $txt = "Showing results $start-$finish.";
> >  return($txt);
> > }
> > 
> > 
> > > It's very nice to see some activity on here from this end of the mailing
> > > list as well.  I am on the verge of putting together a php/mysql
> > > multilingual website from scratch and it's good to know that some people
> > > are reading up on the list.  I was wondering what people's opinion on
> > > the overall structure of a multi language php application is.  There are
> > > a number of ways to implement the frontend.
> > > 
> > > 1.  Do something similar to the way phpMyAdmin works and have different
> > > files layed out with the different encoding types and variables listed
> > > for each message displayed to the users.
> > > 
> > > 2.  Use gettext or some other widely used standard.
> > > 
> > > ..... Etc..
> > > 
> > > Of course even these 2 solutions have their good and bad points.  The
> > > first is quick but harder to maintain.  The second of course is easier
> > > to maintain but more difficult to setup from the beginning.  What do
> > > others think or what are they using at this time?
> > > 
> > > Thanks,
> > > -jeff
> > 
> > - AV
> > 
> > 
> > -- 
> > PHP Internationalization Mailing List (http://www.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> > 
> > 
> 
> 
> 
> 
> -- 
> PHP Internationalization Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php
> 
> 




-- 
PHP Internationalization Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to