[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r635 - doodle-docs/WWW
From: |
grothoff |
Subject: |
[GNUnet-SVN] r635 - doodle-docs/WWW |
Date: |
Sun, 10 Apr 2005 23:02:30 -0700 (PDT) |
Author: grothoff
Date: 2005-04-10 23:02:26 -0700 (Sun, 10 Apr 2005)
New Revision: 635
Modified:
doodle-docs/WWW/commitMassTranslation.php
doodle-docs/WWW/commitTranslation.php
doodle-docs/WWW/editor.php
doodle-docs/WWW/i18nhtml.inc
doodle-docs/WWW/translate.php
doodle-docs/WWW/vote.php
Log:
testing new i18nHTML
Modified: doodle-docs/WWW/commitMassTranslation.php
===================================================================
--- doodle-docs/WWW/commitMassTranslation.php 2005-04-10 17:54:37 UTC (rev
634)
+++ doodle-docs/WWW/commitMassTranslation.php 2005-04-11 06:02:26 UTC (rev
635)
@@ -26,6 +26,7 @@
W("Translating to English currently not allowed.\n");
die();
}
+DOCTYPE("HTML", "Transitional");
echo "<html><head>";
TITLE("WWW translation: commit");
echo "</head><body>";
@@ -37,6 +38,7 @@
continue;
if ( ($dec == "xlang") || ($dec == "start") )
continue;
+ $val = fix($val);
$query = "SELECT c FROM pending WHERE lang=\"$xlang\"";
$result = mysql_query($query, $connection);
$num = 0;
@@ -45,8 +47,10 @@
while ($num > 0) {
$num--;
$row = mysql_fetch_array($result);
- if ($dec == bin2hex(md5(urldecode($row["c"])))) {
- $enc = mysql_real_escape_string($row["c"]);
+ $cx_plain = fix($row["c"]);
+ $cx_sql = mysql_real_escape_string($cx_plain);
+ if ($dec == bin2hex(md5($cx_plain))) {
+ $enc_sql = $cx_sql;
break;
}
}
@@ -56,30 +60,32 @@
P();
continue;
}
- $query = "DELETE FROM pending WHERE lang=\"$lang\" AND c=\"$enc\"";
+ $query = "DELETE FROM pending WHERE lang=\"$lang\" AND c=\"$enc_sql\"";
mysql_query($query, $connection);
- $t = mysql_real_escape_string(to_unicode($val));
- $query = "SELECT ranking FROM map WHERE name=\"$enc\" AND lang=\"$lang\" AND
translation=\"$t\"";
+ $val_sql = mysql_real_escape_string(to_unicode($val));
+ $query = "SELECT ranking FROM map WHERE name=\"$enc_sql\"" .
+ " AND lang=\"$lang\" AND translation=\"$val_sql\"";
$result = mysql_query($query, $connection);
$num = 0;
if ($result)
$num = mysql_numrows($result);
if ($num == 0) {
- $txtCnt = count_chars(urldecode($enc), 1);
- $tCnt = count_chars($t, 1);
+ $txtCnt = count_chars(stripslashes($enc_sql), 1);
+ $tCnt = count_chars(stripslashes($val_sql), 1);
if ($txtCnt[ord('%')] != $tCnt[ord('%')]) {
- W("Commit '%s->%s' failed.", $enc, $t);
+ W("Commit '%s->%s' failed.", stripslashes($enc_sql),
stripslashes($val_sql));
W("The number of percent signs in source text and translation do not
match.");
W("Note that you must preserve all %%s expressions unchanged.");
W("Also, a single displayed %% sign must be translated into two (%%%%)
such signs.");
P();
} else {
- $query = "INSERT INTO map VALUES(\"$enc\", \"$lang\", \"$t\", 1, \"" .
$_SERVER['REMOTE_ADDR'] . "\");";
+ $query = "INSERT INTO map VALUES(\"$enc_sql\", \"$lang\", " .
+ "\"$val_sql\", 1, \"" . $_SERVER['REMOTE_ADDR'] . "\");";
mysql_query($query, $connection);
$done++;
W("Storing translation for "%s" = "%s".",
- ARRAY(urldecode($enc),
- urldecode($t)));
+ ARRAY(stripslashes($enc_sql),
+ stripslashes($val_sql)));
BR();
}
}
Modified: doodle-docs/WWW/commitTranslation.php
===================================================================
--- doodle-docs/WWW/commitTranslation.php 2005-04-10 17:54:37 UTC (rev
634)
+++ doodle-docs/WWW/commitTranslation.php 2005-04-11 06:02:26 UTC (rev
635)
@@ -18,9 +18,6 @@
Boston, MA 02111-1307, USA.
*/
include("i18nhtml.inc");
-$text = mysql_real_escape_string($_REQUEST['text']);
-$translation = $_REQUEST['translation'];
-$back = $_REQUEST['back'];
if (!$connection) {
echo "Database is down. Cannot edit translations.";
die();
@@ -29,39 +26,47 @@
W("Translating to English is not allowed.\n");
die();
}
+$text = urldecode($_REQUEST['text']);
+$text_sql = mysql_real_escape_string($text);
+$translation = fix($_REQUEST['translation']);
+$translation_sql = mysql_real_escape_string(to_unicode($translation));
-$t = mysql_real_escape_string(to_unicode($translation));
+$back = $_REQUEST['back'];
// check for identical translation
-$query = "SELECT ranking FROM map WHERE name=\"$text\" AND lang=\"$lang\" AND
translation=\"$t\"";
+$query = "SELECT ranking FROM map WHERE name=\"$text_sql\"" .
+ " AND lang=\"$lang\" AND translation=\"$translation_sql\"";
$result = mysql_query($query, $connection);
$num = 0;
-if ($result) {
+if ($result)
$num = mysql_numrows($result);
-}
if ($num > 0) {
echo "<html><head>";
TITLE("Translation exists.");
echo "</head><body>";
- W("Translation exists.");
+ W("Translation '%s' of sentence '%s' exists.",
+ fix($translation), $text);
extlink($back, "Back...");
generateFooter();
echo "</body></html>";
} else {
- $txtCnt = count_chars(urldecode($text), 1);
- $tCnt = count_chars($t, 1);
+ $txtCnt = count_chars($text, 1);
+ $tCnt = count_chars($translation, 1);
if ($txtCnt[ord('%')] != $tCnt[ord('%')]) {
echo "<html><head>";
TITLE("Commit failed.");
echo "</head><body>";
- W("Commit failed.");
- W("The number of percent signs in source text and translation do not
match.");
+ W("Commit failed ('%s' and '%s').", ARRAY($text, $translation));
+ W("The number of percent signs in source text and translation does not
match.");
W("Note that you must preserve all %%s expressions unchanged.");
W("Also, a single displayed %% sign must be translated into two (%%%%)
such signs.");
echo "</body></html>";
} else {
- $query = "INSERT INTO map VALUES(\"$text\", \"$lang\", \"$t\", 1, \"" .
$_SERVER['REMOTE_ADDR'] . "\");";
+ $query = "INSERT INTO map VALUES(\"$text_sql\", \"$lang\", " .
+ "\"$translation_sql\", 1, \"" . $_SERVER['REMOTE_ADDR'] . "\");";
$result = mysql_query($query, $connection);
if ($result) {
+ $query = "DELETE FROM pending WHERE lang=\"$lang\" AND c=\"$text_sql\"";
+ mysql_query($query, $connection);
header("Location: " . $back); /* Redirect browser */
} else {
echo "<html><head>";
Modified: doodle-docs/WWW/editor.php
===================================================================
--- doodle-docs/WWW/editor.php 2005-04-10 17:54:37 UTC (rev 634)
+++ doodle-docs/WWW/editor.php 2005-04-11 06:02:26 UTC (rev 635)
@@ -22,6 +22,7 @@
echo "Database is down. Cannot edit translations.";
die();
}
+DOCTYPE("HTML", "Transitional");
echo "<html><head>";
TITLE("WWW translation");
echo "</head><body>";
@@ -51,12 +52,12 @@
$start = $end - $max;
if ($start < 0)
$start = 0;
- }
+}
if ($num == 0) {
P();
W("No missing translations for the selected target language were found.");
- } else {
+} else {
P();
W("%s translations to %s have been requested and were not available.",
ARRAY($num,
@@ -71,45 +72,39 @@
echo "<input type=hidden name=\"start\" value=\"$endp\">";
echo "<table border=5>";
- echo "<tr><th>";
- W("Original");
- echo "</th><th>";
- W("Translation");
- echo "</th></tr>";
+ echo "<tr>";
+ TH("Original");
+ TH("Translation");
+ echo "</tr>";
for ($ii=0;$ii<$end;$ii++) {
$row = mysql_fetch_array($result);
if ($ii < $start)
continue;
- $cx = $row["c"];
+ $cx_plain = fix($row["c"]);
+ $cx_sql = mysql_real_escape_string($cx_sql);
- $query = "SELECT ranking FROM map WHERE name=\"$cx\" AND lang=\"$lang\"";
+ $query = "SELECT ranking FROM map WHERE name=\"$cx_sql\" AND
lang=\"$lang\"";
$result2 = mysql_query($query, $connection);
$num2 = 0;
if ($result2)
$num2 = mysql_numrows($result2);
+ echo "<tr><td width=\"45%\">";
+ echo ""$cx_plain"";
+ echo "</td>\n\t<td width\"50\%\">";
if ($num2 > 0) {
- $query = "DELETE FROM pending WHERE lang=\"$lang\" AND c=\"$cx\"";
- mysql_query($query, $connection);
-
- echo "<tr><td width=\"45%\">";
- $dec = urldecode($cx);
- echo """ . $dec . """;
- echo "</td>\n\t<td width\"50\%\">";
+ $query = "DELETE FROM pending WHERE lang=\"$lang\" AND c=\"$cx_sql\"";
+ mysql_query($query, $connection);
W("Skipped (already translated).");
+ } else {
+ echo "<input size=\"40\" maxlength=\"65535\" name=\"" .
bin2hex(md5($cx_plain)) . "\"></td></tr>\n";
}
- else {
- echo "<tr><td width=\"45%\">";
- $dec = urldecode($cx);
- echo """ . $dec . """;
- echo "</td>\n\t<td width\"50\%\">";
- echo "<input size=\"40\" maxlength=\"65535\" name=\"" .
bin2hex(md5($dec)) . "\"></td></tr>\n";
- }
}
echo "</tr></table>";
- echo "<input type=submit value=\"I hereby give all these translations into
the Public Domain (commit)\">";
+ echo "<input type=submit value=\"" .
+ TRANSLATE_("I hereby give all these translations into the Public Domain
(commit)") .
+ "\">";
echo "</form>";
-
- }
+}
if ($end < $num) {
P();
echo "<a href=\"" . $i18nHTMLbase . "editor.php?xlang=" . $lang . "&start="
. ($end + 1) . "\">";
@@ -117,10 +112,10 @@
echo "</a>";
if ($t == 1)
translateLink($b);
- } else {
+} else {
W("Statistics about translation progress can be found %s.\n",
intlink_($i18nHTMLbase . "status.php", "here"));
- }
+}
P();
H2("Remarks");
H3("The percent sign");
Modified: doodle-docs/WWW/i18nhtml.inc
===================================================================
--- doodle-docs/WWW/i18nhtml.inc 2005-04-10 17:54:37 UTC (rev 634)
+++ doodle-docs/WWW/i18nhtml.inc 2005-04-11 06:02:26 UTC (rev 635)
@@ -17,7 +17,6 @@
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
-
// This file defines the functions that will be used
// to build the webpage. The set may not contain everything
// you might want, so feel free to define your own extensions.
@@ -35,13 +34,13 @@
// Most of the code should be straight forward. Look
// at some of the example files that use it and compare with
// the generated pages.
-
-
// obtain user db specific configuration parameters
include("i18nhtml_config.inc");
-
header("Content-type: text/html; charset=utf-8");
+if (get_magic_quotes_gpc())
+ die('PHP misconfigured. Disable get_magic_quotes.');
+
// establish default connection to database server
$connection = @mysql_connect($i18nHTMLsqlServer,
$i18nHTMLsqlUser,
@@ -57,24 +56,24 @@
if (!$db_selected) {
die ('Error selecting db : ' . mysql_error());
}
- }
+}
// ensure the mapping and pending tables exist, creating them if not
$query="CREATE TABLE IF NOT EXISTS map" .
" (name BLOB, lang TINYBLOB, translation BLOB, ranking INT, ip
TINYTEXT, " .
"INDEX(name(10)), INDEX(lang(4)), INDEX(ranking),
INDEX(translation(10)))";
$result = mysql_query($query, $connection);
-//if (!$result) {
-// die('Unable to validate mapping table. Invalid query: ' . mysql_error());
-//}
+if (($i18nHTMLdebug == 1) && (!$result)) {
+ die('Unable to validate map table. Invalid query: ' . mysql_error());
+}
$query="CREATE TABLE IF NOT EXISTS pending" .
" (c BLOB, lang TINYBLOB, count INT, " .
"INDEX(c(10)), INDEX(lang(4)), INDEX(count))";
$result = mysql_query($query, $connection);
-//if (!$result) {
-// die('Unable to validate pending table. Invalid query: ' . mysql_error());
-//}
+if (($i18nHTMLdebug == 1) && (!$result)) {
+ die('Unable to validate pending table. Invalid query: ' . mysql_error());
+}
/* mapping of real-names to language codes */
$languagecodes = array("English"=>"en",
@@ -102,7 +101,7 @@
"Swedish"=>"sv");
/* try to automagically figure out user preferences */
-$hlang=$_SERVER["HTTP_ACCEPT_LANGUAGE"];
+$hlang = $_SERVER["HTTP_ACCEPT_LANGUAGE"];
if ($hlang) {
$tok = strtok($hlang, ";");
while ($tok) {
@@ -114,7 +113,7 @@
}
$tok = strtok(";");
}
- }
+}
// If no language is specified, use english.
if ( (! $lang) || ($lang=="") )
$lang = "English";
@@ -124,21 +123,23 @@
$lang = ucfirst(strtolower($lang));
$lang = mysql_real_escape_string($lang);
$editor = $_REQUEST['editor'];
+$i18nHTMLhasTranslation = 0; // set by last call to translation_query()
-
-$htmlin = array("’", ">", """, "′", "&");
-$htmlout = array("’" , ">", """ , "′" , "&");
-
/**
* Replace certain HTML named special characters with their
* numeric codes (some browsers don't work with the symbolic names).
*/
+$htmlin = array("’", ">", """, "′", "&", "\"",
"'", "`", "‘");
+$htmlout = array("’", ">", """ , "′", "&", """,
"′", "’", "‘");
function fix($a) {
global $htmlin;
global $htmlout;
return str_replace($htmlin, $htmlout, $a);
}
+// *************************************************
+// i18nHTML configuration API functions
+// *************************************************
// change the marker text shown to indicate text
// is translatable (link to translate page text)
@@ -151,46 +152,18 @@
$i18nHTMLmarker = $marker;
}
+// ***************************************************
+// i18nHTML _internal_ API functions (don't look here)
+// ***************************************************
-// editor = ? ; // set by URL parameter, indicates in translation
mode
-$i18nHTMLhasTranslation = 0; // set by last call to isTranslated() or
translation_query()
-$i18nHTMLallowedits = 1;
-
-// indicate translate link should only be shown for untranslated items.
-function editOnlyUntranslatedText() {
- global $i18nHTMLallowedits;
- $i18nHTMLallowedits = 0;
-}
-
-// indicate translate link should always be shown (or set to indicated value).
-function editAllTranslations($v=null) {
- global $i18nHTMLallowedits;
- if ($v == "")
- $i18nHTMLallowedits = 1;
- else
- $i18nHTMLallowedits = $v;
-}
-
-
-// displays a link to the page to enable one to
-// translate the given text ($a)
-// see translateLink_
-function translateLink($a, $hasTranslation=null) {
- echo translateLink_($a, $hasTranslation);
-}
-
-// returns a HTML string to link to enable one to
-// translate the given text ($a) when
-// $editor has a nonzero value and either
-// $hasTranslation is 0 or $allowedits is nonzero;
-// otherwise and empty string ("") is returned.
-// $hasTranslation may be omitted to use result of
-// last isTranslated() or translation_query() call;
-function translateLink_($a, $hasTranslation=null) {
+// returns a HTML string to link to enable one to translate the given
+// text ($a) when $editor has a nonzero value or
+// $i18nHTMLhasTranslation is 0; otherwise and empty string ("") is
+// returned.
+function translateLink_($a) {
global $lang;
global $HTTP_SERVER_VARS;
global $editor;
- global $i18nHTMLallowedits;
global $i18nHTMLhasTranslation;
global $i18nHTMLmarker;
global $i18nHTMLbase;
@@ -201,112 +174,21 @@
$back = "http://" . $HTTP_SERVER_VARS["HTTP_HOST"] .
$HTTP_SERVER_VARS["REQUEST_URI"];
return "<a href=\"" . $i18nHTMLbase . "translate.php?xlang="
. $lang
- . "&text=" . urlencode($a)
+ . "&text=" . urlencode(fix($a))
. "&back=" . urlencode($back)
. "\">" . $i18nHTMLmarker . "</a>\n";
} else
return "";
}
-// return 1 if translation is available (or DB down)
-// assumes passed the original text as appears in source
-function isTranslated($a, $charset=null) {
- global $connection;
- global $lang;
- global $editor;
- global $i18nHTMLhasTranslation;
-
- $i18nHTMLhasTranslation = 1; // assume translation until failure
-
- if ( ("English" == $lang) || (!$connection) ) {
- // Either hard-wired source language (so available) or
- // database not available.
- return 1;
- }
-
- // $a = htmlentities($a, ENT_QUOTES, $charset);
- $u = urlencode($a);
-
- $query = "SELECT translation FROM map WHERE name=\"$u\" AND lang=\"$lang\"
ORDER BY ranking DESC";
- $result = mysql_query($query, $connection);
- if (!$result) {
- if ($i18nHTMLdebug != 0)
- echo 'Unable to execute query $query: ' . mysql_error();
- }
-
- $num = 0;
- if ($result)
- $num = mysql_numrows($result);
- if ($num > 0)
- return 1;
- else {
- $i18nHTMLhasTranslation = 0; // no translation was found
- return 0;
- }
+// displays a link to the page to enable one to
+// translate the given text ($a)
+// see translateLink_
+function translateLink($a) {
+ echo translateLink_($a);
}
-
/**
- * restore UTF-8 from HTML Unicode entities
- *
- * This function is triggered by the YACS handler during page
- * rendering. It is aiming to transcode HTML Unicode entities
- * (eg, &#8364;) back to actual UTF-8 encoding (eg, �).
- *
- * @param string a string with a mix of UTF-8 and of HTML Unicode entities
- * @return an UTF-8 string
- */
-function from_unicode($text) {
- // translate extended ISO8859-1 chars, if any
- $text = utf8_encode($text);
-
- // translate Unicode entities
- $areas = preg_split('/&#(\d+?);/', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
- $text = '';
- $index = 0;
- foreach($areas as $area) {
- switch($index%2) {
- case 0: // before entity
- $text .= $area;
- break;
- case 1: // the entity itself
-
- // get the integer value
- $unicode = intval($area);
-
- // one byte
- if($unicode < 0x80) {
-
- $text .= chr($unicode);
-
- // two bytes
- } elseif($unicode < 0x800) {
-
- $text .= chr( 0xC0 + ( ( $unicode - ( $unicode % 0x40 ) ) / 0x40 ) );
- $text .= chr( 0x80 + ( $unicode % 0x40 ) );
-
- // three bytes
- } elseif($unicode < 0x10000) {
-
- $text .= chr( 0xE0 + ( ( $unicode - ( $unicode % 0x1000 ) ) / 0x1000 )
);
- $text .= chr( 0x80 + ( ( ( $unicode % 0x1000 ) - ( $unicode % 0x40 ) )
/ 0x40 ) );
- $text .= chr( 0x80 + ( $unicode % 0x40 ) );
-
- // more bytes, keep it as it is...
- } else
- $text .= '&#'.$unicode.';';
-
- break;
- }
- $index++;
- }
-
- // the updated string
- return $text;
-}
-
-
-/**
* transcode unicode entities to/from HTML entities
*
* Also, this function transforms HTML entities into their equivalent Unicode
entities.
@@ -319,8 +201,7 @@
* @param boolean TRUE to transcode to Unicode, FALSE to transcode to HTML
* @return a transcoded string
*/
-function transcode($input, $to_unicode=TRUE) {
-
+function transcode($input, $to_unicode=TRUE) {
// initialize tables only once
static $html_entities, $unicode_entities;
if(!is_array($html_entities)) {
@@ -583,8 +464,7 @@
$unicode_entities[] = $unicode_entity;
$html_entities[] = $html_entity;
}
- }
-
+ }
// transcode HTML entities to Unicode
if($to_unicode)
return str_replace($html_entities, $unicode_entities, $input);
@@ -594,9 +474,6 @@
return str_replace($unicode_entities, $html_entities, $input);
}
-
-
-
/**
* transcode multi-byte characters to HTML representations for Unicode
*
@@ -618,119 +495,79 @@
* @param string the original UTF-8 string
* @return a string acceptable in an ISO-8859-1 storage system (ie., PHP4 +
MySQl 3)
*/
-function to_unicode($input) {
-
+function to_unicode($input) {
// transcode HTML entities to Unicode entities
- $input = transcode($input);
-
+ $input = transcode($input);
// scan the whole string
$output = '';
$index = 0;
- while($index < strlen($input)) {
-
+ while($index < strlen($input)) {
// look at one char
- $char = ord($input[$index]);
-
+ $char = ord($input[$index]);
// one byte (0xxxxxxx)
- if($char < 0x80) {
-
+ if ($char < 0x80) {
// some chars may be undefined
$output .= chr($char);
- $index += 1;
-
+ $index += 1;
// two bytes (110xxxxx 10xxxxxx)
- } elseif($char < 0xE0) {
-
+ } else if ($char < 0xE0) {
// strip weird sequences (eg, C0 80 -> NUL)
if($value = (($char % 0x20) * 0x40) + (ord($input[$index + 1]) % 0x40))
$output .= '&#' . $value . ';';
- $index += 2;
-
+ $index += 2;
// three bytes (1110xxxx 10xxxxxx 10xxxxxx) example: euro sign =
\xE2\x82\xAC -> €
- } elseif($char < 0xF0) {
-
+ } else if ($char < 0xF0) {
// strip weird sequences
if($value = (($char % 0x10) * 0x1000) + ((ord($input[$index + 1]) %
0x40) * 0x40) + (ord($input[$index + 2]) % 0x40))
$output .= '&#' . $value . ';';
- $index += 3;
-
+ $index += 3;
// four bytes (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx)
- } elseif($char < 0xF8) {
-
+ } else if($char < 0xF8) {
// strip weird sequences
- if($value = (($char % 0x08) * 0x40000) + ((ord($input[$index + 1]) %
0x40) * 0x1000) + ((ord($input[$index + 2]) % 0x40) * 0x40)
+ if ($value = (($char % 0x08) * 0x40000) + ((ord($input[$index + 1]) %
0x40) * 0x1000) + ((ord($input[$index + 2]) % 0x40) * 0x40)
+ (ord($input[$index + 3]) % 0x40))
$output .= '&#' . $value . ';';
- $index += 4;
-
+ $index += 4;
// five bytes (111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx)
- } elseif($char < 0xFC) {
-
+ } else if($char < 0xFC) {
// strip weird sequences
- if($value = (($char % 0x04) * 0x1000000) + ((ord($input[$index + 1]) %
0x40) * 0x40000) + ((ord($input[$index + 2]) % 0x40) * 0x1000)
+ if ($value = (($char % 0x04) * 0x1000000) + ((ord($input[$index + 1]) %
0x40) * 0x40000) + ((ord($input[$index + 2]) % 0x40) * 0x1000)
+ ((ord($input[$index + 3]) % 0x40) * 0x40) + (ord($input[$index + 4])
% 0x40))
$output .= '&#' . $value . ';';
- $index += 5;
-
+ $index += 5;
// six bytes (1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx)
- } else {
-
+ } else {
// strip weird sequences
- if($value = (($char % 0x02) * 0x40000000) + ((ord($input[$index + 1]) %
0x40) * 0x1000000) + ((ord($input[$index + 2]) % 0x40) * 0x40000)
+ if ($value = (($char % 0x02) * 0x40000000) + ((ord($input[$index + 1]) %
0x40) * 0x1000000) + ((ord($input[$index + 2]) % 0x40) * 0x40000)
+ ((ord($input[$index + 3]) % 0x40) * 0x1000) + ((ord($input[$index +
4]) % 0x40) * 0x40) + (ord($input[$index + 4]) % 0x40))
$output .= '&#' . $value . ';';
$index += 6;
- }
-
- }
-
+ }
+ }
// return the translated string
return $output;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// returns either the translated string
-// or the original string. Assumes we
-// are passed the original string as occurs
-// in text; result will be html tokenized by
-// htmlentities() using default charset or
-// one indicated by $charset, to ensure all
-// required entities are converted for valid html output.
-// Note: it is assumed value in DB have already
-// ran through equivalent of htmlentities().
-// $i18nHTMLhasTranslation is set to nonzero value
-// if a translation is available or failure connecting
-// to database, otherwise it is set to 0.
-function translation_query($a, $charset=null) {
+// returns either the translated string or the original string.
+// Assumes we are passed the original string as occurs in text; result
+// will be html tokenized by htmlentities() using UTF8.
+// $i18nHTMLhasTranslation is set to nonzero value if a translation is
+// available or failure connecting to database, otherwise it is set to
+// 0.
+function translation_query($a) {
global $connection;
global $lang;
global $i18nHTMLrecordMode;
global $i18nHTMLhasTranslation;
$i18nHTMLhasTranslation = 1; // assume translation until failure
-
if ($a == "")
return $a;
-
- $u = mysql_real_escape_string(urlencode($a));
-
+ $a = fix($a);
+ $a_sql = mysql_real_escape_string($a);
if (!$connection) {
// database not available, just print English
- return fix($a);
+ return $a;
}
if ("English" == $lang) {
// no need to translate english, that's the
@@ -738,20 +575,20 @@
if ($i18nHTMLrecordMode == 2) {
// if not already in pending table (and recordMode set to allow us)
// then insert this string into it
- $query = "SELECT count FROM pending WHERE c=\"$u\" AND lang=\"$lang\"";
+ $query = "SELECT count FROM pending WHERE c=\"$a_sql\" AND
lang=\"$lang\"";
$result = mysql_query($query, $connection);
$num = 0;
if ($result)
$num = mysql_num_rows($result);
if (0 == $num) {
- $query = "INSERT INTO pending VALUES(\"$u\", \"$lang\", 0)";
+ $query = "INSERT INTO pending VALUES(\"$a_sql\", \"$lang\", 0)";
mysql_query($query, $connection);
}
}
- return fix($a);
+ return $a;
}
// attempt to get translations, ranked for best
- $query = "SELECT translation FROM map WHERE name=\"$u\" AND lang=\"$lang\"
ORDER BY ranking DESC";
+ $query = "SELECT translation FROM map WHERE name=\"$a_sql\" AND
lang=\"$lang\" ORDER BY ranking DESC";
$result = mysql_query($query, $connection);
$num = 0;
if ($result)
@@ -761,7 +598,7 @@
// either insert untranslated item into pending table or update
// referenced count; count is used to display more used strings
// during mass translation before less common ones.
- $query = "SELECT count FROM pending WHERE c=\"$u\" AND lang=\"$lang\"";
+ $query = "SELECT count FROM pending WHERE c=\"$a_sql\" AND
lang=\"$lang\"";
$result = mysql_query($query, $connection);
$num = 0;
if ($result)
@@ -770,20 +607,24 @@
if ($num > 0) {
$row = mysql_fetch_array($result);
$count = $row["count"] + 1;
- $query = "UPDATE pending SET count=$count WHERE c=\"$u\" AND
lang=\"$lang\"";
+ $query = "UPDATE pending SET count=$count WHERE c=\"$a_sql\" AND
lang=\"$lang\"";
} else {
- $query = "INSERT INTO pending VALUES(\"$u\", \"$lang\", 1)";
+ $query = "INSERT INTO pending VALUES(\"$a_sql\", \"$lang\", 1)";
}
mysql_query($query, $connection);
}
$i18nHTMLhasTranslation = 0; // no translation was found
- return fix($a); // just return English string
+ return $a; // just return English string
} else { // translation available
$row = mysql_fetch_array($result);
return $row["translation"];
}
}
+// *************************************************
+// Fundamental i18nHTML API functions
+// *************************************************
+
// translate the sentence $a and return the result.
function TRANSLATE_($a,$args=null) {
if ($a == "")
@@ -791,6 +632,12 @@
return vsprintf(translation_query($a), $args);
}
+// translate the sentence $a and output just
+// the translated text (without link to translate.php)
+function TRANSLATE($a,$args=null) {
+ echo TRANSLATE_($a);
+}
+
// translate the sentence $a adding a link
// to enable editing translations and return the result.
function W_($a,$args=null) {
@@ -799,81 +646,16 @@
return TRANSLATE_($a,$args) . translateLink_($a);
}
-// translate the sentence $a and output just
-// the translated text
-function TRANSLATE($a,$args=null) {
- echo TRANSLATE_($a);
-}
-
// translate the sentence $a appending a link
// to enable edit the translation and output the
-// result. Returns 1 if a translation is needed.
+// result.
function W($a, $args=NULL) {
- global $i18nHTMLhasTranslation;
-
- if ($a == "")
- return 0;
- echo W_($a, $args) . "\n";
- return $i18nHTMLhasTranslation;
+ if ($a != "")
+ echo W_($a, $args) . "\n";
}
-function LI($a,$b="") {
- echo "<li>" . W_($a,$b) . "</li>\n";
-}
-
-function TITLE($a,$b="") {
- global $lang;
- global $languagecodes;
- echo "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"
>";
- echo "<title>" . TRANSLATE_($a,$b) . "</title>\n";
- if (isset($languagecodes[$lang])) {
- echo "<meta name=\"content-language\" content=\"" .
- $languagecodes[$lang] . "\">";
- echo "<meta name=\"language\" content=\"" .
- $languagecodes[$lang] . "\">";
- }
-}
-
-
-function DT($a,$b="") {
- echo "<dt>" . W_($a,$b) . "</dt>\n";
-}
-function DD($a,$b="") {
- echo "<dd>" . W_($a,$b) . "</dd>\n";
-}
-function H1($a,$b="") {
- echo "<h1>" . W_($a,$b) . "</h1>\n";
-}
-function H2($a,$b="") {
- echo "<h2>" . W_($a,$b) . "</h2>\n";
-}
-function H3($a,$b="") {
- echo "<h3>" . W_($a,$b) . "</h3>\n";
-}
-function H4($a,$b="") {
- echo "<h4>" . W_($a,$b) . "</h4>\n";
-}
-function H5($a,$b="") {
- echo "<h5>" . W_($a,$b) . "</h5>\n";
-}
-// 'verbatim' (untranslated) "pre"
-function PRE($a) {
- echo "<pre>" . $a . "</pre>";
-}
-// 'verbatim' (untranslated) "li"
-function LIV($a) {
- echo "<li>" . $a . "</li>\n";
-}
-
-
// create internationalized, internal link to
// $a.php with description $b
-function intlink($a, $b) {
- echo intlink_($a, $b);
-}
-
-// create internationalized, internal link to
-// $a.php with description $b
function intlink_($a, $b) {
global $lang;
@@ -882,10 +664,10 @@
return $ret;
}
-// create internationalized, external link to
-// $a with description $b
-function extlink($a, $b) {
- echo extlink_($a, $b);
+// create internationalized, internal link to
+// $a.php with description $b
+function intlink($a, $b) {
+ echo intlink_($a, $b);
}
// create internationalized, external link to
@@ -895,46 +677,17 @@
return $ret;
}
-function P($attr="") {
- echo "<p $attr>\n";
+// create internationalized, external link to
+// $a with description $b
+function extlink($a, $b) {
+ echo extlink_($a, $b);
}
-function BR() {
- echo "<br />\n";
-}
-function HR() {
- echo "<hr>\n";
-}
-function DTDD($a,$b) {
- DT($a);
- DD($b);
-}
-function LILI($a,$b) {
- echo "<li>" . extlink_($a,$b) . "</li>\n";
-}
-function IMG($src, $alt, $align="CENTER", $width, $height, $border=0,
$hspace=0, $vspace=0) {
- echo IMG_($src, $alt, $align, $width, $height, $border, $hspace, $vspace);
-}
+// *************************************************
+// global, call-once helper functions
+// *************************************************
-function IMG_($src, $alt, $align="CENTER", $width, $height, $border=0,
$hspace=0, $vspace=0) {
- $ret = "";
-
- if ($align == "CENTER")
- $ret = $ret . "<p><center>\n";
- $ret = $ret . "<img src=\"" . $src . "\" alt=\"";
- $ret = $ret . TRANSLATE_($alt);
- $ret = $ret . "\" align=\"" . $align . "\" width=$width height=$height
border=$border hspace=$hspace vspace=$vspace>\n";
- $ret = $ret . translateLink_($alt);
- if ($align == "CENTER")
- $ret = $ret . "</center><p>\n";
- return $ret;
-}
-
-function ANCHOR($a) {
- echo "<a name=\"$a\"></a>\n";
-}
-
// outputs appropriate DOCTYPE declaration for the document
// this should be the 1st line in your php file after including
// i18nhtml.inc. Valid types are: HTML for HTML 4 documents,
@@ -944,62 +697,68 @@
// "Strict", or "Frameset", defaulting to "Transitional".
// Note for XHTML1.1 $mode is ignored.
// example:
-// -?php
-// include("../src/i18nhtml.inc");
+// include("i18nhtml.inc");
// DOCTYPE("XHTML1");
-// echo "<head><title>Blah</title><body>Blah...</body></html>";
-// ?-
function DOCTYPE($type=null, $mode=null) {
// depending on $mode, use appropriate dtd
if ($mode == "Strict") {
$dtd = "strict";
if ($type != "XHTML1") // Strict not specified except for XHTML1.0
$mode = "";
- }
- elseif ($mode == "Frameset") {
+ } else if ($mode == "Frameset") {
$dtd = "frameset";
- }
- else { // $mode == Transitional, default, or unknown
+ } else { // $mode == Transitional, default, or unknown
$dtd = "loose";
$mode = "Transitional";
}
-
if ($type == "XHTML1")
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 " . $mode . "//EN\"
\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-" . $dtd . ".dtd\">\n";
- elseif ($type == "XHTML1.1")
+ else if ($type == "XHTML1.1")
echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"
\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n";
else
echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 " . $mode . "//EN\"
\"http://www.w3.org/TR/html4/" . $dtd . ".dtd\">\n";
}
+function TITLE($a,$b="") {
+ global $lang;
+ global $languagecodes;
+ echo "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"
>";
+ echo "<title>" . TRANSLATE_($a,$b) . "</title>\n";
+ if (isset($languagecodes[$lang])) {
+ echo "<meta name=\"content-language\" content=\"" .
+ $languagecodes[$lang] . "\">";
+ echo "<meta name=\"language\" content=\"" .
+ $languagecodes[$lang] . "\">";
+ }
+}
// displays a list of all languages currently available with
// at least 1 translated string.
function generateLanguageBar() {
global $connection;
-if ($connection) {
- echo "<center>[";
- $query = "SELECT DISTINCT lang FROM map ORDER BY lang";
- $result = mysql_query($query, $connection);
- $num = 0;
- if ($result)
- $num = mysql_numrows($result);
- echo "<a href=\"?xlang=English\">";
- W("English");
- echo "</a>";
- $last = "English";
- for ($i=0;$i<$num;$i++) {
- $row = mysql_fetch_array($result);
- $next = $row["lang"];
- if ($next == $last)
- continue;
- echo " | ";
- echo "<a href=\"?xlang=$next\">" . W_($next) . "</a>";
- $last = $next;
+ if ($connection) {
+ echo "<center>[";
+ $query = "SELECT DISTINCT lang FROM map ORDER BY lang";
+ $result = mysql_query($query, $connection);
+ $num = 0;
+ if ($result)
+ $num = mysql_numrows($result);
+ echo "<a href=\"?xlang=English\">";
+ W("English");
+ echo "</a>";
+ $last = "English";
+ for ($i=0;$i<$num;$i++) {
+ $row = mysql_fetch_array($result);
+ $next = $row["lang"];
+ if ($next == $last)
+ continue;
+ echo " | ";
+ echo "<a href=\"?xlang=$next\">" . W_($next) . "</a>";
+ $last = $next;
+ }
+ echo "]</center>";
}
- echo "]</center>";
- }
}
@@ -1009,24 +768,97 @@
function generateFooter() {
global $xlang;
global $editor;
- global $back;
global $HTTP_SERVER_VARS;
P();
echo "Translation engine based on <a
href=\"http://gnunet.org/i18nHTML/\">i18nHTML</a> (C) 2003, 2004, 2005
Christian Grothoff.<br />\n";
if ( ($xlang) && ($xlang != "English") ) {
$back = "http://" . $HTTP_SERVER_VARS["HTTP_HOST"] .
$HTTP_SERVER_VARS["REQUEST_URI"];
- // echo "<span align=\"center\"><small>";
echo "<center><small>\n";
if ($editor != 1)
echo " <a href=\"$back&editor=1\">" . W_("enter translation mode") .
"</a>";
else
W(" Translation Mode Active (for this page only)");
- //echo "</small></span>";
echo "</small></center>\n";
}
echo "</p>\n";
}
-
-?>
+// *************************************************
+// HTML construct helper functions
+// *************************************************
+
+function LI($a,$b="") {
+ echo "<li>" . W_($a,$b) . "</li>\n";
+}
+function TH($a,$b="") {
+ echo "<th>" . W_($a,$b) . "</th>\n";
+}
+function TD($a,$b="") {
+ echo "<td>" . W_($a,$b) . "</td>\n";
+}
+function DT($a,$b="") {
+ echo "<dt>" . W_($a,$b) . "</dt>\n";
+}
+function DD($a,$b="") {
+ echo "<dd>" . W_($a,$b) . "</dd>\n";
+}
+function H1($a,$b="") {
+ echo "<h1>" . W_($a,$b) . "</h1>\n";
+}
+function H2($a,$b="") {
+ echo "<h2>" . W_($a,$b) . "</h2>\n";
+}
+function H3($a,$b="") {
+ echo "<h3>" . W_($a,$b) . "</h3>\n";
+}
+function H4($a,$b="") {
+ echo "<h4>" . W_($a,$b) . "</h4>\n";
+}
+function H5($a,$b="") {
+ echo "<h5>" . W_($a,$b) . "</h5>\n";
+}
+function PRE($a) {
+ echo "<pre>" . $a . "</pre>";
+}
+// 'verbatim' (untranslated) "li"
+function LIV($a) {
+ echo "<li>" . $a . "</li>\n";
+}
+function P($attr="") {
+ echo "<p $attr>\n";
+}
+function BR() {
+ echo "<br />\n";
+}
+function HR() {
+ echo "<hr>\n";
+}
+function DTDD($a,$b) {
+ DT($a);
+ DD($b);
+}
+function LILI($a,$b) {
+ echo "<li>" . extlink_($a,$b) . "</li>\n";
+}
+function ANCHOR($a) {
+ echo "<a name=\"$a\"></a>\n";
+}
+function IMG_($src, $alt, $align="CENTER", $width, $height, $border=0,
$hspace=0, $vspace=0) {
+ $ret = "";
+
+ if ($align == "CENTER")
+ $ret = $ret . "<p><center>\n";
+ $ret = $ret . "<img src=\"" . $src . "\" alt=\"";
+ $ret = $ret . TRANSLATE_($alt);
+ $ret = $ret . "\" align=\"" . $align . "\" width=$width height=$height
border=$border hspace=$hspace vspace=$vspace>\n";
+ $ret = $ret . translateLink_($alt);
+ if ($align == "CENTER")
+ $ret = $ret . "</center><p>\n";
+ return $ret;
+}
+function IMG($src, $alt, $align="CENTER", $width, $height, $border=0,
$hspace=0, $vspace=0) {
+ echo IMG_($src, $alt, $align, $width, $height, $border, $hspace, $vspace);
+}
+
+?>
\ No newline at end of file
Modified: doodle-docs/WWW/translate.php
===================================================================
--- doodle-docs/WWW/translate.php 2005-04-10 17:54:37 UTC (rev 634)
+++ doodle-docs/WWW/translate.php 2005-04-11 06:02:26 UTC (rev 635)
@@ -1,6 +1,6 @@
<?php
/*
- (C) 2003, 2004 Christian Grothoff
+ (C) 2003, 2004, 2005 Christian Grothoff
This code is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
@@ -22,9 +22,10 @@
echo "Database is down. Cannot edit translations.";
die();
}
-$text = $_REQUEST['text'];
+$text = fix($_REQUEST['text']);
+$text_sql = mysql_real_escape_string($text);
+$text_url = urlencode($text);
$back = $_REQUEST['back'];
-
DOCTYPE("HTML", "Transitional");
echo "<html><head>\n";
TITLE("WWW translation");
@@ -37,66 +38,43 @@
die();
}
H2("Original Text");
-// if (get_magic_quotes_gpc()) $text = stripslashes($text);
echo $text;
H2("Translation");
W("Destination language: ");
W($lang);
P();
echo "<form method=\"POST\" action=\"" . $i18nHTMLbase .
"commitTranslation.php\">\n";
-echo "<input type=hidden name=\"text\" value=\"" . urlencode($text) . "\">\n";
+echo "<input type=hidden name=\"text\" value=\"$text_url\">\n";
echo "<input type=hidden name=\"xlang\" value=\"$xlang\">\n";
echo "<input type=hidden name=\"back\" value=\"$back\">\n";
-/*
-P();
-W("Character set:");
-<select size="1" name="charset">
- <option value="UTF-8">Unicode UTF-8 encoding</option>
- <option selected value="ISO-8859-1">ISO-8859-1 Western European,
Latin-1</option>
- <option value="ISO-8859-15">ISO-8859-15 Extended Western European</option>
- <option value="cp1252">cp1252 Windows Western Europen</option>
- <option value="cp866">cp866 DOS Cyrillic</option>
- <option value="cp1251">cp1251 Windows Cyrillic</option>
- <option value="KOI8-R">koi8-ru Russian</option>
- <option value="BIG5">BIG5 Traditional Chinese</option>
- <option value="GB2312">GB2312 Simplified Chinese</option>
- <option value="Shift-JIS">Shift-JIS Japanese</option>
- <option value="EUC-JP">EUC-JP Japanese</option>
-</select><br> */
W("Translated text:");
-?>
-<input size="80" maxlength="65535" name="translation">
-<input type=submit value="I hereby give this translation into the Public
Domain (commit)">
-</form>
-<?php
+echo "<input size=\"80\" maxlength=\"65535\" name=\"translation\">\n";
+echo "<input type=submit value=\"" .
+ TRANSLATE_("I hereby give this translation into the Public Domain
(commit)") .
+ "\">\n";
+echo "</form>\n";
P();
H2("All available translations");
-?>
-<table border=5 width=95%>
-<tr><th><?php W("Language"); ?></th><th><?php W("Translation"); ?></th></tr>
-<?php
- $u = urlencode($text);
- $query = "SELECT translation,lang FROM map WHERE name=\"$u\" ORDER BY ranking
DESC";
- $result = mysql_query($query, $connection);
- $num = 0;
- if ($result)
- $num = mysql_num_rows($result);
- for ($i=0;$i<$num;$i++) {
- $row = mysql_fetch_array($result);
-
- // we assume strings escaped before adding to DB
- $translation = stripslashes($row["translation"]);
-
- printf("<tr><td>%s</td><td><a href=\"" . $i18nHTMLbase .
"vote.php?xlang=%s&text=%s&translation=%s\">%s</a></td></tr>\n",
- W_($row["lang"]),
- urlencode($row["lang"]),
- $u,
- urlencode(from_unicode($translation)),
- fix(from_unicode($translation)));
- }
+echo "<table border=5 width=95%>\n";
+echo "<tr><th>" . W_("Language") . "</th><th>" . W_("Translation") .
"</th></tr>\n";
+$query = "SELECT translation,lang FROM map WHERE name=\"$text_sql\" ORDER BY
ranking DESC";
+$result = mysql_query($query, $connection);
+$num = 0;
+if ($result)
+ $num = mysql_num_rows($result);
+for ($i=0;$i<$num;$i++) {
+ $row = mysql_fetch_array($result);
+ $translation = $row["translation"];
+ printf("<tr><td>%s</td><td><a href=\"" . $i18nHTMLbase .
+ "vote.php?xlang=%s&text=%s&translation=%s\">%s</a></td></tr>\n",
+ W_($row["lang"]),
+ urlencode($row["lang"]),
+ urlencode($text_url), // yes, we need urlencode twice!
+ urlencode(urlencode($translation)), // yes, we need urlencode twice!
+ fix($translation));
+}
echo "</table>";
-
H2("Remarks");
H3("The percent sign");
W("The %% sign is a special character.");
@@ -104,19 +82,15 @@
W("The sequence %%s is used as a placeholder for links.");
W("Currently, the translation can only access the links in the same order as
the original text.");
P();
-
H3("Language specific special characters");
W("Various languages use special characters.");
W("The code has not been tested with certain character sets, such as
Chinese.");
W("If you are trying to translate the page to such a language, please contact
the developerws if you encounter any problems.");
P();
-
H3("Copyright");
W("The original english text is released under the GNU Free Documentation
License (FDL).");
W("Translations submitted to the webpage must be released to the public domain
to ensure that we will not have any legal trouble.");
W("If you have concerns or remarks regarding this policy, feel free to bring
them to our attention.");
-
generateFooter();
echo "</body></html>";
-
?>
Modified: doodle-docs/WWW/vote.php
===================================================================
--- doodle-docs/WWW/vote.php 2005-04-10 17:54:37 UTC (rev 634)
+++ doodle-docs/WWW/vote.php 2005-04-11 06:02:26 UTC (rev 635)
@@ -17,26 +17,25 @@
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA.
*/
- // This file records votes from users for translations.
- // For sentences with multiple translations, the one with the most
- // votes is displayed.
+// This file records votes from users for translations.
+// For sentences with multiple translations, the one with the most
+// votes is displayed.
include("i18nhtml.inc");
+DOCTYPE("HTML", "Transitional");
echo "<html><head>";
-echo "<meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" >";
TITLE("WWW translation: vote");
echo "</head><body>";
if (!$connection) {
echo "Database is down. Cannot edit translations.";
die();
}
-$text = $_REQUEST['text'];
-$translation = $_REQUEST['translation'];
-$u = mysql_real_escape_string($text);
-$t = mysql_real_escape_string(to_unicode($translation));
-echo "text = " . $text . "<br>\n";
-echo "translation = " . $translation . "<br>\n";
+$text = fix(urldecode($_REQUEST['text']));
+$translation = fix(urldecode($_REQUEST['translation']));
+$text_sql = mysql_real_escape_string($text);
+$translation_sql = mysql_real_escape_string(to_unicode($translation));
-$query = "SELECT ranking FROM map WHERE name=\"$u\" AND lang=\"$lang\" AND
translation=\"$t\"";
+$query = "SELECT ranking FROM map WHERE " .
+ "name=\"$text_sql\" AND lang=\"$lang\" AND
translation=\"$translation_sql\"";
$result = mysql_query($query, $connection);
$num = 0;
if ($result)
@@ -44,11 +43,13 @@
if ($num > 0) {
$row = mysql_fetch_array($result);
$ranking = $row["ranking"] + 1;
- $query = "UPDATE map SET ranking=\"$ranking\" WHERE name=\"$u\" AND
lang=\"$lang\" AND translation=\"$t\"";
+ $query = "UPDATE map SET ranking=\"$ranking\" WHERE " .
+ "name=\"$text_sql\" AND lang=\"$lang\" AND
translation=\"$translation_sql\"";
mysql_query($query, $connection);
W("Ranking of translation is now: ");
echo "$ranking";
- } else {
- W("Translation does not exist (bug?).");
- }
+} else {
+ W("Translation '%s' of '%s' does not exist (bug?).",
+ ARRAY($translation, $text));
+}
?>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r635 - doodle-docs/WWW,
grothoff <=