Merge branch 'gettext' of https://github.com/fabrixxm/friendika into fabrixxm-gettext

This commit is contained in:
Friendika 2011-03-18 05:07:42 -07:00
commit 9838245c6c
28 changed files with 5978 additions and 1266 deletions

View file

@ -159,6 +159,11 @@ if (get_magic_quotes_gpc()) {
unset($process);
}
/*
* translation system
*/
require_once("include/pgettext.php");
/**
*
@ -601,28 +606,6 @@ function replace_macros($s,$r) {
}}
// load string translation table for alternate language
if(! function_exists('load_translation_table')) {
function load_translation_table($lang) {
global $a;
if(file_exists("view/$lang/strings.php"))
include("view/$lang/strings.php");
}}
// translate string if translation exists
if(! function_exists('t')) {
function t($s) {
$a = get_app();
if(x($a->strings,$s))
return $a->strings[$s];
return $s;
}}
// curl wrapper. If binary flag is true, return binary
// results.
@ -1845,10 +1828,14 @@ if(! function_exists('format_like')) {
function format_like($cnt,$arr,$type,$id) {
$o = '';
if($cnt == 1)
$o .= $arr[0] . (($type === 'like') ? t(' likes this.') : t(' doesn\'t like this.')) . EOL ;
$o .= (($type === 'like') ? sprintf( t('%s likes this.'), $arr[0]) : sprintf( t('%s doesn\'t like this.'), $arr[0])) . EOL ;
else {
$o .= '<span class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');" >'
. $cnt . ' ' . t('people') . '</span> ' . (($type === 'like') ? t('like this.') : t('don\'t like this.')) . EOL ;
$spanatts = 'class="fakelink" onclick="openClose(\'' . $type . 'list-' . $id . '\');"';
$o .= (($type === 'like') ?
sprintf( t('<span %1$s>%2$d people</span> like this.'), $spanatts, $cnt)
:
sprintf( t('<span %1$s>%2$d people</span> don\'t like this.'), $spanatts, $cnt) );
$o .= EOL ;
$total = count($arr);
if($total >= MAX_LIKERS)
$arr = array_slice($arr, 0, MAX_LIKERS - 1);
@ -1856,8 +1843,8 @@ function format_like($cnt,$arr,$type,$id) {
$arr[count($arr)-1] = t('and') . ' ' . $arr[count($arr)-1];
$str = implode(', ', $arr);
if($total >= MAX_LIKERS)
$str .= t(', and ') . $total - MAX_LIKERS . t(' other people');
$str .= (($type === 'like') ? t(' like this.') : t(' don\'t like this.'));
$str .= sprintf( t(', and %d other people'), $total - MAX_LIKERS );
$str = (($type === 'like') ? sprintf( t('%s like this.'), $str) : sprintf( t('%s don\'t like this.'), $str));
$o .= "\t" . '<div id="' . $type . 'list-' . $id . '" style="display: none;" >' . $str . '</div>';
}
return $o;

46
include/pgettext.php Normal file
View file

@ -0,0 +1,46 @@
<?php
/**
* translation support
*/
// load string translation table for alternate language
if(! function_exists('load_translation_table')) {
function load_translation_table($lang) {
global $a;
if(file_exists("view/$lang/strings.php"))
include("view/$lang/strings.php");
}}
// translate string if translation exists
if(! function_exists('t')) {
function t($s) {
$a = get_app();
if(x($a->strings,$s)) {
$t = $a->strings[$s];
return is_array($t)?$t[0]:$t;
}
return $s;
}}
if(! function_exists('tt')){
function tt($singular, $plural, $count){
$a = get_app();
if(x($a->strings,$singular)) {
$t = $a->strings[$singular];
$k = string_plural_select($count);
return is_array($t)?$t[$k]:$t;
}
if ($count!=1){
return $plural;
} else {
return $singular;
}
}}

View file

@ -137,7 +137,8 @@ function contacts_content(&$a) {
intval(local_user())
);
if($r) {
notice( t('Contact has been ') . (($blocked) ? t('blocked') : t('unblocked')) . EOL );
//notice( t('Contact has been ') . (($blocked) ? t('blocked') : t('unblocked')) . EOL );
notice( (($blocked) ? t('Contact has been blocked') : t('Contact has been unblocked')) . EOL );
}
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
return; // NOTREACHED
@ -151,7 +152,7 @@ function contacts_content(&$a) {
intval(local_user())
);
if($r) {
notice( t('Contact has been ') . (($readonly) ? t('ignored') : t('unignored')) . EOL );
notice( (($readonly) ? t('Contact has been ignored') : t('Contact has been unignored')) . EOL );
}
goaway($a->get_baseurl() . '/contacts/' . $contact_id);
return; // NOTREACHED
@ -364,13 +365,14 @@ function contacts_content(&$a) {
$o .= replace_macros($tpl, array(
'$img_hover' => t('Visit ') . $rr['name'] . t('\'s profile'),
'$img_hover' => t('Visit $username\'s profile'),
'$edit_hover' => t('Edit contact'),
'$id' => $rr['id'],
'$alt_text' => $alt_text,
'$dir_icon' => $dir_icon,
'$thumb' => $rr['thumb'],
'$name' => substr($rr['name'],0,20),
'$username' => $rr['name'],
'$sparkle' => $sparkle,
'$url' => $url
));

View file

@ -491,7 +491,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
dbesc($node));
if(! count($r)) {
$message = t('No user record found for ') . '\'' . $node . '\'';
$message = sprintf(t('No user record found for \'%s\' '), $node);
xml_status(3,$message); // failure
// NOTREACHED
}
@ -645,7 +645,7 @@ function dfrn_confirm_post(&$a,$handsfree = null) {
'$uid' => $newuid )
);
$res = mail($r[0]['email'], t("Connection accepted at ") . $a->config['sitename'],
$res = mail($r[0]['email'], sprintf( t("Connection accepted at %s") , $a->config['sitename']),
$email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
if(!$res) {
// pointless throwing an error here and confusing the person at the other end of the wire.

View file

@ -385,7 +385,7 @@ function dfrn_notify_post(&$a) {
'$body' => html_entity_decode(strip_tags(bbcode(stripslashes($datarray['body']))), ENT_QUOTES, 'UTF-8')
));
$res = mail($importer['email'], $from . t(' commented on an item at ') . $a->config['sitename'],
$res = mail($importer['email'], sprintf(t('%s commented on an item at %s'), $from , $a->config['sitename']),
$email_tpl, "From: " . t('Administrator') . '@' . $a->get_hostname() );
}
}
@ -471,9 +471,8 @@ function dfrn_notify_post(&$a) {
'$body' => html_entity_decode(strip_tags(bbcode(stripslashes($datarray['body']))), ENT_QUOTES, 'UTF-8')
));
$res = mail($importer['email'], $from . t(" commented on an item at ")
. $a->config['sitename'],
$email_tpl,t("From: Administrator@") . $a->get_hostname() );
$res = mail($importer['email'], sprintf( t("%s commented on an item at %s") , $from ,$a->config['sitename']),
$email_tpl, "From: ".t("Administrator") . "@". $a->get_hostname() );
break;
}
}

