finishing touches on genpopo, started playing with _real_ PHP code and svn keywords

This commit is contained in:
eric 2004-06-18 16:23:14 +00:00
parent 79f64a0592
commit 1e35dc01cf
10 changed files with 212 additions and 60 deletions

View file

@ -25,6 +25,7 @@ CREATE TABLE Users (
Email CHAR(64) NOT NULL, Email CHAR(64) NOT NULL,
Passwd CHAR(32) NOT NULL, Passwd CHAR(32) NOT NULL,
RealName CHAR(64) NOT NULL DEFAULT '', RealName CHAR(64) NOT NULL DEFAULT '',
LangPreference CHAR(2) NOT NULL DEFAULT 'en',
IRCNick CHAR(32) NOT NULL DEFAULT '', IRCNick CHAR(32) NOT NULL DEFAULT '',
LastVoted BIGINT UNSIGNED NOT NULL DEFAULT 0, LastVoted BIGINT UNSIGNED NOT NULL DEFAULT 0,
NewPkgNotify TINYINT UNSIGNED NOT NULL DEFAULT 0, NewPkgNotify TINYINT UNSIGNED NOT NULL DEFAULT 0,

View file

@ -34,6 +34,12 @@
font-family: trebuchet ms, tahoma, verdana; font-family: trebuchet ms, tahoma, verdana;
font-size: 11px; font-size: 11px;
} }
span.fixed /* Monospace fixed-font */
{
color: #000;
font-family: monospace, fixed, terminal;
font-size: 12px;
}
/* Font Attribute Change (#6c83b0)*/ /* Font Attribute Change (#6c83b0)*/
span.blue span.blue

View file

@ -1,9 +1,12 @@
<? <?
include_once("index_po.inc"); include("index_po.inc");
include("aur.inc");
html_header();
print _("Hello, world!")."<br/>\n";
print _("Hello, again!")."<br/>\n";
print _("Julie was here!")."<br/>\n";
print _("Abernathy was here!")."<br/>\n";
print "Hi, this is worth reading!<br>\n";
html_footer("\$Id$");
?> ?>

42
web/html/testpo.php Normal file
View file

@ -0,0 +1,42 @@
<?
# This is a sample script to demonstrate how the AUR will
# handle i18n. Note: When the PHP script is finished, and
# has the proper include file (see below), and the _()
# function has been used (see below), use the web/utils/genpopo
# script to parse the PHP script and pull out the text
# that requires translation and puts the mapping into the
# include file.
#
# Each AUR PHP script that requires i18n support, needs to
# define an 'xxx_po.inc' file where the i18n mapping will
# reside.
#
include("test_po.inc");
# Use the _() function to identify text that requires
# translation to other languages. The examples below
# show how to use %-substitution.
#
print "<html><body bgcolor='white'>\n";
print "<p>\n";
print _("Select your language here: %h%s%h, %h%s%h, %h%s%h, %h%s%h.",
array("<a href='".$_SERVER['PHP_SELF']."?LANG=en'>","English","</a>",
"<a href='".$_SERVER['PHP_SELF']."?LANG=es'>","Español","</a>",
"<a href='".$_SERVER['PHP_SELF']."?LANG=de'>","Deutsch","</a>",
"<a href='".$_SERVER['PHP_SELF']."?LANG=fr'>","Français","</a>"));
print "</p>\n";
print "<p>\n";
print _("My current language tag is: '%s'.", array($LANG));
print "</p>\n";
print "<ul>\n";
print _("Hello, world!")."<br/>\n";
print _("Hello, again!")."<br/>\n";
print "</ul>\n";
print "</body>\n</html>";
?>

View file

@ -1,5 +1,14 @@
<? <?
# INSTRUCTIONS TO TRANSLATORS: # INSTRUCTIONS TO TRANSLATORS
# blah blah blah.... #
# This file contains the i18n translations for a subset of the
# Arch Linux User-community Repository (AUR). This is a PHP
# script, and as such, you MUST pay great attention to the syntax.
# If your text contains any double-quotes ("), you MUST escape
# them with the backslash character (\).
#
include_once("translator.inc");
global $_t;
?> ?>

