[Cartoweb-users] Confused about .po files

Chris Duncan, GISmatters duncan at gismatters.com
Tue Oct 21 10:41:51 EDT 2008

I'm still struggling with this. The manual says I can test whether 
gettext is working by running scripts/testgettext.sh and 
scripts/testgettext.php. Both of those fail, so perhaps I do not have 
a working gettext. However, I note that the source code for those 
files says they only work under Linux; should I expect those test 
programs to work in Cygwin on WinXP?

The first test fails with these messages:
/cygdrive/c/.../Temp/cc6XJfWK.o:sample.c:(.text+0x88): undefined 
reference to `_libintl_bindtextdomain'
/cygdrive/c/.../Temp/cc6XJfWK.o:sample.c:(.text+0x94): undefined 
reference to `_libintl_textdomain'
/cygdrive/c/.../Temp/cc6XJfWK.o:sample.c:(.text+0x9f): undefined 
reference to `_libintl_gettext'
collect2: ld returned 1 exit status
scripts/testgettext.sh: line 68: /tmp/sample: No such file or directory

The PHP test fails with this message:
error: create /tmp/fr/LC_MESSAGES folder failed !

Does this mean that gettext is not working on my system, or are these 
errors because the tests only work under Linux?

I get no error messages when I run cw3setup.php -- the last thing it 
says is:
Launching po2mo script for projects: ACORN
Installation finished...
How can I tell if my problem is a broken gettext system vs. mistake(s) 
I'm making in configuring the .po files?

FYI: At first, I was getting additional PHP errors indicating that 
php_gettext was not installed; I un-commented the reference to that 
extension in php.ini and copied php_gettext.dll to my php/ext folder, 
and those messages disappeared.


Oliver Christen wrote:
> well, by "translation", understand "string replacement"
> practicaly, you "translate" raw strings into something more pleasant to 
> read for human.
> so the translation system is useful even if you use only one language.
> you can certainly override the template in your project and simply 
> directly replace the string inside but this will not work for the other 
> string recovered from php, ini and mapfile
> regards
> Oliver
>> Hi Oliver,
>> Thanks so much for your patient and clarifying response. Using what 
>> you wrote and going through the Cartoweb documentation and the web 
>> again, I now realize something which was not obvious to me before: 
>> that the whole text translation scheme is a widely-used method, not 
>> limited just to Cartoweb... Since I have never developed with these 
>> tools or with internationalization before, I did not know about Gnu 
>> gettext and the po/mo files; I thought it was something special to 
>> Cartoweb. Now I can read the gettext documentation to understand much 
>> more.
>> One thing is still not quite clear to me: do I need to worry about 
>> gettext, po/mo files, and all of that if I just want to change some 
>> pieces of text *without translation* (the example I used last night is 
>> changing the zoomin tool hover text from "Zoom In" to "Choose this 
>> tool and click on the map to zoom in")?  I think the answer is "yes" 
>> -- even though I am not trying to internationalize or translate or 
>> localize the text, I think I must create po files and add my new text 
>> as the "translation" for the "zoomin" msgid. Is that correct?
>> One reason I am still confused on this point is that every reference 
>> to text and messages in the Cartoweb documentation talks about 
>> *translation*. There are lots of places that say, more or less, "If 
>> you need to translate this, you will need gettext... etc". I am not 
>> translating anything, so at first I thought none of those discussions 
>> applied to my situation, but now I think that changing the default 
>> text is basically the same process as translating. Is this correct?
>> I will continue my reading and then try to make sense of your examples 
>> and suggestions. Thanks again for starting to point me in the right 
>> direction. And thanks to you and Bruno for pointing out that gettext 
>> is apparently needed but not working or not available on my live web 
>> server... I will look into that problem after I get my development 
>> system correctly changing the text I'm working on.
>> Cheers,
>> Chris
>> Oliver Christen wrote:
>>> hi
>>> po are only human readable container for the text<->translation strings
>>> when running the cw3setup script, the .po get compilated by gettext 
>>> into binary .mo, these files are located in 
>>> cartoweb3/locale/*langcode*/LC_MESSAGES/*projectid.projectid.projectid*.mo 
>>> these are the files actualy used by gettext to do the string 
>>> replacement in real time.
>>> the .po contains the string you want to translate.
>>> For convenience, cartoweb include 2 scripts one can use to generate 
>>> some basic .mo for a given project: client2pot and server2pot.
>>> These script simply look inside all the files of your project for 
>>> every strings included into I18n::gt(...) call (in php file) or into 
>>> {t}...{/t} tag (in templates files). additionaly, the server2pot also 
>>> get all the layer's labels from either the layers.ini file or the 
>>> mapfile.
>>> dynamicaly generated strings will not get "recovered" by those 
>>> scripts unless someone provided some fake/hidden {t}..{/t} or 
>>> I18n::gt(...), for example for the tools's labels.
>>> client.po, server.*projectid*.po, server.po contain the raw 
>>> (untranslated) list of strings for a given project.
>>> msgid "IdRecentering"
>>> msgstr ""
>>> client.en.po, server.*projectid*.en.po, server.en.po are COPIES!!! of 
>>> the raw .po but this time they ALSO contain the translated strings 
>>> for the corresponding language.
>>> msgid "IdRecentering"
>>> msgstr "Identifiers recentering"
>>> to quickly add translations to your projects, you can easily copy the 
>>> existing .po files provided in cartoweb by default and modify them. 
>>> You will have some extra translated/unwanted strings but nothing that 
>>> cant be easily modified/removed if needed.
>>> copy ALL the .po files into your project's po folder.
>>> look at an existing demo /po folder to see whats there.
>>> if you want "clean" po files, you need to run the client2pot and 
>>> server2pot scripts to generate the RAW po files for your project and 
>>> then COPY these files and rename them with the extra 2 letters lang 
>>> tag (.po > .en.po) and EDIT them to add the translations for all the 
>>> strings you want.
>>> I would suggest moving/deleting all .po existing in cartoweb3/po/ 
>>> BEFORE doing that, as if some .po already exist, the script will try 
>>> to merge their content with the newly extracted content, which may be 
>>> problematic.
>>> so once you have emptied the /po folder, go to /cartoweb3/scripts/ 
>>> and run the command "php client2pot.php *yourprojectid*" and "php 
>>> server2pot.php *yourprojectid*"
>>> if you see  ("zoomin", "query_by_bbox") it means the strings are NOT 
>>> translated.
>>> check that gettext is installed and that it works correctly (see 
>>> documentation on how to test that 
>>> http://www.cartoweb.org/doc/cw3.5/xhtml/user.i18n.html#user.i18n.translations.debug) 
>>> restart Apache too.
>>> gettext is a bit buggy and sometimes you need to restart Apache to 
>>> see the modification you did in the .po files even after you have run 
>>> the cw3setup script to generate the .mo
>>> regards
>>> Oliver
>>> ----- Original Message ----- From: "Chris Duncan, GISmatters" 
>>> <duncan at gismatters.com>
>>> To: "Cartoweb Users" <cartoweb-users at lists.maptools.org>
>>> Sent: Wednesday, October 15, 2008 11:30 PM
>>> Subject: [Cartoweb-users] Confused about .po files
>>>> I am *not* trying to internationalize my application -- for our user 
>>>> base and local application, there's no need to support any other 
>>>> language than English.
>>>> I would like, however, to change some of the text that appears (for 
>>>> example, in the tips that pop up when you hover over a tool like the 
>>>> zoom-in tool).
>>>> I have tried to understand the system of .po files (defaults, 
>>>> project-specific, alternate languages, sources vs. generated, etc), 
>>>> but have become completely confused. I have not found enough info in 
>>>> the documentation or wiki to clear up my confusion.
>>>> Could someone please provide a simple, clear, concise discussion of 
>>>> the following (if you don't have lots of time to answer, then please 
>>>> just skip to item (c) which is my most urgent question):
>>>> (a) When, and in what order, do .po files get used? For one thing, 
>>>> I'm confused about what happens when I refresh the installation 
>>>> using cw3setup vs. what happens at runtime when someone is using the 
>>>> site. I see that there are *generated* .po files in the htdocs/po 
>>>> folder... I assume *those* are the ones that actually provide text 
>>>> to the application at runtime. But even there I find "default" and 
>>>> project-specific folders and files. Where do "source" files live, 
>>>> and what is the chain of processing that converts and/or merges them 
>>>> to create the ones I see in htdocs/po?
>>>> (b) When do language-specific files get used? If there is both a 
>>>> client.po and client.en.po file, which one gets used? What is the 
>>>> interaction of the "generic" vs. the "language-specific" .po files?
>>>> (c) Last, but most important to me at this time: Suppose I wanted to 
>>>> change the hover-text of the "zoom in" button to say "Choose this 
>>>> tool and click on the map to zoom in" (we have some very un-savvy 
>>>> users!). What specific steps do I follow to make that change in the 
>>>> recommended way? My project currently has *no* po folder or files... 
>>>> do I copy them from <cartowebhome>/po and then modify them? Do I 
>>>> need to run server2pot.php and client2pot.php to initialize them in 
>>>> some way? I'm totally lost on how to proceed...
>>>> One final detail that adds to my confusion: on my development 
>>>> machine (WinXP, Apache server) I get message text like "Zoom in" or 
>>>> "Query by rectangle" when I hover over the tools; when I upload my 
>>>> project to the live web server (Windows Server, IIS) the tips are 
>>>> the message IDs instead of the text ("zoomin", "query_by_bbox"). Why 
>>>> do they differ?
>>>> Thanks in advance to any of you who can help me understand this! 
>>>> Cheers,
>>>> Chris
>>>> -- 
>>>> Chris Duncan, Ph.D.
>>>> President
>>>> GISmatters
>>>> duncan at GISmatters.com
>>>> http://www.gismatters.com/
>>>> 1 Tuckerman Ln
>>>> Amherst, MA 01002
>>>> Tel: 413-549-2052
>>>> Fax: 508-637-2557
>>>> _______________________________________________
>>>> Cartoweb-users mailing list
>>>> Cartoweb-users at lists.maptools.org
>>>> http://lists.maptools.org/mailman/listinfo/cartoweb-users
>> -- 
>> Chris Duncan, Ph.D.
>> President
>> GISmatters
>> duncan at GISmatters.com
>> http://www.gismatters.com/
>> 1 Tuckerman Ln
>> Amherst, MA 01002
>> Tel: 413-549-2052
>> Fax: 508-637-2557


Chris Duncan, Ph.D.

duncan at GISmatters.com

1 Tuckerman Ln
Amherst, MA 01002

Tel: 413-549-2052
Fax: 508-637-2557

More information about the Cartoweb-users mailing list