Subject: Patch to make some strings available to translations

From: Guillaume Lelarge <[email-masked]>
Date: Fri, 14 Mar 2008 23:10:43 +0100

Hi,

I already sent this patch a few months before, but didn't get an answer 
on it. So, I updated it and hope for the best :)

Anyways, a few words on one file of this patch. I had to change 
system/global/pgpage.php in two ways.

First, to add '.UTF-8' to the locale. Without, I couldn't get any 
gettext translation to work. I wonder if Adrian had to do the same for 
his translation. I don't think the way I did it is absolutely right, so 
I would like comments on this.

Second, base_href is set to http://www.postgresql.org/, making any links 
go to the official website. I'm wondering why we didn't use the value of 
$_SETTINGS['hosted_url'] for example as it can be a local setting.

Any comments ? better ways to solve these ?

Thanks.

Regards.

-- 
Guillaume.
  http://www.postgresqlfr.org
  http://dalibo.com
Index: system/global/pgpage.php
===================================================================
--- system/global/pgpage.php	(révision 1995)
+++ system/global/pgpage.php	(copie de travail)
@@ -87,6 +87,7 @@
        $locale = $this->language;
        if (isset($_LANGUAGE_ALIASES[$this->language]))
            $locale = $_LANGUAGE_ALIASES[$this->language];
+       $locale .= '.UTF-8';
 
        putenv('LANG=' . $locale);
        putenv('LANGUAGE=' . $locale);
@@ -183,7 +184,7 @@
 
       if (!isset($_SERVER['ISMASTER']) || $_SERVER['ISMASTER'] != '1') {
           if ($this->navsection != 'admin')
-             $this->tpl->setVariable('base_href', 'http://www.postgresql.org/' . $this->url);
+             $this->tpl->setVariable('base_href', $_SETTINGS['hosted_url'] . $this->url);
       }
    }
 
Index: system/global/languages.php
===================================================================
--- system/global/languages.php	(révision 1995)
+++ system/global/languages.php	(copie de travail)
@@ -33,6 +33,7 @@
 $GLOBALS['_LANGUAGE_ALIASES'] = array(
     'br' => 'pt_BR',
     'en' => 'en_US',
+    'fr' => 'fr_FR',
     'ru' => 'ru_RU',
     'tr' => 'tr_TR'
 );
Index: template/common.html
===================================================================
--- template/common.html	(révision 1995)
+++ template/common.html	(copie de travail)
@@ -9,13 +9,13 @@
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <link rel="shortcut icon" href="/favicon.ico" />
 <!-- BEGIN page_rss_links -->
-    <link rel="alternate" type="application/rss+xml" title="PostgreSQL news" href="/news.rss" />
-    <link rel="alternate" type="application/rss+xml" title="PostgreSQL events" href="/events.rss" />
-    <link rel="alternate" type="application/rss+xml" title="PostgreSQL latest versions" href="/versions.rss" />
-    <link rel="alternate" type="application/rss+xml" title="Planet PostgreSQL" href="http://www.planetpostgresql.org/rss20.xml" />
+    <link rel="alternate" type="application/rss+xml" title="func_lang('PostgreSQL news')" href="/news.rss" />
+    <link rel="alternate" type="application/rss+xml" title="func_lang('PostgreSQL events')" href="/events.rss" />
+    <link rel="alternate" type="application/rss+xml" title="func_lang('PostgreSQL latest versions')" href="/versions.rss" />
+    <link rel="alternate" type="application/rss+xml" title="func_lang('Planet PostgreSQL')" href="http://www.planetpostgresql.org/rss20.xml" />
 <!-- END page_rss_links -->
     <style type="text/css" media="screen" title="Normal Text">@import url("/layout/css/blue/fixed.css");</style>
-    <link rel="alternate stylesheet" media="screen" href="/layout/css/blue/fixed_large.css" type="text/css" title="Large Text" />
+    <link rel="alternate stylesheet" media="screen" href="/layout/css/blue/fixed_large.css" type="text/css" title="func_lang('Large Text')" />
     <script type="text/javascript" src="/layout/js/styleswitcher.js"></script>
     <script type="text/javascript" src="/layout/js/geckostyle.js"></script>
 <!-- BEGIN include_tinymce_scripts -->
@@ -30,14 +30,14 @@
   <body>
    <div id="pgContainerWrap">
     <div id="pgContainer">
-      <span class="txtOffScreen"><a href="#pgContent" title="Skip site navigation" accesskey="1">Skip site navigation</a> (1)</span>
-      <span class="txtOffScreen"><a href="#pgContentWrap" title="Skip section navigation" accesskey="2">Skip section navigation</a> (2)</span>
+      <span class="txtOffScreen"><a href="#pgContent" title="func_lang('Skip site navigation')" accesskey="1">func_lang("Skip site navigation")</a> (1)</span>
+      <span class="txtOffScreen"><a href="#pgContentWrap" title="func_lang('Skip section navigation')" accesskey="2">func_lang("Skip section navigation")</a> (2)</span>
       <div id="pgHeaderContainer">
         <div id="pgSearch">
           <form method="get" action="http://search.postgresql.org/search">
             <div>
 	      <h2 class="pgBlockHide"><label for="q">func_lang("Search")</label></h2>
-          <input id="q" name="q" type="text" size="20" maxlength="255" onfocus="if( this.value==this.defaultValue ) this.value='';" value="Search" accesskey="s" /><input name="a" type="hidden" value="1"/><input id="submit" name="submit" type="submit" value="Search" />
+          <input id="q" name="q" type="text" size="20" maxlength="255" onfocus="if( this.value==this.defaultValue ) this.value='';" value="func_lang('Search')" accesskey="s" /><input name="a" type="hidden" value="1"/><input id="submit" name="submit" type="submit" value="func_lang('Search')" />
             </div>
           </form>
  	  <h2 class="pgBlockHide">func_lang("Peripheral Links")</h2>