View file

@ -75,7 +75,7 @@ function dfrn_poll_init(&$a) {
$_SESSION['authenticated'] = 1;
$_SESSION['visitor_id'] = $r[0]['id'];
$_SESSION['visitor_home'] = $r[0]['url'];
notice( $r[0]['username'] . t(' welcomes ') . $r[0]['name'] . EOL);
notice( sprintf(t('%s welcomes %s'), $r[0]['username'] , $r[0]['name']) . EOL);
// Visitors get 1 day session.
$session_id = session_id();
$expire = time() + 86400;
@ -389,7 +389,7 @@ function dfrn_poll_content(&$a) {
$_SESSION['authenticated'] = 1;
$_SESSION['visitor_id'] = $r[0]['id'];
$_SESSION['visitor_home'] = $r[0]['url'];
notice( $r[0]['username'] . t(' welcomes ') . $r[0]['name'] . EOL);
notice( sprintf(t('%s welcomes %s'), $r[0]['username'] , $r[0]['name']) . EOL);
// Visitors get 1 day session.
$session_id = session_id();
$expire = time() + 86400;

View file

@ -123,9 +123,9 @@ function dfrn_request_post(&$a) {
notice( t('Warning: profile location has no profile photo.') . EOL );
$invalid = validate_dfrn($parms);
if($invalid) {
notice( $invalid . t(' required parameter')
. (($invalid == 1) ? t(" was ") : t("s were ") )
. t("not found at the given location.") . EOL ) ;
notice( sprintf( tt("%d required parameter was not found at the given location",
"%d required parameters were not found at the given location",
$invalid), $invalid) . EOL );
return;
}
}
@ -238,7 +238,7 @@ function dfrn_request_post(&$a) {
intval($uid)
);
if(count($r) > $maxreq) {
notice( $a->profile['name'] . t(' has received too many connection requests today.') . EOL);
notice( sprintf( t('%s has received too many connection requests today.'), $a->profile['name']) . EOL);
notice( t('Spam protection measures have been invoked.') . EOL);
notice( t('Friends are advised to please try again in 24 hours.') . EOL);
return;
@ -306,7 +306,7 @@ function dfrn_request_post(&$a) {
return;
}
elseif($ret[0]['rel'] == REL_BUD) {
notice( t('Apparently you are already friends with .') . $a->profile['name'] . EOL);
notice( sprintf( t('Apparently you are already friends with %s.'), $a->profile['name']) . EOL);
return;
}
else {
@ -354,9 +354,9 @@ function dfrn_request_post(&$a) {
notice( t('Warning: profile location has no profile photo.') . EOL );
$invalid = validate_dfrn($parms);
if($invalid) {
notice( $invalid . t(' required parameter')
. (($invalid == 1) ? t(" was ") : t("s were ") )
. t("not found at the given location.") . EOL ) ;
notice( sprintf( tt("%d required parameter was not found at the given location",
"%d required parameters were not found at the given location",
$invalid), $invalid) . EOL );
return;
}
@ -540,7 +540,7 @@ function dfrn_request_content(&$a) {
'$sitename' => $a->config['sitename']
));
$res = mail($r[0]['email'],
t("Introduction received at ") . $a->config['sitename'],
t("Introduction received at ") . $a->config['sitename'],
$email,
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
// This is a redundant notification - no point throwing errors if it fails.

View file

@ -20,7 +20,7 @@ function home_content(&$a) {
if(x($_SESSION,'theme'))
unset($_SESSION['theme']);
$o .= '<h1>' . ((x($a->config,'sitename')) ? t("Welcome to ").$a->config['sitename'] : "" ) . '</h1>';
$o .= '<h1>' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '</h1>';
if(file_exists('home.html'))
$o .= file_get_contents('home.html');

View file

@ -25,21 +25,21 @@ function invite_post(&$a) {
$recip = trim($recip);
if(! valid_email($recip)) {
notice( $recip . t(' : ') . t('Not a valid email address.') . EOL);
notice( sprintf( t('%s : Not a valid email address.'), $recip) . EOL);
continue;
}
$res = mail($recip, t('Please join my network on ') . $a->config['sitename'],
$res = mail($recip, sprintf(t('Please join my network on %s'), $a->config['sitename']),
$message, "From: " . $a->user['email']);
if($res) {
$total ++;
}
else {
notice( $recip . t(' : ') . t('Message delivery failed.') . EOL);
notice( sprintf( t('%s : Message delivery failed.'), $recip) . EOL);
}
}
notice( $total . t(' messages sent.') . EOL);
notice( sprintf( tt("%d message sent.", "%d messages sent.", $total) , $total) . EOL);
return;
}
@ -57,7 +57,7 @@ function invite_content(&$a) {
'$invite' => t('Send invitations'),
'$addr_text' => t('Enter email addresses, one per line:'),
'$msg_text' => t('Your message:'),
'$default_message' => t('Please join my social network on ') . $a->config['sitename'] . "\r\n" . "\r\n"
'$default_message' => sprintf(t('Please join my social network on %s'), $a->config['sitename']) . "\r\n" . "\r\n"
. t('To accept this invitation, please visit:') . "\r\n" . "\r\n" . $a->get_baseurl()
. "\r\n" . "\r\n" . t('Once you have registered, please connect with me via my profile page at:')
. "\r\n" . "\r\n" . $a->get_baseurl() . '/profile/' . $a->user['nickname'] ,

View file

@ -471,8 +471,8 @@ function item_post(&$a) {
'$body' => strip_tags(bbcode($datarray['body']))
));
$res = mail($user['email'], $from . t(" commented on your item at ") . $a->config['sitename'],
$email_tpl,t("From: Administrator@") . $a->get_hostname() );
$res = mail($user['email'], sprintf( t("%s commented on your item at %s") ,$from,$a->config['sitename']),
$email_tpl,"From: " . t("Administrator") . "@" . $a->get_hostname() );
}
}
else {
@ -494,8 +494,8 @@ function item_post(&$a) {
'$body' => strip_tags(bbcode($datarray['body']))
));
$res = mail($user['email'], $from . t(" posted on your profile wall at ") . $a->config['sitename'],
$email_tpl,t("From: Administrator@") . $a->get_hostname() );
$res = mail($user['email'], sprintf( t("%s posted on your profile wall at %s") ,$from, $a->config['sitename']),
$email_tpl,"From: " . t("Administrator") . "@" . $a->get_hostname() );
}
}
@ -538,13 +538,13 @@ function item_post(&$a) {
$addr = trim($recip);
if(! strlen($addr))
continue;
$disclaimer = '<hr />' . t('This message was sent to you by ') . $a->user['username']
. t(', a member of the Friendika social network.') . '<br />';
$disclaimer = '<hr />' . sprintf(t('This message was sent to you by %s, a member of the Friendika social network.'),$a->user['username'])
. '<br />';
$disclaimer .= t('You may visit them online at') . ' '
. $a->get_baseurl() . '/profile/' . $a->user['nickname'] . '<br />';
$disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . '<br />';
$subject = '[Friendika]' . ' ' . $a->user['username'] . ' ' . t('posted an update.');
$subject = '[Friendika]' . ' ' . sprintf( t('%s posted an update.'),$a->user['username']);
$headers = 'From: ' . $a->user['username'] . ' <' . $a->user['email'] . '>' . "\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-Type: text/html; charset=UTF-8' . "\n";

View file

@ -124,9 +124,9 @@ function like_content(&$a) {
</object>
EOT;
if($verb === 'like')
$bodyverb = t('likes');
$bodyverb = t('%1$s likes %2$s\'s %3$s');
if($verb === 'dislike')
$bodyverb = t('doesn\'t like');
$bodyverb = t('%1$s doesn\'t like %2$s\'s %3$s');
if(! isset($bodyverb))
return;
@ -147,9 +147,11 @@ EOT;
$arr['author-name'] = $contact['name'];
$arr['author-link'] = $contact['url'];
$arr['author-avatar'] = $contact['thumb'];
$arr['body'] = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]' . ' ' . $bodyverb . ' '
. '[url=' . $item['author-link'] . ']' . $item['author-name'] . t('\'s') . '[/url]' . ' '
. '[url=' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]' ;
$ulink = '[url=' . $contact['url'] . ']' . $contact['name'] . '[/url]';
$alink = '[url=' . $item['author-link'] . ']' . $item['author-name'] . '[/url]';
$plink = '[url=' . $a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id'] . ']' . $post_type . '[/url]';
$arr['body'] = sprintf( $bodyverb, $ulink, $alink, $plink );
$arr['verb'] = $activity;
$arr['object-type'] = $objtype;

View file

@ -35,7 +35,7 @@ function lostpass_post(&$a) {
'$reset_link' => $a->get_baseurl() . '/lostpass?verify=' . $new_password
));
$res = mail($email, t('Password reset requested at ') . $a->config['sitename'],
$res = mail($email, sprintf(t('Password reset requested at %s'),$a->config['sitename']),
$email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER[SERVER_NAME]);
goaway($a->get_baseurl());

View file

@ -34,7 +34,7 @@ function manage_post(&$a) {
$_SESSION['page_flags'] = $r[0]['page-flags'];
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $r[0]['nickname'];
notice( t("Welcome back ") . $r[0]['username'] . EOL);
notice( sprintf( t("Welcome back %s") , $r[0]['username']) . EOL);
$a->user = $r[0];
if(strlen($a->user['timezone'])) {

View file

@ -70,7 +70,7 @@ function openid_content(&$a) {
$_SESSION['page_flags'] = $r[0]['page-flags'];
$_SESSION['my_url'] = $a->get_baseurl() . '/profile/' . $r[0]['nickname'];
notice( t("Welcome back ") . $r[0]['username'] . EOL);
notice( sprintf( t("Welcome back "), $r[0]['username']) . EOL);
$a->user = $r[0];
if(strlen($a->user['timezone'])) {

View file

@ -58,21 +58,21 @@ function profile_photo_post(&$a) {
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 4, 1);
if($r === false)
notice ( t('Image size reduction [175] failed.') . EOL );
notice ( sprintf(t('Image size reduction [%s] failed.'),"175") . EOL );
$im->scaleImage(80);
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 5, 1);
if($r === false)
notice( t('Image size reduction [80] failed.') . EOL );
notice( sprintf(t('Image size reduction [%s] failed.'),"80") . EOL );
$im->scaleImage(48);
$r = $im->store(local_user(), 0, $base_image['resource-id'],$base_image['filename'], t('Profile Photos'), 6, 1);
if($r === false)
notice( t('Image size reduction [48] failed.') . EOL );
notice( sprintf(t('Image size reduction [%s] failed.'),"48") . EOL );
// Unset the profile photo flag from any other photos I own
@ -106,7 +106,7 @@ function profile_photo_post(&$a) {
$maximagesize = get_config('system','maximagesize');
if(($maximagesize) && ($filesize > $maximagesize)) {
notice( t('Image exceeds size limit of ') . $maximagesize . EOL);
notice( sprintf(t('Image exceeds size limit of %d'), $maximagesize) . EOL);
@unlink($src);
return;
}
@ -234,7 +234,7 @@ function profile_photo_crop_ui_head(&$a, $ph){
$r = $ph->store(local_user(), 0 , $hash, $filename, t('Profile Photos'), 1 );
if($r === false)
notice( t('Image size reduction [640] failed.') . EOL );
notice( sprintf(t('Image size reduction [%s] failed.'),"640") . EOL );
else
$smallest = 1;
}

View file

@ -307,7 +307,7 @@ function register_post(&$a) {
'$password' => $new_password,
'$uid' => $newuid ));
$res = mail($email, t('Registration details for ') . $a->config['sitename'],
$res = mail($email, sprintf(t('Registration details for %s'), $a->config['sitename']),
$email_tpl, 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME']);
@ -344,7 +344,7 @@ function register_post(&$a) {
'$hash' => $hash
));
$res = mail($a->config['admin_email'], t('Registration request at ') . $a->config['sitename'],
$res = mail($a->config['admin_email'], sprintf(t('Registration request at %s'), $a->config['sitename']),
$email_tpl,'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME']);
if($res) {

View file

@ -51,7 +51,7 @@ function regmod_content(&$a) {
$r = q("DELETE FROM `register` WHERE `hash` = '%s' LIMIT 1",
dbesc($register[0]['hash'])
);
notice( t('Registration revoked for ') . $user[0]['username'] . EOL);
notice( sprintf(t('Registration revoked for %s'), $user[0]['username']) . EOL);
return;
}
@ -89,7 +89,7 @@ function regmod_content(&$a) {
'$uid' => $user[0]['uid']
));
$res = mail($user[0]['email'], t('Registration details for '). $a->config['sitename'],
$res = mail($user[0]['email'], sprintf(t('Registration details for %s'), $a->config['sitename']),
$email_tpl,'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] );
if($res) {

View file

@ -41,9 +41,10 @@ function viewcontacts_content(&$a) {
$o .= replace_macros($tpl, array(
'$id' => $rr['id'],
'$alt_text' => t('Visit ') . $rr['name'] . t('\'s profile'),
'$alt_text' => t('Visit $username\'s profile'),
'$thumb' => $rr['thumb'],
'$name' => substr($rr['name'],0,20),
'$username' => $rr['name'],
'$url' => $rr['url']
));
}

View file

@ -53,7 +53,7 @@ function wall_upload_post(&$a) {
$maximagesize = get_config('system','maximagesize');
if(($maximagesize) && ($filesize > $maximagesize)) {
notice( t('Image exceeds size limit of ') . $maximagesize . EOL);
notice( sprintf(t('Image exceeds size limit of %d'), $maximagesize) . EOL);
@unlink($src);
return;
}

View file

@ -44,5 +44,77 @@ then relocate the files to the view directory. The files in the top-level view
directory are template files which do not require translation.
Placeholders
Do not translate placeholders in strings! Things like %s, %d, %1$s and $somename
are used to add dynamic content to the string.
%s rappresent a dynamic string, like in "Welcome to %s"
%d rappresent a dynamic number, like in "%d new messages"
$somename is a variable like in php
In %1$s %2$s, the numbers are the position index of multiple dynamic content.
You could swap position in string of indexed placeholders.
e.g.
"%1$s's %2$s" => "John's photo", "John's item"
"%2$s di %1$s" => "foto di John", "elemento di John"
Plural
The tt() function supports plural form. Script extract.php write this in
strings.php as an array, one string for every plural form language supports:
$a->string["%d message sent"] = Array(
0 => "%d message sent",
1 => "%d messages sent",
);
The function string_plural_select($n) defined in strings.php, return the string
index to use, related to the numbers of item (value of $n).
This is modelled after ngettext function of GNU gettext.
More info at http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
Xgettext and .po workflow
1. Run utils/run_xgettext.sh script (on *unix sistems, with GNU xgettext installed)
This script runs xgettext on source tree, extracting strings from t() and tt()
functions, and creates a utils/messages.po file.
2. copy utils/messages.po to views/<langauage>/messages.po
3. open views/<langauage>/messages.po with a text editor and fill in infos in
"Last-Translator: FULL NAME <EMAIL@ADDRESS>"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
(eg:
"Last-Translator: Guybrush Threepwood <gb@host.com>"
"Language-Team: Pirate Friendika <pirate-friendika-ml@host.com>\n"
"Language: pi\n"
)
For the line
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
read GNU gettext manual at
http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html
4. You could then translate the strings in text editor, but I suggest to use one
of the many .po editors out there, like QtLinguist
5. run
$ php utils/po2php.php views/<language>/messages.po
to create the strings.php file
When strings are added or modified in source, you could run
$ utils/run_xgettext.sh views/<language>/messages.po
to extraxt strings from source files and join them with the existing .po file:
new strings are added, the existing are not overwritten.
If you already translated Friendika using strings.php, you could import your old
translation to messages.po. Run:
$ php utils/php2po.php views/<language>/strings.php

View file

@ -10,25 +10,50 @@
$str = file_get_contents($file);
$pat = '| t\(([^\)]*)\)|';
$patt = '| tt\(([^\)]*)\)|';
preg_match_all($pat,$str,$matches);
preg_match_all($patt, $str, $matchestt);
if(! count($matches))
continue;
foreach($matches[1] as $match) {
if(! in_array($match,$arr))
$arr[] = $match;
if(count($matches)){
foreach($matches[1] as $match) {
if(! in_array($match,$arr))
$arr[] = $match;
}
}
if(count($matchestt)){
foreach($matchestt[1] as $match) {
$matchtkns = preg_split("|[ \t\r\n]*,[ \t\r\n]*|",$match);
if (count($matchtkns)==3 && !in_array($matchtkns,$arr)){
$arr[] = $matchtkns;
}
}
}
}
$s = '<?php' . "\n";
foreach($arr as $a) {
if(substr($a,0,1) == '$')
continue;
$s .= '
function string_plural_select($n){
return ($n != 1);
}
$s .= '$a->strings[' . $a . '] = ' . $a . ';' . "\n";
';
foreach($arr as $a) {
if (is_array($a)){
if(substr($a[1],0,1) == '$')
continue;
$s .= '$a->strings[' . $a[0] . "] = array(\n";
$s .= "\t0 => ". $a[0]. ",\n";
$s .= "\t1 => ". $a[1]. ",\n";
$s .= ");\n";
} else {
if(substr($a,0,1) == '$')
continue;
$s .= '$a->strings[' . $a . '] = '. $a . ';' . "\n";
}
}
$zones = timezone_identifiers_list();

2411
util/messages.po Normal file

File diff suppressed because it is too large Load diff

71
util/php2po.php Normal file
View file

@ -0,0 +1,71 @@
<?php
if(! class_exists('App')) {
class TmpA {
public $strings = Array();
}
$a = new TmpA();
}
if ($argc!=2) {
print "Usage: ".$argv[0]." <strings.php>\n\n";
return;
}
$phpfile = $argv[1];
$pofile = dirname($phpfile)."/messages.po";
if (!file_exists($phpfile)){
print "Unable to find '$phpfile'\n";
return;
}
include_once($phpfile);
print "Out to '$pofile'\n";
$out = "";
$infile = file($pofile);
$k="";
$ink = False;
foreach ($infile as $l) {
if ($k!="" && substr($l,0,7)=="msgstr "){
$ink = False;
$v = '""';
//echo "DBG: k:'$k'\n";
if (isset($a->strings[$k])) {
$v= '"'.$a->strings[$k].'"';
//echo "DBG\n";
//var_dump($k, $v, $a->strings[$k], $v);
//echo "/DBG\n";
}
//echo "DBG: v:'$v'\n";
$l = "msgstr ".$v."\n";
}
if (substr($l,0,6)=="msgid_" || substr($l,0,7)=="msgstr[" )$ink = False;;
if ($ink) {
$k .= trim($l,"\"\r\n");
$k = str_replace('\"','"',$k);
}
if (substr($l,0,6)=="msgid "){
$arr=False;
$k = str_replace("msgid ","",$l);
if ($k != '""' ) {
$k = trim($k,"\"\r\n");
$k = str_replace('\"','"',$k);
} else {
$k = "";
}
$ink = True;
}
$out .= $l;
}
//echo $out;
file_put_contents($pofile, $out);
?>

103
util/po2php.php Normal file
View file

@ -0,0 +1,103 @@
<?php
function po2php_run($argv, $argc) {
if ($argc!=2) {
print "Usage: ".$argv[0]." <file.po>\n\n";
return;
}
$pofile = $argv[1];
$outfile = dirname($pofile)."/strings.php";
if (!file_exists($pofile)){
print "Unable to find '$pofile'\n";
return;
}
print "Out to '$outfile'\n";
$out="<?php\n\n";
$infile = file($pofile);
$k="";
$v="";
$arr = False;
$ink = False;
$inv = False;
foreach ($infile as $l) {
$len = strlen($l);
if ($l[0]=="#") $l="";
if (substr($l,0,15)=='"Plural-Forms: '){
$match=Array();
preg_match("|nplurals=([0-9]*); plural=(.*);|", $l, $match);
$cond = str_replace('n','$n',$match[2]);
$out .= 'function string_plural_select($n){'."\n";
$out .= ' return '.$cond.';'."\n";
$out .= '}'."\n";
}
if ($k!="" && substr($l,0,7)=="msgstr "){
if ($ink) { $ink = False; $out .= '$a->strings["'.$k.'"] = '; }
if ($inv) { $inv = False; $out .= '"'.$v.'"'; }
$v = substr($l,8,$len-10);
$inv = True;
//$out .= $v;
}
if ($k!="" && substr($l,0,7)=="msgstr["){
if ($ink) { $ink = False; $out .= '$a->strings["'.$k.'"] = '; }
if ($inv) { $inv = False; $out .= '"'.$v.'"'; }
if (!$arr) {
$arr=True;
$out .= "array(\n";
}
$match=Array();
preg_match("|\[([0-9]*)\] (.*)|", $l, $match);
$out .= "\t". $match[1]." => ". $match[2] .",\n";
}
if (substr($l,0,6)=="msgid_") { $ink = False; $out .= '$a->strings["'.$k.'"] = '; };
if ($ink) {
$k .= trim($l,"\"\r\n");
//$out .= '$a->strings['.$k.'] = ';
}
if (substr($l,0,6)=="msgid "){
if ($inv) { $inv = False; $out .= '"'.$v.'"'; }
if ($k!="") $out .= $arr?");\n":";\n";
$arr=False;
$k = str_replace("msgid ","",$l);
if ($k != '""' ) {
$k = trim($k,"\"\r\n");
} else {
$k = "";
}
$ink = True;
}
if ($inv && substr($l,0,6)!="msgstr") {
$v .= trim($l,"\"\r\n");
//$out .= '$a->strings['.$k.'] = ';
}
}
if ($inv) { $inv = False; $out .= '"'.$v.'"'; }
if ($k!="") $out .= $arr?");\n":";\n";
file_put_contents($outfile, $out);
}
if (array_search(__file__,get_included_files())===0){
po2php_run($argv,$argc);
}

36
util/run_xgettext.sh Executable file
View file

@ -0,0 +1,36 @@
#!/bin/bash
FULLPATH=$(dirname $(readlink -f "$0"))
cd "$FULLPATH/../view/en/"
F9KVERSION=$(sed -n "s/.*'FRIENDIKA_VERSION'.*'\([0-9.]*\)'.*/\1/p" ../../boot.php);
echo "Friendika version $F9KVERSION"
OPTS=
OUTFILE="$FULLPATH/messages.po"
if [ "" != "$1" ]
then
OUTFILE="$(readlink -f ${FULLPATH}/$1)"
if [ -e "$OUTFILE" ]
then
echo "join extracted strings"
OPTS="-j"
fi
fi
KEYWORDS="-k -kt -ktt:1,2"
echo "extract strings to $OUTFILE.."
find ../../ -name "*.php" | xargs xgettext $KEYWORDS $OPTS -o "$OUTFILE" --from-code=UTF-8
echo "setup base info.."
sed -i "s/SOME DESCRIPTIVE TITLE./FRIENDIKA Distribuited Social Network/g" "$OUTFILE"
sed -i "s/YEAR THE PACKAGE'S COPYRIGHT HOLDER/2010, 2011 Mike Macgirvin/g" "$OUTFILE"
sed -i "s/FIRST AUTHOR <EMAIL@ADDRESS>, YEAR./Mike Macgirvin, 2010/g" "$OUTFILE"
sed -i "s/PACKAGE VERSION/$F9KVERSION/g" "$OUTFILE"
sed -i "s/PACKAGE/Friendika/g" "$OUTFILE"
sed -i "s/CHARSET/UTF-8/g" "$OUTFILE"
echo "done."

View file

@ -1,4 +1,9 @@
<?php
function string_plural_select($n){
return ($n != 1);
}
$a->strings['Not Found'] = 'Not Found';
$a->strings['Page not found.' ] = 'Page not found.' ;
$a->strings['Permission denied'] = 'Permission denied';
@ -61,30 +66,6 @@ $a->strings['Birthdays this week:'] = 'Birthdays this week:';
$a->strings["\x28Adjusted for local time\x29"] = "\x28Adjusted for local time\x29";
$a->strings['[today]'] = '[today]';
$a->strings['link to source'] = 'link to source';
$a->strings['No recipient selected.'] = 'No recipient selected.';
$a->strings['[no subject]'] = '[no subject]';
$a->strings['Unable to locate contact information.'] = 'Unable to locate contact information.';
$a->strings['Wall Photos'] = 'Wall Photos';
$a->strings['Message sent.'] = 'Message sent.';
$a->strings['Message could not be sent.'] = 'Message could not be sent.';
$a->strings['Messages'] = 'Messages';
$a->strings['Inbox'] = 'Inbox';
$a->strings['Outbox'] = 'Outbox';
$a->strings['New Message'] = 'New Message';
$a->strings['Message deleted.'] = 'Message deleted.';
$a->strings['Conversation removed.'] = 'Conversation removed.';
$a->strings['Send Private Message'] = 'Send Private Message';
$a->strings['To:'] = 'To:';
$a->strings['Subject:'] = 'Subject:';
$a->strings['Your message:'] = 'Your message:';
$a->strings['Upload photo'] = 'Upload photo';
$a->strings['Insert web link'] = 'Insert web link';
$a->strings['Please wait'] = 'Please wait';
$a->strings['No messages.'] = 'No messages.';
$a->strings['Delete conversation'] = 'Delete conversation';
$a->strings['Message not available.'] = 'Message not available.';
$a->strings['Delete message'] = 'Delete message';
$a->strings['Send Reply'] = 'Send Reply';
$a->strings['Applications'] = 'Applications';
$a->strings["Invite Friends"] = "Invite Friends";
$a->strings['Connect/Follow'] = 'Connect/Follow';
@ -97,8 +78,10 @@ $a->strings['Failed to update contact record.'] = 'Failed to update contact reco
$a->strings['Contact has been '] = 'Contact has been ';
$a->strings['blocked'] = 'blocked';
$a->strings['unblocked'] = 'unblocked';
$a->strings['ignored'] = 'ignored';
$a->strings['unignored'] = 'unignored';
$a->strings['Contact has been blocked'] = 'Contact has been blocked';
$a->strings['Contact has been unblocked'] = 'Contact has been unblocked';
$a->strings['Contact has been ignored'] = 'Contact has been ignored';
$a->strings['Contact has been unignored'] = 'Contact has been unignored';
$a->strings['stopped following'] = 'stopped following';
$a->strings['Contact has been removed.'] = 'Contact has been removed.';
$a->strings['Contact not found.'] = 'Contact not found.';
@ -126,8 +109,7 @@ $a->strings['Show Blocked Connections'] = 'Show Blocked Connections';
$a->strings['Hide Blocked Connections'] = 'Hide Blocked Connections';
$a->strings['Finding: '] = 'Finding: ';
$a->strings['Find'] = 'Find';
$a->strings['Visit '] = 'Visit ';
$a->strings['\'s profile'] = '\'s profile';
$a->strings['Visit $username\'s profile'] = 'Visit $username\'s profile';
$a->strings['Edit contact'] = 'Edit contact';
$a->strings['Profile not found.'] = 'Profile not found.';
$a->strings['Response from remote site was not understood.'] = 'Response from remote site was not understood.';
@ -138,43 +120,38 @@ $a->strings["Temporary failure. Please wait and try again."] = "Temporary failur
$a->strings["Introduction failed or was revoked."] = "Introduction failed or was revoked.";
$a->strings['Unable to set contact photo.'] = 'Unable to set contact photo.';
$a->strings['is now friends with'] = 'is now friends with';
$a->strings['No user record found for '] = 'No user record found for ';
$a->strings['Our site encryption key is apparently messed up.'] = 'Our site encryption key is apparently messed up.';
$a->strings['Empty site URL was provided or URL could not be decrypted by us.'] = 'Empty site URL was provided or URL could not be decrypted by us.';
$a->strings['Contact record was not found for you on our site.'] = 'Contact record was not found for you on our site.';
$a->strings['The ID provided by your system is a duplicate on our system. It should work if you try again.'] = 'The ID provided by your system is a duplicate on our system. It should work if you try again.';
$a->strings['Unable to set your contact credentials on our system.'] = 'Unable to set your contact credentials on our system.';
$a->strings['Unable to update your contact profile details on our system'] = 'Unable to update your contact profile details on our system';
$a->strings["Connection accepted at "] = "Connection accepted at ";
$a->strings['Administrator'] = 'Administrator';
$a->strings['noreply'] = 'noreply';
$a->strings[' commented on an item at '] = ' commented on an item at ';
$a->strings[" commented on an item at "] = " commented on an item at ";
$a->strings[' welcomes '] = ' welcomes ';
$a->strings["%s commented on an item at %s"] = "%s commented on an item at %s";
$a->strings["From: Administrator@"] = "From: Administrator@";
$a->strings['%s welcomes %s'] = '%s welcomes %s';
$a->strings["This introduction has already been accepted."] = "This introduction has already been accepted.";
$a->strings['Profile location is not valid or does not contain profile information.'] = 'Profile location is not valid or does not contain profile information.';
$a->strings['Warning: profile location has no identifiable owner name.'] = 'Warning: profile location has no identifiable owner name.';
$a->strings['Warning: profile location has no profile photo.'] = 'Warning: profile location has no profile photo.';
$a->strings[' required parameter'] = ' required parameter';
$a->strings[" was "] = " was ";
$a->strings["s were "] = "s were ";
$a->strings["not found at the given location."] = "not found at the given location.";
$a->strings["Introduction complete."] = "Introduction complete.";
$a->strings['Unrecoverable protocol error.'] = 'Unrecoverable protocol error.';
$a->strings['Profile unavailable.'] = 'Profile unavailable.';
$a->strings[' has received too many connection requests today.'] = ' has received too many connection requests today.';
$a->strings['%s has received too many connection requests today.'] = '%s has received too many connection requests today.';
$a->strings['Spam protection measures have been invoked.'] = 'Spam protection measures have been invoked.';
$a->strings['Friends are advised to please try again in 24 hours.'] = 'Friends are advised to please try again in 24 hours.';
$a->strings["Invalid locator"] = "Invalid locator";
$a->strings["Unable to resolve your name at the provided location."] = "Unable to resolve your name at the provided location.";
$a->strings['You have already introduced yourself here.'] = 'You have already introduced yourself here.';
$a->strings['Apparently you are already friends with .'] = 'Apparently you are already friends with .';
$a->strings['Apparently you are already friends with %s.'] = 'Apparently you are already friends with %s.';
$a->strings['Invalid profile URL.'] = 'Invalid profile URL.';
$a->strings['Disallowed profile URL.'] = 'Disallowed profile URL.';
$a->strings['Your introduction has been sent.'] = 'Your introduction has been sent.';
$a->strings["Please login to confirm introduction."] = "Please login to confirm introduction.";
$a->strings["Incorrect identity currently logged in. Please login to <strong>this</strong> profile."] = "Incorrect identity currently logged in. Please login to <strong>this</strong> profile.";
$a->strings['[Name Withheld]'] = '[Name Withheld]';
$a->strings["Introduction received at "] = "Introduction received at ";
$a->strings['Friend/Connection Request'] = 'Friend/Connection Request';
$a->strings['Please answer the following:'] = 'Please answer the following:';
$a->strings['Does $name know you?'] = 'Does $name know you?';
@ -189,11 +166,16 @@ $a->strings["Public \x28insecure\x29 network"] = "Public \x28insecure\x29 networ
$a->strings['Your profile address:'] = 'Your profile address:';
$a->strings['Submit Request'] = 'Submit Request';
$a->strings['Cancel'] = 'Cancel';
$a->strings["%d required parameter was not found at the given location"] = array(
0 => "%d required parameter was not found at the given location",
1 => "%d required parameters were not found at the given location",
);
$a->strings['Global Directory'] = 'Global Directory';
$a->strings['Item not found.'] = 'Item not found.';
$a->strings['Private Message'] = 'Private Message';
$a->strings["I like this \x28toggle\x29"] = "I like this \x28toggle\x29";
$a->strings["I don't like this \x28toggle\x29"] = "I don't like this \x28toggle\x29";
$a->strings['Please wait'] = 'Please wait';
$a->strings['This is you'] = 'This is you';
$a->strings['Delete'] = 'Delete';
$a->strings['View $name\'s profile'] = 'View $name\'s profile';
@ -203,8 +185,6 @@ $a->strings['Wall-to-Wall'] = 'Wall-to-Wall';
$a->strings['via Wall-To-Wall:'] = 'via Wall-To-Wall:';
$a->strings['Item has been removed.'] = 'Item has been removed.';
$a->strings['Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.'] = 'Shared content is covered by the <a href="http://creativecommons.org/licenses/by/3.0/">Creative Commons Attribution 3.0</a> license.';
$a->strings['CC: email addresses'] = 'CC: email addresses';
$a->strings['Example: bob@example.com, mary@example.com'] = 'Example: bob@example.com, mary@example.com';
$a->strings['The profile address specified does not provide adequate information.'] = 'The profile address specified does not provide adequate information.';
$a->strings['Limited profile. This person will be unable to receive direct/personal notifications from you.'] = 'Limited profile. This person will be unable to receive direct/personal notifications from you.';
$a->strings['Unable to retrieve contact information.'] = 'Unable to retrieve contact information.';
@ -216,7 +196,7 @@ $a->strings['Group name changed.'] = 'Group name changed.';
$a->strings['Membership list updated.'] = 'Membership list updated.';
$a->strings['Group removed.'] = 'Group removed.';
$a->strings['Unable to remove group.'] = 'Unable to remove group.';
$a->strings["Welcome to "] = "Welcome to ";
$a->strings["Welcome to %s"] = "Welcome to %s";
$a->strings['Could not create/connect to database.'] = 'Could not create/connect to database.';
$a->strings['Connected to database.'] = 'Connected to database.';
$a->strings['Database import succeeded.'] = 'Database import succeeded.';
@ -243,38 +223,60 @@ $a->strings['Please check with your site documentation or support people to see
$a->strings['If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.'] = 'If not, you may be required to perform a manual installation. Please see the file "INSTALL.txt" for instructions.';
$a->strings['The database configuration file ".htconfig.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.'] = 'The database configuration file ".htconfig.php" could not be written. Please use the enclosed text to create a configuration file in your web server root.';
$a->strings['Errors encountered creating database tables.'] = 'Errors encountered creating database tables.';
$a->strings[' : '] = ' : ';
$a->strings['Not a valid email address.'] = 'Not a valid email address.';
$a->strings['Please join my network on '] = 'Please join my network on ';
$a->strings['Message delivery failed.'] = 'Message delivery failed.';
$a->strings[' messages sent.'] = ' messages sent.';
$a->strings['%s : Not a valid email address.'] = '%s : Not a valid email address.';
$a->strings['%s : Message delivery failed.'] = '%s : Message delivery failed.';
$a->strings['Send invitations'] = 'Send invitations';
$a->strings['Enter email addresses, one per line:'] = 'Enter email addresses, one per line:';
$a->strings['Please join my social network on '] = 'Please join my social network on ';
$a->strings['Your message:'] = 'Your message:';
$a->strings['To accept this invitation, please visit:'] = 'To accept this invitation, please visit:';
$a->strings['Once you have registered, please connect with me via my profile page at:'] = 'Once you have registered, please connect with me via my profile page at:';
$a->strings["%d message sent."] = array(
0 => "%d message sent.",
1 => "%d messages sent.",
);
$a->strings['Unable to locate original post.'] = 'Unable to locate original post.';
$a->strings['Empty post discarded.'] = 'Empty post discarded.';
$a->strings[" commented on your item at "] = " commented on your item at ";
$a->strings[" posted on your profile wall at "] = " posted on your profile wall at ";
$a->strings['Wall Photos'] = 'Wall Photos';
$a->strings["%s commented on your item at %s"] = "%s commented on your item at %s";
$a->strings["Administrator"] = "Administrator";
$a->strings["%s posted on your profile wall at %s"] = "%s posted on your profile wall at %s";
$a->strings["Administrator@"] = "Administrator@";
$a->strings['System error. Post not saved.'] = 'System error. Post not saved.';
$a->strings['This message was sent to you by '] = 'This message was sent to you by ';
$a->strings[', a member of the Friendika social network.'] = ', a member of the Friendika social network.';
$a->strings['You may visit them online at'] = 'You may visit them online at';
$a->strings['Please contact the sender by replying to this post if you do not wish to receive these messages.'] = 'Please contact the sender by replying to this post if you do not wish to receive these messages.';
$a->strings['posted an update.'] = 'posted an update.';
$a->strings['%s posted an update.'] = '%s posted an update.';
$a->strings['photo'] = 'photo';
$a->strings['status'] = 'status';
$a->strings['likes'] = 'likes';
$a->strings['doesn\'t like'] = 'doesn\'t like';
$a->strings['\'s'] = '\'s';
$a->strings["%s's"] = "%s's";
$a->strings['Remote privacy information not available.'] = 'Remote privacy information not available.';
$a->strings['Visible to:'] = 'Visible to:';
$a->strings['Password reset requested at '] = 'Password reset requested at ';
$a->strings["Welcome back "] = "Welcome back ";
$a->strings["Welcome back %s"] = "Welcome back %s";
$a->strings['Manage Identities and/or Pages'] = 'Manage Identities and/or Pages';
$a->strings["\x28Toggle between different identities or community/group pages which share your account details.\x29"] = "\x28Toggle between different identities or community/group pages which share your account details.\x29";
$a->strings['Select an identity to manage: '] = 'Select an identity to manage: ';
$a->strings['No recipient selected.'] = 'No recipient selected.';
$a->strings['[no subject]'] = '[no subject]';
$a->strings['Unable to locate contact information.'] = 'Unable to locate contact information.';
$a->strings['Message sent.'] = 'Message sent.';
$a->strings['Message could not be sent.'] = 'Message could not be sent.';
$a->strings['Messages'] = 'Messages';
$a->strings['Inbox'] = 'Inbox';
$a->strings['Outbox'] = 'Outbox';
$a->strings['New Message'] = 'New Message';
$a->strings['Message deleted.'] = 'Message deleted.';
$a->strings['Conversation removed.'] = 'Conversation removed.';
$a->strings['Send Private Message'] = 'Send Private Message';
$a->strings['To:'] = 'To:';
$a->strings['Subject:'] = 'Subject:';
$a->strings['Upload photo'] = 'Upload photo';
$a->strings['Insert web link'] = 'Insert web link';
$a->strings['No messages.'] = 'No messages.';
$a->strings['Delete conversation'] = 'Delete conversation';
$a->strings['Message not available.'] = 'Message not available.';
$a->strings['Delete message'] = 'Delete message';
$a->strings['Send Reply'] = 'Send Reply';
$a->strings['Normal View'] = 'Normal View';
$a->strings['New Item View'] = 'New Item View';
$a->strings['Share'] = 'Share';
@ -282,6 +284,8 @@ $a->strings['Insert YouTube video'] = 'Insert YouTube video';
$a->strings['Set your location'] = 'Set your location';
$a->strings['Clear browser location'] = 'Clear browser location';
$a->strings['Permission settings'] = 'Permission settings';
$a->strings['CC: email addresses'] = 'CC: email addresses';
$a->strings['Example: bob@example.com, mary@example.com'] = 'Example: bob@example.com, mary@example.com';
$a->strings['No such group'] = 'No such group';
$a->strings['Group is empty'] = 'Group is empty';
$a->strings['Group: '] = 'Group: ';
@ -304,6 +308,7 @@ $a->strings['Approve'] = 'Approve';
$a->strings['No notifications.'] = 'No notifications.';
$a->strings['No registrations.'] = 'No registrations.';
$a->strings['Login failed.'] = 'Login failed.';
$a->strings["Welcome back "] = "Welcome back ";
$a->strings['Photo Albums'] = 'Photo Albums';
$a->strings['Contact Photos'] = 'Contact Photos';
$a->strings['Contact information unavailable'] = 'Contact information unavailable';
@ -336,12 +341,8 @@ $a->strings['Recent Photos'] = 'Recent Photos';
$a->strings['Upload New Photos'] = 'Upload New Photos';
$a->strings['View Album'] = 'View Album';
$a->strings['Image uploaded but image cropping failed.'] = 'Image uploaded but image cropping failed.';
$a->strings['Image size reduction [175] failed.'] = 'Image size reduction [175] failed.';
$a->strings['Image size reduction [80] failed.'] = 'Image size reduction [80] failed.';
$a->strings['Image size reduction [48] failed.'] = 'Image size reduction [48] failed.';
$a->strings['Unable to process image'] = 'Unable to process image';
$a->strings['Image uploaded successfully.'] = 'Image uploaded successfully.';
$a->strings['Image size reduction [640] failed.'] = 'Image size reduction [640] failed.';
$a->strings['Profile Name is required.'] = 'Profile Name is required.';
$a->strings['Profile updated.'] = 'Profile updated.';
$a->strings['Profile deleted.'] = 'Profile deleted.';
@ -357,17 +358,16 @@ $a->strings['Please use a shorter name.'] = 'Please use a shorter name.';
$a->strings['Name too short.'] = 'Name too short.';
$a->strings["That doesn\'t appear to be your full \x28First Last\x29 name."] = "That doesn\'t appear to be your full \x28First Last\x29 name.";
$a->strings['Your email domain is not among those allowed on this site.'] = 'Your email domain is not among those allowed on this site.';
$a->strings['Not a valid email address.'] = 'Not a valid email address.';
$a->strings['Cannot use that email.'] = 'Cannot use that email.';
$a->strings['Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.'] = 'Your "nickname" can only contain "a-z", "0-9", "-", and "_", and must also begin with a letter.';
$a->strings['Nickname is already registered. Please choose another.'] = 'Nickname is already registered. Please choose another.';
$a->strings['SERIOUS ERROR: Generation of security keys failed.'] = 'SERIOUS ERROR: Generation of security keys failed.';
$a->strings['An error occurred during registration. Please try again.'] = 'An error occurred during registration. Please try again.';
$a->strings['An error occurred creating your default profile. Please try again.'] = 'An error occurred creating your default profile. Please try again.';
$a->strings['Registration details for '] = 'Registration details for ';
$a->strings['Registration successful. Please check your email for further instructions.'] = 'Registration successful. Please check your email for further instructions.';
$a->strings['Failed to send email message. Here is the message that failed.'] = 'Failed to send email message. Here is the message that failed.';
$a->strings['Your registration can not be processed.'] = 'Your registration can not be processed.';
$a->strings['Registration request at '] = 'Registration request at ';
$a->strings['Your registration is pending approval by the site owner.'] = 'Your registration is pending approval by the site owner.';
$a->strings["You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'."] = "You may \x28optionally\x29 fill in this form via OpenID by supplying your OpenID and clicking 'Register'.";
$a->strings['If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.'] = 'If you are not familiar with OpenID, please leave that field blank and fill in the rest of the items.';
@ -380,7 +380,6 @@ $a->strings['Your Email Address: '] = 'Your Email Address: ';
$a->strings['Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.'] = 'Choose a profile nickname. This must begin with a text character. Your profile address on this site will then be \'<strong>nickname@$sitename</strong>\'.';
$a->strings['Choose a nickname: '] = 'Choose a nickname: ';
$a->strings['Please login.'] = 'Please login.';
$a->strings['Registration revoked for '] = 'Registration revoked for ';
$a->strings['Account approved.'] = 'Account approved.';
$a->strings['Remove My Account'] = 'Remove My Account';
$a->strings['This will completely remove your account. Once this has been done it is not recoverable.'] = 'This will completely remove your account. Once this has been done it is not recoverable.';
@ -509,6 +508,7 @@ $a->strings['Facebook API key is missing.'] = 'Facebook API key is missing.';
$a->strings['Facebook Connect'] = 'Facebook Connect';