[PHPTAL] Getting error on i18n:translate=""

ATEC Admin admin at atec-at.sk
Sun Apr 1 21:15:36 CEST 2007


Laurent Bedubourg wrote:
> On Sat, 31 Mar 2007 23:38:25 +0200
> ATEC Admin <admin at atec-at.sk> wrote:
> 
>> Hello,
>>
>> I am trying to translate non-English web site using gettext and 
>> i18n:translate attribute, but I keep getting unexpected results.
>>
>> In the template I have this code:
>>
>> <p i18n:translate="">O nás</p>
>>
>> which should generate gettext msgid equal to 'O nás', the content of
>> the tag. Instead, PHPTAL generates msgid='O nC<195>C<161>s'.
>>
> 
> Hello Juraj, 
> 
> I remember having problems with gettext tools. They did not allow
> non-ascii msgid at the time this PHPTAL feature was developed.  
> 
> Two years have passed since that time and maybe gettext is now able to
> compile and understand UTF-8 msgid ? From the Gettext manual :
> 
>        The msgid argument identifies the message to be translated. By
> convention, it is the English version of the  message,  with
> non-ASCII  characters replaced by ASCII approximations. This choice
> allows the translators to work with message catalogs, called PO files,
> that contain both the English and the translated versions of each
> message, and can be installed using the msgfmt utility.
> 
> Could you test the following for me ? 
> 
> Edit the PHPTAL/Php/Attribute/I18N/Translate.php file, 
> 
> Modify the _canonalizeKey() static method into something like :
> 
> static function _canonalizeKey($key){
> 	$key = str_replace("\r\n", "\n", $key);
> 	$key = str_replace("\r", "\n", $key);
> 	$key = str_replace("\n", " ", $key);
> 	$key = trim($key);
> 	return $key;
> }
> 
> And tell me if the gettext tool suite is working with UTF-8 or not :)
> 
> 
> In case it doesn't work, you will certainly find the following tools useful :
> 
> https://svn.motion-twin.com/phptal/phptal_i18n/trunk/cpp/
> 
> They are C++ tools I wrote to extract PHPTAL templates i18n strings,
> generate gettext .po files and then inject back translations into
> templates (in a different template directory).
> 
> The idea behind this is that translation should be done once and only
> once.
> 
> Say your project have a main 'tpl' directory containing templates with
> i18n attributes.
> 
> * i18n-extract will look into this directory and generate a .pot files
> * i18n-merge will merge .pot modifications into per language .po files
> * i18n-todo will tell you what has to be translated into .po file (msgid
> == msgstr) 
> * i18n-build will generate a tpl_es directory using your main
> tpl directory and a .po file
> 
> After translations, you end with 'tpl_es', 'tpl_en', 'tpl_fr', etc...
> directories.
> 
> Put everything on line and when a user wants another language just
> point your PHPTAL repository to the correct directory.
> 
> These tools does not requires gettext and are plain C++ code, they
> compile (at least) on linux / windows(cygwin). I used them for some
> projects and they just work like I wanted them to work. May be a bit
> tricky to set up when you are not used to the tools.
> 
> Here's a sample Makefile :
> 
> update-po:
> 	# find *ml files and tell i18n-extract to look for i18n
> 	# attributes inside 
> 	/usr/bin/find tpl -name "*.*ml" | i18n-extract -o locales/project.pot 
> 	# merge .pot with .po 
> 	i18n-merge -b locales/project.pot locales/project.fr.po
> 	i18n-merge -b locales/project.pot locales/project.en.po
> 	i18n-merge -b locales/project.pot locales/project.es.po
> 
> build-templates:
>         /usr/bin/find tpl -name "*.*ml" | xargs i18n-build -v -r tpl -d tpl_fr -po locales/project.fr.po 
> 	/usr/bin/find tpl -name "*.*ml" | xargs i18n-build -v -r tpl -d tpl_en -po locales/project.en.po
> 	/usr/bin/find tpl -name "*.*ml" | xargs i18n-build -v -r tpl -d tpl_es -po locales/project.es.po
> 
> As shown above you just have to take care of your tpl and locales
> directories, other tpl_* directory are generated by i18n-build.
> 
> i18n-build is gentle so if you want to really customize a template for
> a target language you can have, for instance, tpl/news.html and
> tpl/news.html.fr
> 
> Best regards
> Laurent

Hello Laurent,

I tested the method, it works. Gettext tools support UTF-8 msgid.

Those i18n tools are also very helpful, especially i18n-extract.
I was yet up to discover the way to extract all those strings.

Thank you for your help :)

Best regards,
Juraj



More information about the PHPTAL mailing list