@@ -62,7 +62,7 @@
           </div>
           <div id="pgHeaderLogoRight">
             <span class="txtOffScreen">|</span>
-            <a href="/" title="The world's most advanced open source database."><img src="/layout/images/hdr_right.png" width="210" height="80" alt="The world's most advanced open source database." /></a>
+            <a href="/" title="func_lang('The world\'s most advanced open source database.')"><img src="/layout/images/hdr_right.png" width="210" height="80" alt="func_lang('The world\'s most advanced open source database.')" /></a>
           </div>
         </div>
   	<h2 class="pgBlockHide">func_lang("Site Navigation")</h2>
Index: template/search.html
===================================================================
--- template/search.html	(révision 1995)
+++ template/search.html	(copie de travail)
@@ -5,32 +5,32 @@
  <div class="tblBasic">
   <table border="0" cellpadding="0" cellspacing="0" class="tblBasicGrey" width="590">
    <tr>
-    <td class="colFirstR">Search for:</td>
-    <th class="colLast"><input type="text" name="q" value="{searchfor}" /> <input type="submit" value="Search" /></th>
+    <td class="colFirstR">func_lang("Search for"):</td>
+    <th class="colLast"><input type="text" name="q" value="{searchfor}" /> <input type="submit" value="func_lang('Search')" /></th>
    </tr>
 <!-- BEGIN main_form -->
    <tr class="lastrow">
     <td class="colFirst"></td>
-    <td class="colLast"><input type="checkbox" name="a" value="1" {comsites}/>Include community sites</td>
+    <td class="colLast"><input type="checkbox" name="a" value="1" {comsites}/>func_lang("Include community sites")</td>
    </tr>
 <!-- END main_form -->
 <!-- BEGIN archives_form -->
    <tr>
-    <td class="colFirstR">List:<input type="hidden" name="m" value="1" /></td>
+    <td class="colFirstR">func_lang("List"):<input type="hidden" name="m" value="1" /></td>
     <td class="colLast"><select name="l"><!-- BEGIN archives_lists -->
  <option value="{listid}"{listselect}>{listname}</option>
 <!-- END archives_lists -->
 </select></td>
    </tr>
    <tr>
-    <td class="colFirstR">Post date:</td>
+    <td class="colFirstR">func_lang("Post date"):</td>
     <td class="colLast"><select name="d"><!-- BEGIN archives_dates -->
 <option value="{archives_dates_val}" {archives_dates_sel}>{archives_dates_txt}</option>
 <!-- END archives_dates -->
 </select></td>
    </tr>
    <tr class="lastrow">
-    <td class="colFirst" align="right">Sort by:</td>
+    <td class="colFirst" align="right">func_lang("Sort by"):</td>
     <td class="colLast"><select name="s">{archives_sort_str}</select></td>
    </tr>
 <!-- END archives_form -->
@@ -44,7 +44,7 @@
 <!-- END search_error -->
 </div>
 <!-- BEGIN docbot_search -->
-Based on your search term, we recommend the following links:
+func_lang("Based on your search term, we recommend the following links"):
 <ul id="pgFrontShortcutsList">
 <!-- BEGIN docbot_search_loop -->
 <li><a href="{docbot_url}">{docbot_url}</a></li>
@@ -52,14 +52,14 @@
 </ul>
 <!-- END docbot_search -->
 <!-- BEGIN no_hits -->
-<p>Your search for <b>{searchfor}</b> returned no hits.</p>
+<p>func_lang("Your search for <b>{searchfor}</b> returned no hits").</p>
 <!-- END no_hits -->
 <!-- BEGIN main_search -->
-<h2>Results {firsthit}-{lasthit} of {totalhits}.</h2>
-<p>Searching in {searchpages} pages took {searchtime} seconds.
-Site search powered by <a href="http://www.postgresql.org">PostgreSQL 8.3</a>.</p>
+<h2>func_lang("Results {firsthit}-{lasthit} of {totalhits}").</h2>
+<p>func_lang("Searching in {searchpages} pages took {searchtime} seconds").
+func_lang("Site search powered by") <a href="http://www.postgresql.org">PostgreSQL 8.3</a>.</p>
 <!-- BEGIN page_links1 -->
-Result pages: {page_links}<br/><br/>
+func_lang("Result pages"): {page_links}<br/><br/>
 <!-- END page_links1 -->
 <!-- BEGIN main_search_loop -->
 {hit_num}. <a href="{hit_url}">{hit_title}</a> [{hit_rank}]<br/>
@@ -69,12 +69,12 @@
 <!-- END main_search_loop -->
 <!-- BEGIN archives_search_loop -->
 {arch_num} . <a href="http://archives.postgresql.org/{arch_list}/{arch_year}-{arch_month}/msg{arch_msgnum}.php">{arch_subject}</a> [{arch_rank}]<br/>
-Posted {arch_date} by {arch_author}.<br/>
+func_lang("Posted {arch_date} by {arch_author}.")<br/>
 {arch_abstract}<br/>
 <a href="http://archives.postgresql.org/{arch_list}/{arch_year}-{arch_month}/msg{arch_msgnum}.php">http://archives.postgresql.org/{arch_list}/{arch_year}-{arch_month}/msg{arch_msgnum}.php</a><br/>
 <br/>
 <!-- END archives_search_loop -->
 <!-- BEGIN page_links2 -->
-Result pages: {page_links}<br/><br/>
+func_lang("Result pages"): {page_links}<br/><br/>
 <!-- END page_links2 -->
 <!-- END main_search -->
Index: template/download.html
===================================================================
--- template/download.html	(révision 1995)
+++ template/download.html	(copie de travail)
@@ -1,5 +1,5 @@
 <!-- BEGIN page_title_block -->