View file

@ -1,25 +1,14 @@
<? <?
# INSTRUCTIONS TO TRANSLATORS: # INSTRUCTIONS TO TRANSLATORS
# blah blah blah.... #
# This file contains the i18n translations for a subset of the
# Arch Linux User-community Repository (AUR). This is a PHP
# script, and as such, you MUST pay great attention to the syntax.
# If your text contains any double-quotes ("), you MUST escape
# them with the backslash character (\).
#
$_t["en"]["Julie was here!"] = "Julie was here!"; include_once("translator.inc");
# $_t["es"]["Julie was here!"] = "--> Spanish translation here. <--"; global $_t;
# $_t["fr"]["Julie was here!"] = "--> French translation here. <--";
# $_t["de"]["Julie was here!"] = "--> German translation here. <--";
$_t["en"]["Hello, again!"] = "Hello, again!";
# $_t["es"]["Hello, again!"] = "--> Spanish translation here. <--";
# $_t["fr"]["Hello, again!"] = "--> French translation here. <--";
# $_t["de"]["Hello, again!"] = "--> German translation here. <--";
$_t["en"]["Hello, world!"] = "Hello, world!";
# $_t["es"]["Hello, world!"] = "--> Spanish translation here. <--";
# $_t["fr"]["Hello, world!"] = "--> French translation here. <--";
# $_t["de"]["Hello, world!"] = "--> German translation here. <--";
$_t["en"]["Abernathy was here!"] = "Abernathy was here!";
# $_t["es"]["Abernathy was here!"] = "--> Spanish translation here. <--";
# $_t["fr"]["Abernathy was here!"] = "--> French translation here. <--";
# $_t["de"]["Abernathy was here!"] = "--> German translation here. <--";
?> ?>

34
web/lang/test_po.inc Normal file
View file

@ -0,0 +1,34 @@
<?
# INSTRUCTIONS TO TRANSLATORS
#
# This file contains the i18n translations for a subset of the
# Arch Linux User-community Repository (AUR). This is a PHP
# script, and as such, you MUST pay great attention to the syntax.
# If your text contains any double-quotes ("), you MUST escape
# them with the backslash character (\).
#
include_once("translator.inc");
global $_t;
$_t["en"]["Select your language here: %h%s%h, %h%s%h, %h%s%h, %h%s%h."] = "Select your language here: %h%s%h, %h%s%h, %h%s%h, %h%s%h.";
$_t["es"]["Select your language here: %h%s%h, %h%s%h, %h%s%h, %h%s%h."] = "Seleccione su lengua aquí: %h%s%h, %h%s%h, %h%s%h, %h%s%h.";
$_t["fr"]["Select your language here: %h%s%h, %h%s%h, %h%s%h, %h%s%h."] = "Choisissez votre langue ici: %h%s%h, %h%s%h, %h%s%h, %h%s%h.";
$_t["de"]["Select your language here: %h%s%h, %h%s%h, %h%s%h, %h%s%h."] = "Wählen Sie Ihre Sprache hier vor: %h%s%h, %h%s%h, %h%s%h, %h%s%h.";
$_t["en"]["Hello, world!"] = "Hello, world!";
$_t["es"]["Hello, world!"] = "¡Hola, mundo!";
$_t["fr"]["Hello, world!"] = "Bonjour, monde!";
$_t["de"]["Hello, world!"] = "Hallo, Welt!";
$_t["en"]["Hello, again!"] = "Hello, again!";
$_t["es"]["Hello, again!"] = "¡Hola, otra vez!";
$_t["fr"]["Hello, again!"] = "Bonjour, encore!";
$_t["de"]["Hello, again!"] = "Hallo, wieder!";
$_t["en"]["My current language tag is: '%s'."] = "My current language tag is: '%s'.";
$_t["es"]["My current language tag is: '%s'."] = "Mi etiqueta de lengua actual es: '%s'.";
$_t["fr"]["My current language tag is: '%s'."] = "Ma étiquette de langue courante est: '%s'.";
$_t["de"]["My current language tag is: '%s'."] = "Meine gegenwärtige Sprachflagge ist: '%s'.";
?>

