NEW FEATURE: added localization support
authorArun Persaud <arun@nubati.net>
Sun, 14 Mar 2010 21:11:52 +0000 (14:11 -0700)
committerArun Persaud <arun@nubati.net>
Sun, 14 Mar 2010 21:33:31 +0000 (14:33 -0700)
using gettext to add support for localization

INSTALL
TRANSLATION [new file with mode: 0644]
include/db.php
include/output.php
include/preferences.php
index.php
locale/de/LC_MESSAGES/edoko.mo [new file with mode: 0644]
po/de.po [new file with mode: 0644]
po/messages.pot [new file with mode: 0644]

diff --git a/INSTALL b/INSTALL
index 0fada71b774e4d81101c8b8e24a2163d05b1758f..1929213241253db014ba7c4b55d6ac0419a74152 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -3,7 +3,7 @@ Installation
 ------------
 
 -1) What you need
-   all you need is PHP and MYSQL
+   all you need is PHP and MYSQL. PHP has to include gettext support.
 
 0) Get files
 
diff --git a/TRANSLATION b/TRANSLATION
new file mode 100644 (file)
index 0000000..38bbaaa
--- /dev/null
@@ -0,0 +1,23 @@
+Translation:
+
+to update the pot file run:
+
+xgettext -L PHP -n --package-name=edoko --msgid-bugs-address=arun@nubati.net *php */*php
+mv messages.po po/messages.pot
+
+
+To start a new translation use something like (here shown to create de.po):
+
+cd po
+msginit -i messages.pot  -o de.po
+
+To update a po file run:
+
+cd po
+msgmerge de.po messages.pot
+
+Start editing and then after updating a po run:
+
+msgconv -t ISO-8859-1 de.po > de.po.new && mv de.po.new de.po
+msgfmt -cv -o de.mo de.po
+mv de.mo ../locale/de/LC_MESSAGES/edoko.mo
\ No newline at end of file
index 2a927f5773019ab99923b1ce57137e953110d6e1..ad6c6f0cfbae967f536e99073f436ef6b9b8d781 100644 (file)
@@ -772,6 +772,7 @@ function DB_get_PREF($myid)
   $PREF['vacation_start']      =  NULL;
   $PREF['vacation_stop']       =  NULL;
   $PREF['vacation_comment']    =  '';
+  $PREF['language']            =  'en';
 
   /* get all preferences */
   $r = DB_query('SELECT pref_key, value FROM User_Prefs'.
@@ -825,8 +826,14 @@ function DB_get_PREF($myid)
          if($pref[1])
            $PREF['vacation_comment'] = $pref[1];
          break;
+
+       case 'language':
+         if($pref[1])
+           $PREF['language'] = $pref[1];
+         break;
        }
     }
+  $_SESSION['language'] =  $PREF['language'];
   return $PREF;
 }
 
index 135fe130d7e9aba56129a1490dd9d044bf89e367..79e42c276f130c879ee10f06deb9af6392b40b09 100644 (file)
@@ -394,7 +394,9 @@ function output_header()
   </head>
 <body onload="high_last();">
 <div class="header">
-<h1> Welcome to E-Doko </h1>
+<?php
+  echo '<h1> '._('Welcome to E-Doko').' </h1>';
+?>
 </div>
 <?php
 
@@ -516,6 +518,26 @@ function output_select_timezone($name,$timezone="")
   return;
 }
 
+function output_select_language($name,$language="")
+{
+  $LOCALE = array ("English"     => "en",
+                  "Deutsch"     => "de" );
+
+  echo "  <select id=\"$name\" name=\"$name\" size=\"1\">\n";
+
+  foreach($LOCALE as $place=>$locale)
+    {
+      if($language==$locale)
+       echo "   <option value=\"$locale\" selected=\"selected\">$place</option>\n";
+      else
+       echo "   <option value=\"$locale\">$place</option>\n";
+    }
+  echo "  </select>\n";
+
+  return;
+}
+
+
 function output_password_recovery($email,$password)
 {
 ?>
index 6648b993458ace924d212f9715e5d452d4a267d4..3904899191ed778840f7a7fde514e76cfcae8601 100644 (file)
@@ -43,6 +43,7 @@ $changed_openforgames = 0;
 $changed_vacation     = 0;
 $changed_openid       = 0;
 $changed_digest       = 0;
+$changed_language     = 0;
 
 display_user_menu($myid);
 
@@ -297,6 +298,25 @@ if(myisset("openid_url") && $_REQUEST['openid_url']!='')
     DB_AttachOpenID($openid_url, $myid);
   }
 