-Choose a Mirror
+func_lang("Choose a Mirror")
 <!-- END page_title_block -->
 <!-- BEGIN www_mirror_greeting -->
 <h1>func_lang("Choose a website mirror")</h1>
@@ -22,8 +22,7 @@
 <b><a href="{master_server}/redir?{url}">{urlh}</a></b>
 </p>
 <!-- BEGIN last_mirror_download_block -->
-<p>Your download will start automatically from this mirror in 5 seconds unless you select
-another mirror in the list below.</p>
+<p>func_lang("Your download will start automatically from this mirror in 5 seconds unless you select another mirror in the list below.")</p>
 <!-- END last_mirror_download_block -->
 <!-- BEGIN last_mirror_browse_block -->
 <p>You will be automatically redirected to this mirror in 5 seconds unless you
Index: template/community-docs.html
===================================================================
--- template/community-docs.html	(révision 1995)
+++ template/community-docs.html	(copie de travail)
@@ -2,7 +2,7 @@
  <table border="0" cellpadding="0" cellspacing="0" width="95%" class="tblCompact tblBasicGrey">
   <tr class="firstrow">
    <td class="colFirstT">
-This page is user contributed documentation. See the bottom of the page for information about the author.
+func_lang("This page is user contributed documentation. See the bottom of the page for information about the author.")
    </td>
    <td class="colLastT">&nbsp;</td>
   </tr>
@@ -23,16 +23,16 @@
 <div id="pgCommunityDocsFooter" class="tblBasic">
  <table border="0" cellpadding="0" cellspacing="0" width="95%" class="tblCompact tblBasicGrey">
   <tr class="firstrow">
-   <td class="colFirstT">Updated:</td>
+   <td class="colFirstT">func_lang("Updated"):</td>
    <td class="colLastT">{savedate}</td>
   </tr>
   <tr>
-   <td class="colFirstT">Author:</td>
+   <td class="colFirstT">func_lang("Author"):</td>
    <td class="colLastT"><strong>{author_name}</strong><br/>{author_info}</td>
   </tr>
 <!-- BEGIN communitydoc_versionhistory_wrap -->
   <tr>
-   <td class="colFirstT">Version history:</td>
+   <td class="colFirstT">func_lang("Version history"):</td>
    <td class="colLastT">
    <ul>
     <!-- BEGIN communitydocs_versionhistory -->
@@ -43,8 +43,8 @@
   </tr>
 <!-- END communitydoc_versionhistory_wrap -->
   <tr class="lastrow">
-   <td class="colFirstT">Operations:</td>
-   <td class="colLastT"><a href="{master_server}/community/docedit.{page_id}">Edit</a> <a href="{master_server}/community/docadd.{page_id}">Create subpage</a> (Requires <a href="/community/signup">community login</a>)</td>
+   <td class="colFirstT">func_lang("Operations"):</td>
+   <td class="colLastT"><a href="{master_server}/community/docedit.{page_id}">func_lang("Edit")</a> <a href="{master_server}/community/docadd.{page_id}">func_lang("Create subpage")</a> (func_lang("Requires") <a href="/community/signup">func_lang("community login")</a>)</td>
   </tr>
  </table>
 </div>
Index: template/common-docs.html
===================================================================
--- template/common-docs.html	(révision 1995)
+++ template/common-docs.html	(copie de travail)
@@ -23,7 +23,7 @@
 	<form action="http://search.postgresql.org/search" method="get">
 	<div>
 	<input type="hidden" name="u" value="/docs/{doc_nav_version}/{docs_type}/" /> 
-	<label for="q">func_lang("Search Documentation:")&nbsp;</label><input type="text" id="q" name="q" size="20" onfocus="if( this.value==this.defaultValue ) this.value='';" value="Search" /><input id="submit" type="submit" value="func_lang('Search')" />
+	<label for="q">func_lang("Search Documentation:")&nbsp;</label><input type="text" id="q" name="q" size="20" onfocus="if( this.value==this.defaultValue ) this.value='';" value="func_lang('Search')" /><input id="submit" type="submit" value="func_lang('Search')" />
 	</div>
 	</form>
         <div id="docTextSize">func_lang("Text Size:") <a href="#" onclick="setActiveStyleSheet('Normal Text'); return false;" onkeypress="return false;" title="func_lang('Normal Text Size')">func_lang("Normal")</a> / <a href="#" onclick="setActiveStyleSheet('Large Text'); return false;" onkeypress="return false;" title="func_lang('Large Text Size')">func_lang("Large")</a></div>
Index: template/community/survey.html
===================================================================
--- template/community/survey.html	(révision 1995)
+++ template/community/survey.html	(copie de travail)
@@ -1,5 +1,5 @@
 <!-- BEGIN page_title_block -->
-Community: Survey Results: {page_title}
+func_lang("Community: Survey Results:") {page_title}
 <!-- END page_title_block -->
 <h1>func_lang("Survey Results")</h1>
 <p>func_lang("The current results of our <b>{result_title}</b> survey are:")</p>
Index: template/navigation/community.html
===================================================================
--- template/navigation/community.html	(révision 1995)
+++ template/navigation/community.html	(copie de travail)
@@ -15,8 +15,8 @@
 <li><a href="/community/weeklynews/">func_lang("Weekly News")</a></li>
 <li class="last-child"><a href="/community/signup">Community login</a>
     <ul>
-        <li><a href="{master_server}/community/profile">Profile</a></li>
-        <li class="last-child"><a href="/community/lostpwd">Lost password</a></li>
+        <li><a href="{master_server}/community/profile">func_lang("Profile")</a></li>
+        <li class="last-child"><a href="/community/lostpwd">func_lang("Lost password")</a></li>
     </ul>
 </li>
 </ul>