54
web/lib/aur.inc Normal file
View file

@ -0,0 +1,54 @@
<?
# common header
#
function html_header() {
print "<html>\n";
print "<head>\n";
print "<title>AUR</title>\n";
print "<link rel='stylesheet' type='text/css' href='/css/fonts.css'/>\n";
print "<link rel='stylesheet' type='text/css' href='/css/containers.css'/>\n";
print "<link rel='shortcut icon' href='/favicon.ico'/>\n";
print "</head>\n";
print "<body bgcolor='white'>\n";
print "<table cellspacing='0' ";
print "style='background-color: #000; width: 100%;'>\n";
print " <tr>\n";
print " <td class='preHeader'><span class='preHeader'>AUR: An ";
print "ArchLinux project</span></td>\n";
print " </tr>\n";
print " <tr>\n";
print " <td class='headerFill'>\n";
print " <table width='100%'>\n";
print " <tr>\n";
print " <td class='headerDisplay'><a href='";
print $_SERVER['PHP_SELF']."'>";
print "<img src='/images/aur.png' border='0'></a></td>\n";
print " <td class='headerDisplay' align='right'>";
print "<span class='fix'>ArchLinux User-community Repository</span></td>\n";
print " </tr>\n";
print " </table>\n";
print " </tr>\n";
print "</table>\n";
print "<!-- Start of main content -->\n\n";
return;
}
# common footer
#
function html_footer($ver="") {
print "\n\n<!-- End of main content -->";
print "<p>\n";
if ($ver) {
print "<table border='0' cellpadding='0' cellspacing='0' width='90%'>\n";
print "<tr><td align='right'>";
print "<span class='fix'>".$ver."<span/>\n";
print "</td></tr>\n";
print "</table>\n";
}
print "</body>\n</html>";
return;
}
# vim: ts=2 sw=2 noet ft=php
?>

View file