+if(myisset("language"))
+  {
+    $language = $_REQUEST['language'];
+    if($language != $PREF['language'])
+      {
+       /* check if we already have an entry for the user, if so change it, if not create new one */
+       $result = DB_query("SELECT * from User_Prefs".
+                          " WHERE user_id='$myid' AND pref_key='language'" );
+       if( DB_fetch_array($result))
+         $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($language).
+                            " WHERE user_id='$myid' AND pref_key='language'" );
+       else
+         $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','language',".
+                            DB_quote_smart($language).")");
+       $changed_language = 1;
+      }
+  }
+
+
 /* get infos again in case they have changed */
 $PREF     = DB_get_PREF($myid);
 $timezone = DB_get_user_timezone($myid);
@@ -461,7 +481,9 @@ echo "        <tr><td>Timezone:              </td><td>\n";
 output_select_timezone("timezone",$timezone);
 if($changed_timezone) echo "changed";
 echo "</td></tr>\n";
-
+echo "        <tr><td>Language:              </td><td>\n";
+output_select_language("language",$PREF['language']);
+echo "</td></tr>\n";
 echo "        <tr><td>Password(old):         </td><td>",
   "<input type=\"password\" id=\"password0\" name=\"password0\" size=\"20\" maxlength=\"30\" />";
 switch($changed_password)
index 54efdcbf9aef946b72f536a0b39918c8dbc59f84..61b0e3f284aadb42d304c350734cf0ad2c092e24 100644 (file)
--- a/index.php
+++ b/index.php
@@ -51,7 +51,36 @@ if($DBopen<0)
     exit();
   }
 
-/* done major error checking, output5B header of HTML page */
+/* localization */
+/* needs to be in front of output_header, but we don't know the users preferences at this time,
+ * so we go by the session variable or if language is set
+ */
+if(myisset('language') || isset($_SESSION['language']))
+  {
+    $language = 'en';
+    if(isset($_SESSION['language']))
+       $language = $_SESSION['language'];
+    if(myisset('language'))
+      {
+       $language = $_REQUEST['language'];
+       $_SESSION['language'] = $language; /* overrule preferences */
+      }
+    switch($language)
+      {
+      case 'de':
+       putenv("LC_ALL=de_DE");
+       setlocale(LC_ALL, "de_DE");
+       // Specify location of translation tables
+       bindtextdomain("edoko", "./locale");
+       // Choose domain
+       textdomain("edoko");
+       break;
+      default:
+       /* do nothing */
+      }
+  }
+
+/* done major error checking, output header of HTML page */
 output_header();
 
 /* The rest of the file consists of handling user input.
@@ -120,5 +149,3 @@ DB_close();
  *End:
  */
 ?>
-
-
diff --git a/locale/de/LC_MESSAGES/edoko.mo b/locale/de/LC_MESSAGES/edoko.mo
new file mode 100644 (file)
index 0000000..e72f5ab
Binary files /dev/null and b/locale/de/LC_MESSAGES/edoko.mo differ
diff --git a/po/de.po b/po/de.po
new file mode 100644 (file)
index 0000000..9d27938
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,21 @@
+# English translations for PACKAGE package.
+# Copyright (C) 2010 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Arun Persaud <arun@nubati.net>, 2010.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: edoko\n"
+"Report-Msgid-Bugs-To: arun@nubati.net\n"
+"POT-Creation-Date: 2010-03-14 11:35-0700\n"
+"PO-Revision-Date: 2010-03-14 12:01-0700\n"
+"Last-Translator: Arun Persaud <arun@nubati.net>\n"
+"Language-Team: English\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: include/output.php:398
+msgid "Welcome to E-Doko"
+msgstr "Willkommen bei E-Doko"
diff --git a/po/messages.pot b/po/messages.pot
new file mode 100644 (file)
index 0000000..08d1463
--- /dev/null
@@ -0,0 +1,21 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: edoko\n"
+"Report-Msgid-Bugs-To: arun@nubati.net\n"
+"POT-Creation-Date: 2010-03-14 11:35-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: include/output.php:398
+msgid "Welcome to E-Doko"
+msgstr ""