Index: template/navigation/download.html
===================================================================
--- template/navigation/download.html	(révision 1995)
+++ template/navigation/download.html	(copie de travail)
@@ -1,7 +1,7 @@
 <ul>
 <li><a href="/download/">func_lang("Downloads")</a></li>
 <li><a href="/ftp/">func_lang("File Browser")</a></li>
-<li><a href="/download/#other">Community Software</a>
+<li><a href="/download/#other">func_lang("Community Software")</a>
  <ul>
   <li class="last-child"><a href="http://pgfoundry.org">pgFoundry</a></li>
  </ul>
Index: template/navigation/about.html
===================================================================
--- template/navigation/about.html	(révision 1995)
+++ template/navigation/about.html	(copie de travail)
@@ -10,7 +10,7 @@
 <li><a href="/about/history">func_lang("History")</a></li>
 <li><a href="/about/sponsors">func_lang("Sponsors")</a>
  <ul>
-  <li class="last-child"><a href="/about/servers">Servers</a></li>
+  <li class="last-child"><a href="/about/servers">func_lang("Servers")</a></li>
  </ul>
 </li>
 <li><a href="/about/newsarchive">func_lang("Latest News")</a></li>
Index: template/about/news.html
===================================================================
--- template/about/news.html	(révision 1995)
+++ template/about/news.html	(copie de travail)
@@ -1,5 +1,5 @@
 <!-- BEGIN page_title_block -->
-News: {title_headline}
+func_lang("News"): {title_headline}
 <!-- END page_title_block -->
 <h1>{headline}</h1>
 <div id="pgArchiveWrap">
Index: template/about/newsarchive.html
===================================================================
--- template/about/newsarchive.html	(révision 1995)
+++ template/about/newsarchive.html	(copie de travail)
@@ -1,5 +1,5 @@
 <!-- BEGIN page_title_block -->
-News
+func_lang("News")
 <!-- END page_title_block -->
 <h1>func_lang("News")</h1>
 
Index: template/about/quotes.html
===================================================================
--- template/about/quotes.html	(révision 1995)
+++ template/about/quotes.html	(copie de travail)
@@ -1,5 +1,5 @@
 <!-- BEGIN page_title_block -->
-Quote: {title_headline}
+func_lang("Quote"): {title_headline}
 <!-- END page_title_block -->
 <h1>func_lang("Featured User")</h1>
 <div id="txtFrontUserText">
Index: template/about/event.html
===================================================================
--- template/about/event.html	(révision 1995)
+++ template/about/event.html	(copie de travail)
@@ -1,5 +1,5 @@
 <!-- BEGIN page_title_block -->
-Events: {title_event} in {title_location}
+func_lang("Events: {title_event} in {title_location}")
 <!-- END page_title_block -->
 <h1>{event}</h1>
 <div id="pgArchiveWrap">
Index: template/about/quotesarchive.html
===================================================================
--- template/about/quotesarchive.html	(révision 1995)
+++ template/about/quotesarchive.html	(copie de travail)
@@ -1,5 +1,5 @@
 <!-- BEGIN page_title_block -->
-Quotes
+func_lang("Quotes")
 <!-- END page_title_block -->
 <h1>func_lang("Quotes")</h1>
 
Index: template/about/eventarchive.html
===================================================================
--- template/about/eventarchive.html	(révision 1995)
+++ template/about/eventarchive.html	(copie de travail)
@@ -1,5 +1,5 @@
 <!-- BEGIN page_title_block -->
-Events
+func_lang("Events")
 <!-- END page_title_block -->
 <h1>func_lang("Events")</h1>
 <br />
Index: template/about/events-loop.html
===================================================================
--- template/about/events-loop.html	(révision 1995)
+++ template/about/events-loop.html	(copie de travail)
@@ -6,7 +6,7 @@
     <!-- BEGIN event_date_startend -->
     func_lang("Date:") <b>{event_date_start} &ndash; {event_date_end}</b>
     <!-- END event_date_startend -->
-    func_lang("Location:") <B>{event_location}</b><br />
+    func_lang("Location:") <b>{event_location}</b><br />
 func_lang("Posted by <b>{event_posted_by}</b>")<br />
 <div class="listsummary">{event_summary} <a href="/about/event.{event_id}">func_lang("more...")</a></div><br />
 <!-- END event_loop -->
Index: template/index.html
===================================================================
--- template/index.html	(révision 1995)
+++ template/index.html	(copie de travail)
@@ -27,11 +27,11 @@
               <div id="pgFrontUser">
                 <div id="pgFrontUserInner">
                   <div id="pgFrontUserWrap">
-                    <h2><img src="/layout/images/en/hdr_featureduser.png" width="104" height="10" alt="Featured User" /></h2>
+                    <h2><img src="/layout/images/en/hdr_featureduser.png" width="104" height="10" alt="func_lang('Featured User')" /></h2>
                     <div id="pgFrontUserContent">
                       <!-- INCLUDE about/quotes-index.html -->
                       <div id="txtFrontUserLink">
-                          <img src="/layout/images/blt_blu_arrow.png" width="6" height="5" alt="" /><a href="/about/casestudies">func_lang("Case Studies")</a><span class="txtDivider">|</span><a href="/about/quotesarchive" title="See more quotes">func_lang("More Quotes")</a><span class="txtDivider">|</span><a href="/about/users" title="See featured users">func_lang("Featured Users")</a>
+                          <img src="/layout/images/blt_blu_arrow.png" width="6" height="5" alt="" /><a href="/about/casestudies">func_lang("Case Studies")</a><span class="txtDivider">|</span><a href="/about/quotesarchive" title="func_lang('See more quotes')">func_lang("More Quotes")</a><span class="txtDivider">|</span><a href="/about/users" title="See featured users">func_lang("Featured Users")</a>
                       </div>
                     </div>
                   </div>