@ -24,20 +24,30 @@ include_once("common_po.inc");
function _($tag, $args=array()) { function _($tag, $args=array()) {
global $_t; global $_t;
global $_REQUEST;
global $LANG; global $LANG;
# default to English if the lang hasn't been provided $supported_langs = array(
"en" => 1, # English
"es" => 1, # Español
"de" => 1, # Deutsch
"fr" => 1, # Français
);
# default to English if the lang hasn't been provided or isn't supported
# #
if (!$LANG) { $LANG = $_REQUEST['LANG'];
$lang = "en"; if (!$LANG || !array_key_exists($LANG, $supported_langs)) {
} else { $LANG = "en";
$lang = $LANG;
} }
# create the translation, if it doesn't exist, highlight it # create the translation, if it doesn't exist, highlight it
# #
$translated = $_t[$lang][$tag]; $translated = $_t[$LANG][$tag];
if (!$translated) { if (!$translated) {
# if it's a supported language, but there isn't a translation,
# alert the visitor to the missing translation.
#
$translated = "<blink><b>_" . $tag . "_</b></blink>"; $translated = "<blink><b>_" . $tag . "_</b></blink>";
} }

View file

@ -12,6 +12,22 @@
# -f: force, overwrite existing translated files, otherwise append # -f: force, overwrite existing translated files, otherwise append
# #
INC_HEADER = """\
<?
# INSTRUCTIONS TO TRANSLATORS
#
# This file contains the i18n translations for a subset of the
# Arch Linux User-community Repository (AUR). This is a PHP
# script, and as such, you MUST pay great attention to the syntax.
# If your text contains any double-quotes ("), you MUST escape
# them with the backslash character (\).
#
include_once("translator.inc");
global $_t;
"""
import sys import sys
print_dupes = '-v' in sys.argv print_dupes = '-v' in sys.argv
force = '-f' in sys.argv force = '-f' in sys.argv
@ -107,7 +123,7 @@ for dir in ['../html', '../lib', 'html', 'lib']:
os.chdir(current_dir) os.chdir(current_dir)
# TODO Now generate all the .inc files if they don't already exist. # Now generate all the .inc files if they don't already exist.
# if they do exist, only append new stuff to the end. If the 'force' # if they do exist, only append new stuff to the end. If the 'force'
# option is passed, just overwrite the entire thing. # option is passed, just overwrite the entire thing.
# #
@ -119,17 +135,14 @@ if force:
print "Generating %s..." % po print "Generating %s..." % po
f = open(po,'w') f = open(po,'w')
f.write("<?\n") f.write(INC_HEADER)
f.write("""# INSTRUCTIONS TO TRANSLATORS:
# blah blah blah....
""")
for term in lang[po].keys(): for term in lang[po].keys():
f.write("\n"); f.write("\n")
f.write('$_t["en"]["%s"] = "%s";\n' % (term, term)) f.write('$_t["en"]["%s"] = "%s";\n' % (term, term))
f.write('# $_t["es"]["%s"] = "--> Spanish translation here. <--";\n' % term) f.write('# $_t["es"]["%s"] = "--> Traducción española aquí. <--";\n' % term)
f.write('# $_t["fr"]["%s"] = "--> French translation here. <--";\n' % term) f.write('# $_t["fr"]["%s"] = "--> Traduction française ici. <--";\n' % term)
f.write('# $_t["de"]["%s"] = "--> German translation here. <--";\n' % term) f.write('# $_t["de"]["%s"] = "--> Deutsche Übersetzung hier. <--";\n' % term)
f.write("\n"); f.write("\n");
f.write("?>"); f.write("?>");
@ -153,21 +166,11 @@ else:
contents = f.readlines() contents = f.readlines()
f.close() f.close()
# remove PHP tags
#
stripped_contents = []
for line in contents:
if line.strip() not in ["<?", "?>"]:
stripped_contents.append(line)
contents = stripped_contents
# strip off beginning/ending empty lines # strip off beginning/ending empty lines
# #
while contents[0] == '': while contents[0] == '':
del contents[0] del contents[0]
while contents[-1] == '': while contents[-1] in ['', "\n", "?>", "?>\n", "\n?>"]:
del contents[-1]
if contents[-1] == "\n":
del contents[-1] del contents[-1]
# next, collect existing terms # next, collect existing terms
@ -180,17 +183,18 @@ else:
# now append any new terms to EOF # now append any new terms to EOF
# #
f = open(po, 'w') f = open(po, 'w')
f.write("<?\n")
if not new_file: if not new_file:
f.write("".join(contents)) f.write("".join(contents))
else:
f.write(INC_HEADER)
for term in lang[po].keys(): for term in lang[po].keys():
if term not in existing_terms: if term not in existing_terms:
f.write("\n"); f.write("\n");
f.write('$_t["en"]["%s"] = "%s";\n' % (term, term)) f.write('$_t["en"]["%s"] = "%s";\n' % (term, term))
f.write('# $_t["es"]["%s"] = "--> Spanish translation here. <--";\n' % term) f.write('# $_t["es"]["%s"] = "--> Traducción española aquí. <--";\n' % term)
f.write('# $_t["fr"]["%s"] = "--> French translation here. <--";\n' % term) f.write('# $_t["fr"]["%s"] = "--> Traduction française ici. <--";\n' % term)
f.write('# $_t["de"]["%s"] = "--> German translation here. <--";\n' % term) f.write('# $_t["de"]["%s"] = "--> Deutsche Übersetzung hier. <--";\n' % term)
f.write("\n?>"); f.write("\n?>");
f.close() f.close()