@@ -42,17 +42,17 @@
         </div>
         <div id="pgFrontRightContainer">
           <div id="pgFrontLatestReleases">
-            <h2><img src="/layout/images/en/hdr_latestreleases.png" width="120" height="10" alt="Latest Releases" /></h2>
+            <h2><img src="/layout/images/en/hdr_latestreleases.png" width="120" height="10" alt="func_lang('Latest Releases')" /></h2>
             <div id="pgFrontLatestReleasesWrap">
 <!-- BEGIN front_release_loop -->
-             <b>{version}:</b> <a href="/ftp/source/v{version}">Source</a> &middot; <a href="/ftp/binary/v{version}">Binary</a> &middot; <a href="/docs/{majorver}/static/{relnotes}">Notes</a>
+             <b>{version}:</b> <a href="/ftp/source/v{version}">func_lang("Source")</a> &middot; <a href="/ftp/binary/v{version}">func_lang("Binary")</a> &middot; <a href="/docs/{majorver}/static/{relnotes}">func_lang("Notes")</a>
               <br />
 <!-- END front_release_loop -->
             </div>
-            <div id="pgFrontLatestReleasesNote"><a href="/versions.rss" title="func_lang('Versions RSS Feed')"><img class="pgRSSImage" src="/layout/images/ico_rss.png" width="28" height="13" alt="func_lang('Versions RSS Feed')" /></a> | <a href="/support/versioning">Why should I upgrade?</a></div>
+            <div id="pgFrontLatestReleasesNote"><a href="/versions.rss" title="func_lang('Versions RSS Feed')"><img class="pgRSSImage" src="/layout/images/ico_rss.png" width="28" height="13" alt="func_lang('Versions RSS Feed')" /></a> | <a href="/support/versioning">func_lang("Why should I upgrade?")</a></div>
           </div>
           <div id="pgFrontShortcuts">
-            <h2><img src="/layout/images/en/hdr_shortcuts.png" width="85" height="10" alt="Shortcuts" /></h2>
+            <h2><img src="/layout/images/en/hdr_shortcuts.png" width="85" height="10" alt="func_lang('Shortcuts')" /></h2>
             <div id="pgFrontShortcutsWrap">
               <ul id="pgFrontShortcutsList">
                 <li>
@@ -80,7 +80,7 @@
             </div>
           </div>
           <div id="pgFrontSupportUs">
-            <h2><img src="/layout/images/en/hdr_supportus.png" width="81" height="10" alt="Support Us" /></h2>
+            <h2><img src="/layout/images/en/hdr_supportus.png" width="81" height="10" alt="func_lang('Support Us')" /></h2>
             <div id="pgFrontSupportUsWrap">
               <div id="txtFrontSupportUsText">
                 func_lang("PostgreSQL is free. Please support our work by making a <a href=\"/about/donate\">donation</a>").
@@ -91,7 +91,7 @@
        <div id="pgFrontBottomContainer">
          <div id="pgFrontNews" class="txtNewsEvent">
            <a href="/about/newsarchive">  
-           <img src="/layout/images/en/hdr_latestnews.png" width="90" height="10" alt="Latest News" />
+           <img src="/layout/images/en/hdr_latestnews.png" width="90" height="10" alt="func_lang('Latest News')" />
            </a>
            <div class="pgNewsEventsWrap">
              <!-- INCLUDE about/news-index-loop.html -->
@@ -113,7 +113,7 @@
          </div>
           <div id="pgFrontPlanet">
             <a href="http://www.planetpostgresql.org">
-            <img src="/layout/images/en/hdr_planetpg.png" width="140" height="10" alt="Planet PostgreSQL" />
+            <img src="/layout/images/en/hdr_planetpg.png" width="140" height="10" alt="func_lang('Planet PostgreSQL')" />
             </a>
             <div id="pgFrontPlanetWrap">
               <!-- BEGIN planet_loop -->
@@ -137,13 +137,13 @@
           </div>
          <div id="pgFrontEvents" class="txtNewsEvent">
            <a href="/about/eventarchive">
-           <img src="/layout/images/en/hdr_upcomingevents.png" width="123" height="10" alt="Upcoming Events" />
+           <img src="/layout/images/en/hdr_upcomingevents.png" width="123" height="10" alt="func_lang('Upcoming Events')" />
            </a>
            <div class="pgNewsEventsWrap">
                <!-- INCLUDE about/events-index-loop.html -->
            </div>
            <a href="/about/eventarchive">
-           <img src="/layout/images/en/hdr_upcomingtraining.png" alt="Upcoming training" />
+           <img src="/layout/images/en/hdr_upcomingtraining.png" alt="func_lang('Upcoming training')" />
            </a>
            <div class="pgNewsEventsWrap">
              <div id="pgFrontTrainingSummary">
Index: .htaccess
===================================================================
--- .htaccess	(révision 1995)
+++ .htaccess	(copie de travail)
@@ -3,18 +3,15 @@
 AddDefaultCharset utf-8
 
 # Pear modules
-php_value include_path "/usr/local/www/portal.postgresql.org/pear/lib:."
+php_value include_path "/usr/share/php:."
 
 # Fire up mod_rewrite
 
 RewriteEngine On
 
-# Disallow access to .svn directories
-RewriteRule /.svn - [F]
-
 # Rewrite every request except those for
 # static files to system/handler.php
-RewriteRule ^(favicon\.ico|admin|template|layout|files|external|system/handler\.php|system/rss\.php|system/redir\.php|system/communityfiles\.php|system/oldsearch\.php|sync_timestamp|web_sync_timestamp|mirrors.xml|robots.txt) - [L]
+RewriteRule ^(favicon\.ico|admin|template|layout|files|external|system/handler\.php|system/rss\.php|system/redir\.php|system/communityfiles\.php|sync_timestamp|robots.txt) - [L]
 
 # Redirector
 RewriteRule ^redir$ /system/redir.php [QSA,L]

---

From: Guillaume Lelarge <[email-masked]>
Date: Fri, 14 Mar 2008 23:23:50 +0100

> Any comments ? better ways to solve these ?

I forgot something. "tools/schema.sql" seems to be the schema of the 
pgweb database. Unfortunately, it doesn't seem up to date... at least, 
the organisation column is missing on the events table.

---

From: Guillaume Lelarge <[email-masked]>
Date: Fri, 14 Mar 2008 23:55:15 +0100

Magnus Hagander a écrit :
> Guillaume Lelarge wrote:
>>> I already sent this patch a few months before, but didn't get an 
>>> answer on it. So, I updated it and hope for the best :)
>>>
>>> gettext translation to work. I wonder if Adrian had to do the same 
>>> for his translation. I don't think the way I did it is absolutely 
>>> right, so I would like comments on this.
>>>
>>> Second, base_href is set to http://www.postgresql.org/, making any 
>>> links go to the official website. I'm wondering why we didn't use the 
>>> value of $_SETTINGS['hosted_url'] for example as it can be a local 
>>> setting.
>>>
> Yeah, that's a known problem. I'm working with JD (I hope) to get it set 
> up so it'll automatically be committed there from the production db.
> 

OK. Can you send me an updated schema.sql so that I can better work on 
the website' translation issues ? Thanks.

---

From: Magnus Hagander <[email-masked]>
Date: Fri, 14 Mar 2008 23:57:33 +0100

Guillaume Lelarge wrote:
>> his translation. I don't think the way I did it is absolutely right, 
>> so I would like comments on this.
>>

//Magnus

---

From: Magnus Hagander <[email-masked]>
Date: Sun, 16 Mar 2008 17:32:42 +0100

> I would like comments on this.

Good question. I *think* it's correct since it has to match a locale on 
the machine, which does require .UTF-8.

Anybody else?

> $_SETTINGS['hosted_url'] for example as it can be a local setting.

This is intentional. If you end up on wwwmaster by a link, you should 
automatically be sent back to the www mirrors.

You can control this by setting the ISMASTER variable from your apache 
configuration. Set it to "1" and there will be no base href set. For 
example, the config on wwwmaster has:

# When accessed locally, don't set BASE HREF, because that would break
# the static mirrors. When accessed dynamically, set it so we don't
# load the dynamic server with static requests.
         SetEnvIf Remote_Addr "^(127|217\.196\.146\.204)" ISMASTER=1

In the apache config.

 > Any comments ? better ways to solve these ?

I assume it's a typo that you included a patch for .htaccess there? If 
not, then that part certainly looks wrong :-)

I assume you have tested that once these things are changed, 
translations of them actually work? I'm particularly wondering about the 
parts where there are template tags inside the translation.

//Magnus

---

From: Guillaume Lelarge <[email-masked]>
Date: Sun, 16 Mar 2008 23:29:48 +0100

Magnus Hagander a écrit :
>> [...]

OK, works great with this.

> not, then that part certainly looks wrong :-)

You're right, it's a typo. Sorry about this.

> parts where there are template tags inside the translation.

Actually, I didn't check all strings. Strictly speaking about the parts 
with template tags, I did it because I've seen other parts with template 
tags within a func_lang function call. I'll check more deeply... but I 
think it will be harder because many of them depend on the search 
functionality. Anyways, I'm working on it...

Thanks for your comments.

---

From: Guillaume Lelarge <[email-masked]>
Date: Wed, 19 Mar 2008 07:42:21 +0100

Seems my mail didn't go through, probably because of my big attachment. 
I'm sending it again, but compressed this time.

Guillaume Lelarge a écrit :
>> translations of them actually work? I'm particularly wondering about 
>> the parts where there are template tags inside the translation.
>>
> 

OK, so, I tested the template tags inside translation and it works  :)

But, to be honest, title and alt strings weren't translatable with my 
previous patch. Here is a new one which fixes this (and include the 
other one, without the .htaccess)..

Next work... translatable images.

---

From: Guillaume Lelarge <[email-masked]>
Date: Wed, 19 Mar 2008 22:24:40 +0100

> Next work... translatable images.

I found a way to get translatables images but I can't stop thinking this 
is an ugly *ugly* hack. Here is my idea : using the func_lang on the 
href part of the img tag. For example, here is a part of the patch :

-                    <h2><img 
src="/layout/images/en/hdr_featureduser.png" width="104" height="10" 
alt="Featured User" /></h2>
+                    <h2><img 
src=func_lang("'/layout/images/en/hdr_featureduser.png'") width="104" 
height="10" alt=func_lang("'Featured User'") /></h2>

This way, each translation can add a specific path and a specific 
filename. Perhaps, we can only use the path. In my tests, I use 
/layout/images/fr instead of /layout/images/en.

Do you have any comments on this dirty idea ? :) if you think this is 
something doable, I can quickly build a small patch.

But my real issue is doing the actual images... I'm not good a this :)

---

From: Magnus Hagander <[email-masked]>
Date: Wed, 19 Mar 2008 22:59:55 +0100

> something doable, I can quickly build a small patch.

I don't like it at all.

I think we need something like func_image('hdr_featureduser.png'), and 
then have the framework take care of that one.

> But my real issue is doing the actual images... I'm not good a this :)

That's another problem. It requires non-free fonts... See the archives :-(

Perhaps this is a good time to try to find a free font that can do what 
we need.

//Magnus

---

From: Guillaume Lelarge <[email-masked]>
Date: Wed, 19 Mar 2008 23:04:42 +0100

Magnus Hagander a écrit :
>> I found a way to get translatables images but I can't stop thinking 
>> this is an ugly *ugly* hack. Here is my idea : using the func_lang on 
>> the href part of the img tag. For example, here is a part of the patch :
>>
>> -                    <h2><img 

Yep, I guess it couldn't be that simple :)

> then have the framework take care of that one.

Which means we need to modify the framework ? that'll be a much bigger 
work than what I intended to do. Anyways, I'll get a look at it.

> That's another problem. It requires non-free fonts... See the archives :-(

Yes, I remember this.

> Perhaps this is a good time to try to find a free font that can do what 

+1

---

From: Guillaume Lelarge <[email-masked]>
Date: Sat, 22 Mar 2008 16:21:55 +0100

> work than what I intended to do. Anyways, I'll get a look at it.

I guess I was wrong. You'll find a patch attached that implements a 
func_image function via a call to setCallbackFunction.

I can also send a complete patch (the previous one which adds 
translation to some texts, and this patch).

---

From: Guillaume Lelarge <[email-masked]>
Date: Sat, 22 Mar 2008 16:23:53 +0100

Guillaume Lelarge a écrit :
>>> I think we need something like func_image('hdr_featureduser.png'), 
>>> and then have the framework take care of that one.
>>>
>>

And now with the patch... sorry about this...

-- 
Guillaume.
  http://www.postgresqlfr.org
  http://dalibo.com
Index: system/global/pgpage.php
===================================================================
--- system/global/pgpage.php	(révision 2004)
+++ system/global/pgpage.php	(copie de travail)
@@ -2,6 +2,12 @@
 // $Id: pgpage.php,v 1.6 2007-10-21 17:20:07 mastermind Exp $
 // Base-class for all pages
 //
+
+function getimage($arg) {
+  global $pgpage;
+  return '"/layout/images/'.$pgpage->getLanguage().'/'.$arg.'"';
+}
+
 abstract class PgPage {
    protected $language;
    protected $language_direction;
@@ -87,6 +93,7 @@
        $locale = $this->language;
        if (isset($_LANGUAGE_ALIASES[$this->language]))
            $locale = $_LANGUAGE_ALIASES[$this->language];
+       $locale .= '.UTF-8';
 
        putenv('LANG=' . $locale);
        putenv('LANGUAGE=' . $locale);
@@ -104,6 +111,10 @@
        header('Content-Language: ' . $this->language);
    }
 
+   public function getLanguage() {
+     return $this->language;
+   }
+
    private function getLanguageFromHeaders() {
        global $_LANGUAGES;
 
@@ -122,6 +133,7 @@
       // Prepare the template
       $this->tpl =& new HTML_Template_Sigma('../template');
       $this->tpl->setCallbackFunction('lang', 'gettext', true);
+      $this->tpl->setCallbackFunction('image', 'getimage', true);
       $this->tpl->loadTemplateFile($this->base_template, true, true);
       $this->tpl->setGlobalVariable(array(
         'site_title'        => $_SETTINGS['site_title'],
Index: template/index.html
===================================================================
--- template/index.html	(révision 2004)
+++ template/index.html	(copie de travail)
@@ -24,7 +24,7 @@
               <div id="pgFrontUser">
                 <div id="pgFrontUserInner">
                   <div id="pgFrontUserWrap">
-                    <h2><img src="/layout/images/en/hdr_featureduser.png" width="104" height="10" alt="Featured User" /></h2>
+                    <h2><img src=func_image('hdr_featureduser.png') width="104" height="10" alt="Featured User" /></h2>
                     <div id="pgFrontUserContent">
                       <!-- INCLUDE about/quotes-index.html -->
                       <div id="txtFrontUserLink">
@@ -39,7 +39,7 @@
         </div>
         <div id="pgFrontRightContainer">
           <div id="pgFrontLatestReleases">
-            <h2><img src="/layout/images/en/hdr_latestreleases.png" width="120" height="10" alt="Latest Releases" /></h2>
+            <h2><img src=func_image('hdr_latestreleases.png') width="120" height="10" alt="Latest Releases" /></h2>
             <div id="pgFrontLatestReleasesWrap">
 <!-- BEGIN front_release_loop -->
              <b>{version}:</b> <a href="/ftp/source/v{version}">Source</a> &middot; <a href="/ftp/binary/v{version}">Binary</a> &middot; <a href="/docs/{majorver}/static/{relnotes}">Notes</a>
@@ -49,7 +49,7 @@
             <div id="pgFrontLatestReleasesNote"><a href="/versions.rss" title="func_lang('Versions RSS Feed')"><img class="pgRSSImage" src="/layout/images/ico_rss.png" width="28" height="13" alt="func_lang('Versions RSS Feed')" /></a> | <a href="/support/versioning">Why should I upgrade?</a></div>
           </div>
           <div id="pgFrontShortcuts">
-            <h2><img src="/layout/images/en/hdr_shortcuts.png" width="85" height="10" alt="Shortcuts" /></h2>
+            <h2><img src=func_image('hdr_shortcuts.png') width="85" height="10" alt="Shortcuts" /></h2>
             <div id="pgFrontShortcutsWrap">
               <ul id="pgFrontShortcutsList">
                 <li>
@@ -77,7 +77,7 @@
             </div>
           </div>
           <div id="pgFrontSupportUs">
-            <h2><img src="/layout/images/en/hdr_supportus.png" width="81" height="10" alt="Support Us" /></h2>
+            <h2><img src=func_image('hdr_supportus.png') width="81" height="10" alt="Support Us" /></h2>
             <div id="pgFrontSupportUsWrap">
               <div id="txtFrontSupportUsText">
                 func_lang("PostgreSQL is free. Please support our work by making a <a href=\"/about/donate\">donation</a>").
@@ -88,7 +88,7 @@
        <div id="pgFrontBottomContainer">
          <div id="pgFrontNews" class="txtNewsEvent">
            <a href="/about/newsarchive">  
-           <img src="/layout/images/en/hdr_latestnews.png" width="90" height="10" alt="Latest News" />
+           <img src=func_image('hdr_latestnews.png') width="90" height="10" alt="Latest News" />
            </a>
            <div class="pgNewsEventsWrap">
              <!-- INCLUDE about/news-index-loop.html -->
@@ -110,7 +110,7 @@
          </div>
           <div id="pgFrontPlanet">
             <a href="http://www.planetpostgresql.org">
-            <img src="/layout/images/en/hdr_planetpg.png" width="140" height="10" alt="Planet PostgreSQL" />
+            <img src=func_image('hdr_planetpg.png') width="140" height="10" alt="Planet PostgreSQL" />
             </a>
             <div id="pgFrontPlanetWrap">
               <!-- BEGIN planet_loop -->
@@ -134,13 +134,13 @@
           </div>
          <div id="pgFrontEvents" class="txtNewsEvent">
            <a href="/about/eventarchive">
-           <img src="/layout/images/en/hdr_upcomingevents.png" width="123" height="10" alt="Upcoming Events" />
+           <img src=func_image('hdr_upcomingevents.png') width="123" height="10" alt="Upcoming Events" />
            </a>
            <div class="pgNewsEventsWrap">
                <!-- INCLUDE about/events-index-loop.html -->
            </div>
            <a href="/about/eventarchive">
-           <img src="/layout/images/en/hdr_upcomingtraining.png" alt="Upcoming training" />
+           <img src=func_image('hdr_upcomingtraining.png') alt="Upcoming training" />
            </a>
            <div class="pgNewsEventsWrap">
              <div id="pgFrontTrainingSummary">

---

From: Alvaro Herrera <[email-masked]>
Date: Sat, 22 Mar 2008 17:59:14 -0300

>> translation to some texts, and this patch).

Suggestion: check if the image exists in the translated version, serve
the english version if not.  That way you only need to produce alternate
images for those that need translation.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

---

From: Guillaume Lelarge <[email-masked]>
Date: Sat, 22 Mar 2008 22:52:17 +0100

> images for those that need translation.

Damn, forgot about this one. You're right. Patch version 2 attached.

Thanks Alvaro.

@@ -2,6 +2,17 @@
+  if (file_exists('../layout/images/'.$pgpage->getLanguage().'/'.$arg)) {
+  else {
+     return '"/layout/images/en/'.$arg.'"';
@@ -87,6 +98,7 @@
 
@@ -104,6 +116,10 @@

@@ -122,6 +138,7 @@
       // Prepare the template

---

From: Magnus Hagander <[email-masked]>
Date: Wed, 26 Mar 2008 22:36:45 +0100

On Sat, 22 Mar 2008 22:52:17 +0100
Guillaume Lelarge <[email-masked]> wrote:

> Alvaro Herrera a écrit :
> > Guillaume Lelarge wrote:
> > 
> >>> I guess I was wrong. You'll find a patch attached that implements
> >>> a func_image function via a call to setCallbackFunction.
> >>>
> > Suggestion: check if the image exists in the translated version,
> > serve the english version if not.  That way you only need to
> > produce alternate images for those that need translation.
> > 
> 

Applied, thanks.

Can you please re-send the patch with the other translation stuff? I've
managed to mess up the different versions of it so I'm no longer sure
I'm working off the correct one :-(

//Magnus

---

From: Guillaume Lelarge <[email-masked]>
Date: Thu, 27 Mar 2008 00:20:14 +0100

>> Damn, forgot about this one. You're right. Patch version 2 attached.

Thanks a lot.

> I'm working off the correct one :-(

Here it is. Thanks for looking at it.

---

From: Magnus Hagander <[email-masked]>
Date: Thu, 27 Mar 2008 11:43:24 +0100

Guillaume Lelarge wrote:
> >>>>> I guess I was wrong. You'll find a patch attached that
> >>>>> implements a func_image function via a call to
> >>>>> setCallbackFunction.
> >>>>>
> > Can you please re-send the patch with the other translation stuff?
> > I've managed to mess up the different versions of it so I'm no
> > longer sure I'm working off the correct one :-(
> > 
> 

This patch no longer applies :-(

The change to pgpage.php was in your other patch.

There's a whole bunch of conflicts in index.html.

Also, the page as generated does not come out as XHTML valid. This is
because you changed it to use ' instead of " for some attributes, and
when there is ' in the text (The world's most advanced...), the HTML is
broken. I'd really like a way to keep the "s on the tags instead of ',
so please see if you can find some way for that :-)

//Magnus

---

From: Guillaume Lelarge <[email-masked]>
Date: Thu, 27 Mar 2008 12:08:09 +0100

> The change to pgpage.php was in your other patch.

Fixed.

> There's a whole bunch of conflicts in index.html.

Fixed.

> so please see if you can find some way for that :-)

I tried but didn't get any interesting results. Will try again, perhaps 
I'll have a better idea this time.

---

From: Magnus Hagander <[email-masked]>
Date: Thu, 27 Mar 2008 13:01:45 +0100

> > There's a whole bunch of conflicts in index.html.

Great.

> > Also, the page as generated does not come out as XHTML valid. This
> > is because you changed it to use ' instead of " for some
> > attributes, and when there is ' in the text (The world's most
> > advanced...), the HTML is broken. I'd really like a way to keep the
> > "s on the tags instead of ', so please see if you can find some way
> > for that :-)
> > 
> 
> I tried but didn't get any interesting results. Will try again,
> perhaps I'll have a better idea this time.

It'd really be better if it could be done. If it's not possible, then
it's not possible, but I just have a feeling there has to be *some* way
to deal with it.

//Magnus

---

From: Guillaume Lelarge <[email-masked]>
Date: Thu, 27 Mar 2008 14:04:02 +0100

> it's not possible, but I just have a feeling there has to be *some* way

I really don't know why I didn't think about this. Anyways, done. See 
attached patch.