Compare commits

..

39 Commits

Author SHA1 Message Date
David Goodwin 94fff02d39 fix MailboxHandler -> adding mailbox with empty quota field 4 years ago
David Goodwin e7ebc6667e update INSTALL.TXT - see also #349 4 years ago
David Goodwin 82f9db0535 composer format 4 years ago
David Goodwin d25632cc6e see: https://github.com/postfixadmin/postfixadmin/issues/347 - really patch MailboxHandler::storemore() ... 4 years ago
David Goodwin f7708520b3 postfixadmin 3.2.4 changelog 4 years ago
David Goodwin 1b517a72ff bump Smarty to v3.1.35 4 years ago
David Goodwin b3e5514709 merge: 338fb8c564 from master - see https://github.com/postfixadmin/postfixadmin/issues/347 and https://github.com/postfixadmin/postfixadmin/issues/342 4 years ago
David Goodwin 62eac78541 cope with password_validation not being in config 4 years ago
David Goodwin b4013d1166 add missing multiplier retrieval from config! - see #65 4 years ago
David Goodwin 52e639f1fc check quota_multiplier is numeric, else set it to 1; see: https://github.com/postfixadmin/postfixadmin/issues/65 - backport patch from master (not a clean cherry-pick) 4 years ago
David Goodwin c65a99ce2d change row to r everywhere; see : https://sourceforge.net/p/postfixadmin/discussion/676076/thread/616c1d25/?limit=25#7da0 - hopefully removing "row" which might be a reserved keyword for some databases etc 5 years ago
David Goodwin 938d71758a drop php 7.3 build (composer moaning); change travis badge to 3.2 branch in README.md 5 years ago
David Goodwin 88a975c640 update CHANGELOG - 3.2.3 release 5 years ago
David Goodwin e7d736aae4 see: https://github.com/postfixadmin/postfixadmin/issues/302 - check if the session key exists; and if not show something that may help 5 years ago
David Goodwin 5731742fd6 update Smarty to v3.1.33 - "This release does cover security issue CVE-2018-16831, other bug fixes (see changelog.txt) and adds a new feature of the {capture} tag (see NEW_FEATURES.txt)." 5 years ago
David Goodwin 7697bee2af remove windows code; remove array_merge (seems to just break parsing) 5 years ago
Lars Liedtke c208d63917 Update postfixadmin-cli
Make this script platform independent to be usable under e.g. FreeBSD, where bash is located in /usr/local/bin/bash and thus the script fails.
5 years ago
David Goodwin c03a42e327 try and avoid hitting : https://github.com/postfixadmin/postfixadmin/issues/51 5 years ago
David Goodwin 5e5e4a1c9b fix var quoting 5 years ago
David Goodwin fb671e6166 fix page browser test for sqlite; see #87 and #161
(not tests/CreatePageBrowserTest.php)
5 years ago
David Goodwin f9fd24aecd use PHP date for comparison - see #254 and https://sourceforge.net/p/postfixadmin/discussion/676076/thread/70ed9843c0/?limit=25#685c and #240 5 years ago
Filippo Tessarotto c08973f54a [Travis] Build also against PHP 7.3 5 years ago
David Goodwin 2181c24db4 remove quotes around table name which is not necessary as table_by_key does this 5 years ago
David Goodwin ae37943ca4
Merge pull request #242 from froonix/mysqli-persistent-ssl-bugfix
[v3.2] Persistent MySQLi connections: Missing SSL at reconnect
5 years ago
Christian Schrötter ce65c48238
Fix missing SSL at persistent MySQLi reconnect 5 years ago
David Goodwin 477ede0175 stop undefined index errors with show_vacation and show_disabled 5 years ago
David Goodwin d9326a1f38 remove show_expired code from 3.2 branch - see #235 5 years ago
David Goodwin 3ce5efacb1 php 5.6 is EOLed; I am sceptical there is any point spending time fixing travis to make it work 5 years ago
David Goodwin 006b622db9 reduce testing to just linting 5 years ago
David Goodwin 54cb34cceb Update CHANGELOG with 3.2 changes (3.2.1 release) 5 years ago
David Goodwin bdbce9ebe5 fix sql for notification resend; see #226 5 years ago
David Goodwin 9d31639eef fix postgresql compatability - see #227 5 years ago
Luca 885bad949d Fix for MySQL 8
The keyword ROW became reserved in MySQL 8.0.2
https://dev.mysql.com/doc/refman/8.0/en/keywords.html#keywords-8-0-detailed-R
5 years ago
David Goodwin 96d64d9317 try and fix #30 - cope with timestamp and numeric field number comparison better for PostgreSQL. 6 years ago
David Goodwin 8196a063a5 add Date header into smtp_from(...) function - see #203 6 years ago
David Goodwin b71aee3504 remove windows code; remove array_merge (seems to just break parsing) 6 years ago
David Goodwin 31c5e6dd2e try and fix #177 (add missing fields to sqlite db) 6 years ago
David Goodwin 57714adc00 make phar loading optional depending on the extension being present or not 6 years ago
David Goodwin ceb261036a possible fix for sqlite schema/upgrade issues; see #177 and and #176 6 years ago

@ -1,34 +0,0 @@
name: GitHubBuild
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Validate composer.json and composer.lock
run: composer validate
- name: setup templates_c
run: mkdir templates_c || true
- name: touch config.local.php
run: touch config.local.php && php -v
- name: Install dependencies
run: composer install --prefer-dist --no-progress --no-suggest
- name: Build/test
run: composer build
- name: setup coveralls
run: mkdir -p build/logs || true
- name: Coveralls
run: vendor/bin/coveralls ./clover.xml || true
env:
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}

2
.gitignore vendored

@ -3,5 +3,3 @@
/templates_c/*menu.conf.php
/vendor/
/.php_cs.cache
/.idea
/composer.lock

@ -1,32 +1,17 @@
language: php
php:
- 7.0
- 7.1
- 7.2
- 7.3
- 7.4
services:
- mysql
- postgresql
cache:
directories:
- vendor
- $HOME/.composer/cache
- $HOME/vendor
before_install:
- mysql -e 'CREATE DATABASE postfixadmin;'
- psql -c 'create database postfixadmin;' -U postgres
before_script:
- travis_retry composer install --no-interaction --prefer-source --dev
- mkdir -p build/logs
- composer install
script:
- composer build
- DATABASE=sqlite vendor/bin/phpunit tests/
- DATABASE=mysql vendor/bin/phpunit --coverage-clover=build/logs/clover.xml tests/
- DATABASE=postgresql vendor/bin/phpunit tests/
- composer lint
after_success:
- travis_retry php vendor/bin/php-coveralls

@ -26,15 +26,6 @@ our $db_username="mail";
# database password
our $db_password="CHANGE_ME!";
# Where to create a lockfile; please ensure path exists.
our $run_dir="/var/lock/fetchmail";
# in case you want to use dovecot deliver to put the mail directly into the users mailbox,
# set "mda" in the fetchmail table to the keyword "dovecot".
# Where the delivery binary is located
$dovecot_deliver = "/usr/lib/dovecot/deliver";
# instead of changing this script, you can put your settings to /etc/mail/postfixadmin/fetchmail.conf
# just use perl syntax there to fill the variables listed above (without the "our" keyword). Example:
# $db_username = 'mail';
@ -49,7 +40,7 @@ if (-f "/etc/mail/postfixadmin/fetchmail.conf") {
openlog("fetchmail-all", "pid", "mail");
sub log_and_die {
my($message) = @_;
my($message) = @_;
syslog("err", $message);
die $message;
}
@ -68,6 +59,8 @@ while ($_ = shift @ARGS1) {
}
}
$run_dir="/var/run/fetchmail";
# use specified config file
if (-e $configfile) {
do $configfile;
@ -79,10 +72,6 @@ if($db_type eq "Pg" || $db_type eq "mysql") {
log_and_die "unsupported db_type $db_type";
}
if(!-d $run_dir) {
log_and_die("Please create: $run_dir");
}
$lock_file=$run_dir . "/fetchmail-all.lock";
$lockmgr = LockFile::Simple->make(-autoclean => 1, -max => 1);
@ -111,14 +100,7 @@ map{
$cmd="user '${src_user}' there with password '".decode_base64($src_password)."'";
$cmd.=" folder '${src_folder}'" if ($src_folder);
if ($mda) {
if ($mda eq "dovecot") {
$cmd.=" mda \"${dovecot_deliver} -d ${mailbox}\" ";
} else {
$cmd.=" mda ".$mda
}
}
$cmd.=" mda ".$mda if ($mda);
# $cmd.=" mda \"/usr/local/libexec/dovecot/deliver -m ${mailbox}\"";
$cmd.=" is '${mailbox}' here";
@ -138,11 +120,10 @@ set no spambounce
set properties ""
set syslog
TXT
$text.="poll ${src_server} with proto ${protocol}";
$text.=" service ${src_port}" if ($src_port);
$text.="\n $cmd";
poll ${src_server} with proto ${protocol}
$cmd
TXT
($file_handler, $filename) = mkstemp( "/tmp/fetchmail-all-XXXXX" ) or log_and_die "cannot open/create fetchmail temp file";
print $file_handler $text;

@ -52,17 +52,7 @@ if [ -e "$maildir" ]; then
exit 1
fi
# try looking for maildirmake ...
MDM=`which maildirmake || which courier-maildirmake`
if [ "x${MDM}" = "x" ]; then
echo "Couldn't find maildirmake or courier-maildirmake in your PATH etc (via which)" >/dev/stderr
exit 1
fi
"${MDM}" "${maildir}"
maildirmake "$maildir"
if [ ! -d "$maildir" ]; then
echo "$0: maildirmake didn't produce a directory; bailing out."
exit 1

@ -12,27 +12,14 @@ chdir("..");
if (!defined('SM_PATH')) {
define('SM_PATH', '../');
}
$config_file = dirname(__FILE__ ) . '/config.php';
$validate_file = dirname(__FILE__) . '/../include/validate.php';
if (!file_exists($config_file)) {
die("$config_file is missing");
}
include_once($config_file);
include_once(dirname(__FILE__) . '/config.php');
include_once(dirname(__FILE__) . '/functions.inc.php');
if (file_exists($validate_file)) {
include_once($validate_file);
include_if_exists(dirname(__FILE__) . '/../include/validate.php');
if (file_exists(dirname(__FILE__) . '/../include/validate.php')) {
include_once(dirname(__FILE__) . '/include/validate.php');
} else {
$validate_file = SM_PATH . '/src/validate.php';
if (file_exists($validate_file)) {
include_once($validate_file);
}
include_if_exists(SM_PATH . 'src/validate.php');
}
include_once(SM_PATH . 'functions/page_header.php');
include_once(SM_PATH . 'functions/display_messages.php');
include_once(SM_PATH . 'functions/imap.php');

@ -43,7 +43,7 @@ if ($_SERVER['REQUEST_METHOD'] == "POST") {
unset($array[$key]);
continue;
}
if (check_email($email_address) != "") {
if (!check_email($email_address)) {
$error = 1;
$tGoto = $goto;
bindtextdomain('postfixadmin', SM_PATH . 'plugins/postfixadmin/locale');

@ -1,8 +1,5 @@
<?php
// vim:ts=4:sw=4:et
if (!defined('SM_PATH')) {
die("Invalid internal state (don't access file directly)");
}
include_once(SM_PATH . 'functions/i18n.php');
function squirrelmail_plugin_init_postfixadmin() {

@ -110,7 +110,7 @@ $conx = mysqli_connect($CONF['database_host'], $CONF['database_user'], $CONF['da
// Is there a problem connecting?
//
if (! $conx || mysqli_connect_errno()) {
echo "DB connection failed." . mysqli_connect_error() . "\n";
var_dump("DB connection failed." . mysqli_connect_error());
die("Problem connecting to the database. ");
}

@ -6,25 +6,33 @@
#
# Further details on the project are available at http://postfixadmin.sf.net
Version X.X - master
Version 3.2.4 - 2020/04/17
-------------------------------------------------
- Improve vacation.pl (better utf-8 support)
- Improve DB connections (PDO, SSL)
- Add sha512.b64 password hash support (see https://github.com/postfixadmin/postfixadmin/issues/58)
- Add support for password expiration (see https://github.com/postfixadmin/postfixadmin/pull/200 and README.password_expiration )
- Improve ADDITIONS/postfixadmin-mailbox-postcreate.sh
- Add Date header into smtp_from() (see https://github.com/postfixadmin/postfixadmin/issues/203 )
- PostgreSQL fixes ( 1e158245d613fd1d8d5c1d59e26e940eb71f5b32 )
- vacation.pl fixes (perl libraries; see https://github.com/postfixadmin/postfixadmin/pull/194 )
- Add bootstrap theme (default not changed yet) ( see https://github.com/postfixadmin/postfixadmin/pull/172 )
- Improve CSV export from list.php
- Various misc. changes from static analysis (psalm)
- Update installation instructions. (see: https://github.com/postfixadmin/postfixadmin/issues/189 https://github.com/postfixadmin/postfixadmin/issues/188 )
- Encryption improvements (see: php_crypt / encrypt_difficulty in sample config)
- Sqlite improvements (see https://github.com/postfixadmin/postfixadmin/issues/177 and https://github.com/postfixadmin/postfixadmin/issues/176 )
- MySQL 8 compatibility (see https://github.com/postfixadmin/postfixadmin/pull/175 )
- Internally the database functions have been refactored to use PDO rather than the lower level mysql_, mysqli_, pg_ etc functions. ( see: https://github.com/postfixadmin/postfixadmin/pull/231 )
- Usage of dovecot deliver as fetchmail mda
- Upgrade Smarty (v3.1.35), see https://github.com/smarty-php/smarty/releases/tag/v3.1.35
- Fix issues with quota (cli mailbox creation)
- Improve database compatability (row->r).
Version 3.2.3 - 2019/09/26
-------------------------------------------------
- Upgrade Smarty (v3.1.33, upstream security fix), see https://github.com/postfixadmin/postfixadmin/commit/907bd7ee4632f87aec723e709e198bbf48ab6fbe
- Fix SQLite paging issues, see https://github.com/postfixadmin/postfixadmin/issues/161 and https://github.com/postfixadmin/postfixadmin/issues/87
- Fix postfixadmin-cli, see https://github.com/postfixadmin/postfixadmin/issues/296
Version 3.2.2 - 2019/02/09
-------------------------------------------------
- Fix MySQLi + SSL support ( ae37943ca42b4cc77b53d6e76cc88dd85c45cc17 )
Version 3.2.1 - 2019/01/12
-------------------------------------------------
- Merge fix for notification resend (vacation.pl) - see https://github.com/postfixadmin/postfixadmin/issues/226
- Improve PostgreSQL compatability - see https://github.com/postfixadmin/postfixadmin/issues/228
- Improve MySQL 8 support - see https://github.com/postfixadmin/postfixadmin/pull/232 and https://github.com/postfixadmin/postfixadmin/pull/175
- Improve SQLite support - see https://github.com/postfixadmin/postfixadmin/issues/176 and https://github.com/postfixadmin/postfixadmin/issues/177
- Remove hard dependency on Phar support ( see https://github.com/postfixadmin/postfixadmin/commit/57714adc00661a81d42287f07d7bbcf8caa44336 )
Version 3.2 - 2018/05/02
-------------------------------------------------

@ -62,7 +62,7 @@ ssl_key = </etc/dovecot/private/dovecot.pem
# login is for outlook express smtpd auth
auth_mechanisms = plain login
# If you're having trouble, try uncommenting these:
# If you're having trouble, try uncommenting these :
#auth_debug = yes
#auth_debug_passwords = yes
@ -77,7 +77,7 @@ passdb {
}
# Uncomment this if you want Postfix to be able to do smtpd auth through dovecot
# At a minimum Postfix probably needs smtpd_sasl_type = dovecot
# At a minimum Postfix probably needs : smtpd_sasl_type = dovecot
# And additionally: smtpd_sasl_path = private/auth
#service auth {
# unix_listener /var/spool/postfix/private/auth {
@ -126,12 +126,14 @@ default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
# Query to retrieve user information, note uid matches dovecot.conf AND Postfix virtual_uid_maps parameter.
# MYSQL:
user_query = SELECT maildir, 1001 AS uid, 1001 AS gid FROM mailbox WHERE username = '%u' AND active='1'
# MYSQL :
user_query = SELECT CONCAT('/var/mail/vmail/', maildir) AS home, 1001 AS uid, 1001 AS gid,
CONCAT('*:bytes=', quota) AS quota_rule FROM mailbox WHERE username = '%u' AND active='1'
# PostgreSQL:
# user_query = SELECT '/var/mail/vmail/' || maildir AS home, 1001 AS uid, 1001 AS gid,
# '*:bytes=' || quota AS quota_rule FROM mailbox WHERE username = '%u' AND active = '1'
# PostgreSQL : (no Quota though) :
# user_query = SELECT '/var/vmail/mail/' || maildir AS home, 1001 as uid, 1001 as gid FROM mailbox WHERE username = '%u' AND active = '1'
#END /etc/dovecot/dovecot-sql.conf
@ -150,7 +152,7 @@ Add to dovecot.conf:
## IMAP quota
protocol imap {
mail_plugins = quota
quota = dict:storage=200000 proxy::quota
}
## POP quota
@ -177,15 +179,13 @@ quota = dict:storage=200000 proxy::quota
Change dovecot-sql.conf to return quota values:
for MySQL:
user_query = SELECT maildir, 1001 AS uid, 1001 AS gid, CONCAT('dict:storage=',floor(quota/1000),' ::proxy::quota') as quota FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT maildir, 1001 AS uid, 1001 AS gid, CONCAT('dict:storage=',floor(quota/1000),' proxy::quota') as quota FROM mailbox WHERE username = '%u' AND active='1'
for PostgreSQL:
user_query = SELECT maildir, 1001 AS uid, 1001 AS gid, 'dict:storage=' || floor(quota/1000) || '::proxy::quota' as quota FROM mailbox WHERE username = '%u' AND active='1'
Create file dovecot-dict-quota.conf.
For dovecot 1.0 & 1.1, use this as a template:
Create file dovecot-dict-quota.conf:
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix
@ -195,22 +195,6 @@ select_field = current
where_field = path
username_field = username
If you use dovecot 1.2 or newer, use this:
connect = host=localhost dbname=postfix user=postfix password=postfix
map {
pattern = priv/quota/storage
table = quota2
username_field = username
value_field = bytes
}
map {
pattern = priv/quota/messages
table = quota2
username_field = username
value_field = messages
}
Create database in Mysql:
(This is automatically done by postfixadmin's setup.php)

@ -20,18 +20,18 @@ virtual_mailbox_maps =
proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
# For transport map support, also use the following configuration:
relay_domains = proxy:mysql:/etc/postfix/sql/mysql_relay_domains.cf
transport_maps = proxy:mysql:/etc/postfix/sql/mysql_transport_maps.cf
# Also set the config.inc.php setting transport=YES
# and add the transport choices to transport_options.
# if you let postfix store your mails directly (without using maildrop, dovecot deliver etc.)
virtual_mailbox_base = /var/mail/vmail
# or whereever you want to store the mails
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/sql/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes
Where you chose to store the .cf files doesn't really matter, but they will
have database passwords stored in plain text so they should be readable only
by user postfix, or in a directory only accessible to user postfix.
@ -73,7 +73,7 @@ user = postfix
password = password
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active='1' AND alias_domain.active='1'
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
mysql_virtual_alias_domain_catchall_maps.cf:
# handles catch-all settings of target-domain
@ -81,7 +81,7 @@ user = postfix
password = password
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active='1' AND alias_domain.active='1'
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
(See above note re Concat + PostgreSQL)
@ -94,8 +94,6 @@ query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#query = SELECT domain FROM domain WHERE domain='%s'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'
#optional query to use for transport map support
#query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' AND NOT (transport LIKE 'smtp%%' OR transport LIKE 'relay%%')
#expansion_limit = 100
mysql_virtual_mailbox_maps.cf:
@ -111,21 +109,7 @@ user = postfix
password = password
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active='1' AND alias_domain.active='1'
mysql_relay_domains.cf:
user = postfix
password = password
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1' AND (transport LIKE 'smtp%%' OR transport LIKE 'relay%%')
mysql_transport_maps.cf:
user = postfix
password = password
hosts = localhost
dbname = postfix
query = SELECT transport FROM domain WHERE domain='%s' AND active = '1'
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
(See above note re Concat + PostgreSQL)

@ -1,48 +0,0 @@
*Description
This extension adds support for password expiration.
It is designed to have expiration on users passwords. An email is sent when the password is expiring in 30 days, then 14 days, then 7 days.
It is strongly inspired by https://abridge2devnull.com/posts/2014/09/29/dovecot-user-password-expiration-notifications-updated-4122015/, and adapted to fit with Postfix Admin & Roundcube's password plugin
Expiration unit is day
Expiration value for domain is set through Postfix Admin GUI
*Installation
Perform the following changes:
**Changes in MySQL/MariaDB mailbox table (as defined in $CONF['database_tables'] from config.inc.php):
You are invited to backup your DB first, and ensure the table name is correct.
Execute the attached SQL script (password_expiration.sql) that will add the required columns. The expiration value for existing users will be set to 90 days. If you want a different value, edit line 2 in the script and replace 90 by the required value.
**Changes in Postfix Admin :
To enable password expiration, add the following to your config.inc.php file:
$CONF['password_expiration'] = 'YES';
All my tests are performed using $CONF['encrypt'] = 'md5crypt';
**If you are using Roundcube's password plugin, you should also adapt the $config['password_query'] value.
I recommend to use:
$config['password_query'] = 'UPDATE mailbox SET password=%c, modified = now(), password_expiry = now() + interval 90 day';
of cource you may adapt to the expected expiration value
All my tests are performed using $config['password_algorithm'] = 'md5-crypt';
**Changes in Dovecot (adapt if you use another LDA)
Edit dovecot-mysql.conf file, and replace the user_query (and only this one) by this query:
password_query = SELECT username as user, password, concat('/var/vmail/', maildir) as userdb_var, concat('maildir:/var/vmail/', maildir) as userdb_mail, 20001 as userdb_uid, 20001 as userdb_gid, m.domain FROM mailbox m, domain d where d.domain = m.domain and m.username = '%u' AND m.active = '1' AND (m.password_expiry > now() or d.password_expiry = 0)
Of course you may require to adapt the uid, gid, maildir and table to your setup
**Changes in system
You need to have a script running on a daily basis to check password expiration and send emails 30, 14 and 7 days before password expiration (script attached: check_mailpass_expiration.sh).
Edit the script to adapt the variables to your setup.
This script is using postfixadmin.my.cnf to read credentials. Edit this file to enter a DB user that is allowed to access (read-write) your database. This file should be protected from any user (chmod 400).

@ -32,6 +32,7 @@ There are also lots of HOWTOs around the web. Be warned that many of them
Please stick to the PostfixAdmin documentation, and use those HOWTOs only if
you need some additional information that is missing in the PostfixAdmin
DOCUMENTS/ folder.
- http://codepoets.co.uk/postfixadmin-postgresql-courier-squirrelmail-debian-etch-howto-tutorial (Debian+Courier+PostgreSQL+Postfix+Postfixadmin)
- http://bliki.rimuhosting.com/space/knowledgebase/linux/mail/postfixadmin+on+debian+sarge (Postfix+MySQL+Postfixadmin+Dovecot)
- http://en.gentoo-wiki.com/wiki/Virtual_mail_server_using_Postfix,_Courier_and_PostfixAdmin (Postfix+MySQL+Postfixadmin+Courier)
@ -58,13 +59,10 @@ Alternatively :
2. Setup Web Server
-------------------
Assuming /var/www/html is where your webserver reads from, either create a symlink:
Assuming /var/www/html is where your webserver reads from :
$ ln -s /srv/postfixadmin/public /var/www/html/postfixadmin
$ ln -s /srv/postfixadmin/public /var/www/html/postfixadmin
or setup an alias in your webserver config. For Apache, use:
Alias /postfixadmin /srv/postfixadmin/public
3. Setup a Database
-------------------
@ -84,17 +82,11 @@ For MySQL:
CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'choose_a_password';
GRANT ALL PRIVILEGES ON `postfix` . * TO 'postfix'@'localhost';
FLUSH PRIVILEGES;
For PostgreSQL:
CREATE USER postfix WITH PASSWORD 'whatever';
CREATE DATABASE postfix OWNER postfix ENCODING 'unicode';
For SQLite:
$mkdir /srv/postfixadmin/database
$touch /srv/postfixadmin/database/postfixadmin.db
$sudo chown -R www-data:www-data /srv/postfixadmin/database
(both the directory and the database need to be writeable)
4. Configure PostfixAdmin so it can find the database
-----------------------------------------------------
@ -130,16 +122,11 @@ PostfixAdmin does not require write access to any files except the templates_c
directory (smarty cache). You can therefore leave the files owned by root (or
another user); as long as the web server user (e.g. www-data) can read them, it
will be fine.
For templates_c/, allow write access (only) for the web server user (e. g. www-data).
The easiest way to do this is
$ mkdir -p /srv/postfixadmin/templates_c
$ chown -R www-data /srv/postfixadmin/templates_c
(If you're using e.g. CentOS or another distribution which enables SELinux, something like the following may be necessary as well :
```chcon -R -t httpd_sys_content_rw_t /usr/share/postfixadmin/templates_c```
)
5. Check settings, and create Admin user
----------------------------------------
@ -197,3 +184,4 @@ IRC - a community of people may be able to help in #postfixadmin on irc.freenode
Legacy forum posts are on SourceForce at
https://sourceforge.net/projects/postfixadmin

@ -1,36 +1,13 @@
![GitHubBuild](https://github.com/postfixadmin/postfixadmin/workflows/GitHubBuild/badge.svg)
postfixadmin [![Build Status](https://travis-ci.org/postfixadmin/postfixadmin.svg?branch=postfixadmin_3.2)](https://travis-ci.org/postfixadmin/postfixadmin)
[![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/postfixadmin/Lobby)
[![Coverage Status](https://coveralls.io/repos/github/postfixadmin/postfixadmin/badge.svg?branch=master)](https://coveralls.io/github/postfixadmin/postfixadmin?branch=master)
![GitHub repo size](https://img.shields.io/github/repo-size/postfixadmin/postfixadmin)
[![Chat](https://img.shields.io/badge/chat-on%20freenode-brightgreen.svg)](https://kiwiirc.com/nextclient/irc.freenode.net/#postfixadmin)
# PostfixAdmin
============
An open source, web based interface for managing domains/mailboxes/aliases etc on a Postfix based mail server.
PostfixAdmin - web based administration interface for Postfix mail servers
Integrates with :
- Postfix
- IMAP/POP3 server (e.g. Dovecot or Courier)
- Database backend (choose one of: sqlite, mysql, postgresql)
- Fetchmail (optional)
## Features
- Unlimited domains/aliases/mailboxes
- Optional storage quota support
- Optional password expiry (beta)
- Multiple password hashing formats
- Supports PostgreSQL, MySQL, MariaDB, SQLite database backends (choose one)
- Supports retrieval of mail from a remote POP3 server (via fetchmail)
- Vacation / Autoresponder / Out Of Office support
- Users have the ability to login, change their password or vacation (out of office) status.
- Integration with Squirrelmail / Roundcube (via plugins)
- Optional XMLRPC based API
- Supports PHP5.6+
## Useful Links
Useful Links
------------
- [Probably all you need to read (pdf)](http://blog.cboltz.de/uploads/postfixadmin-30-english.pdf)
- http://postfixadmin.sf.net - the current homepage for the project
- [Docker Images](https://github.com/postfixadmin/docker)

@ -32,7 +32,6 @@ MIME::EncWords
Log::Log4perl
Log::Dispatch
GetOpt::Std
Net::DNS;
```
You may install these via CPAN, or through your package tool.
@ -44,7 +43,7 @@ CPAN: 'perl -MCPAN -e shell', then 'install Module::Whatever'
```bash
apt-get install libemail-sender-perl libemail-simple-perl libemail-valid-perl libtry-tiny-perl libdbd-pg-perl libemail-mime-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl libnet-dns-perl
apt-get install libemail-sender-perl libemail-simple-perl libemail-valid-perl libtry-tiny-perl libdbd-pg-perl libmime-perl liblog-log4perl-perl liblog-dispatch-perl libgetopt-argvfile-perl libmime-charset-perl libmime-encwords-perl libmime-encwords-perl
```
and one of :
@ -174,7 +173,6 @@ b) create /etc/postfixadmin/vacation.conf and enter your settings there
(without the "our" keyword). Example:
```perl
$db_username = 'mail';
1; # required final line - keeps perl happy.
```
To make sure nobody except vacation.pl can read your vacation.conf (including the

@ -30,7 +30,7 @@ use Email::Simple::Creator;
use Try::Tiny;
use Log::Log4perl qw(get_logger :levels);
use File::Basename;
use Net::DNS;
# ========== begin configuration ==========
# IMPORTANT: If you put passwords into this script, then remember
@ -51,19 +51,24 @@ our $db_name = 'postfix';
our $vacation_domain = 'autoreply.example.org';
our $recipient_delimiter = '+';
# smtp server used to send vacation e-mails
our $smtp_server = 'localhost';
# port to connect to; defaults to 25 for non-SSL, 465 for 'ssl', 587 for 'starttls'
our $smtp_server_port = 25;
# this is the helo we [the vacation script] use on connection; you may need to change this to your hostname or something,
# depending upon what smtp helo restrictions you have in place within Postfix.
# depending upon what smtp helo restrictions you have in place within Postfix.
our $smtp_client = 'localhost';
# send mail encrypted or plaintext
# if 'starttls', use STARTTLS; if 'ssl' (or 1), connect securely; otherwise, no security
our $smtp_ssl = 'starttls';
# passed to Net::SMTP constructor for 'ssl' connections or to starttls for 'starttls' connections; should contain extra options for IO::Socket::SSL
our $ssl_options = {
SSL_verifycn_name => $smtp_server
};
# maximum time in secs to wait for server; default is 120
our $smtp_timeout = '120';
@ -79,6 +84,7 @@ our $smtp_authpwd = '';
# From: Some Friendly Name <original@recipient.domain>
our $friendly_from = '';
# Set to 1 to enable logging to syslog.
our $syslog = 0;
@ -212,7 +218,6 @@ if ($db_type eq 'mysql') {
$db_true = '1';
} else { # Pg
$dbh->do("SET CLIENT_ENCODING TO 'UTF8'");
$dbh->{pg_enable_utf8} = 1;
$db_true = 'True';
}
@ -438,9 +443,8 @@ sub send_vacation_email {
}
$logger->debug("Will send vacation response for $orig_messageid: FROM: $email (orig_to: $orig_to), TO: $orig_from; VACATION SUBJECT: $row[0] ; VACATION BODY: $row[1]");
my $subject = $row[0];
$subject = Encode::decode_utf8( $subject ) if( !Encode::is_utf8( $subject ) );
$orig_subject = decode("mime-header", $orig_subject);
$subject =~ s/\$SUBJECT/$orig_subject/g;
if ($subject ne $row[0]) {
@ -448,30 +452,13 @@ sub send_vacation_email {
}
my $body = $row[1];
$body = Encode::decode_utf8( $body ) if( !Encode::is_utf8( $body ) );
my $from = $email;
my $to = $orig_from;
# part of the username in the email && part of the domain in the email
my ($email_username_part, $email_domain_part) = split(/@/, $email);
my $resolver = Net::DNS::Resolver->new;
my @mx = mx($resolver, $email_domain_part);
my $smtp_server;
if (@mx) {
$smtp_server = @mx[0]->exchange;
$logger->debug("Found MX record <$smtp_server> for user <$email>!");
} else {
$logger->error("Unable to find MX record for user <$email>, error message: ".$resolver->errorstring);
exit(0);
}
my $smtp_params = {
host => $smtp_server,
port => $smtp_server_port,
ssl_options => {
SSL_verifycn_name => $smtp_server
},
ssl_options => $ssl_options,
ssl => $smtp_ssl,
timeout => $smtp_timeout,
localaddr => $smtp_client,
@ -486,8 +473,6 @@ sub send_vacation_email {
my $transport = Email::Sender::Transport::SMTP->new($smtp_params);
$subject = Encode::encode_utf8( $subject ) if( Encode::is_utf8( $subject ) );
$body = Encode::encode_utf8( $body ) if( Encode::is_utf8( $body ) );
$email = Email::Simple->create(
header => [
To => $to,
@ -626,9 +611,6 @@ if($smtp_recipient =~ /\@$vacation_domain/) {
my $tmp = $smtp_recipient;
$tmp =~ s/\@$vacation_domain//;
$tmp =~ s/#/\@/;
if ($recipient_delimiter) {
$tmp =~ s/[\Q$recipient_delimiter\E].+$//;
}
$logger->debug("Converted autoreply mailbox back to normal style - from $smtp_recipient to $tmp");
$smtp_recipient = $tmp;
undef $tmp;

@ -1,20 +0,0 @@
#!/bin/bash
#Adapt to your setup
POSTFIX_DB="postfix_test"
MYSQL_CREDENTIALS_FILE="postfixadmin.my.cnf"
REPLY_ADDRESS=noreply@example.com
# Change this list to change notification times and when ...
for INTERVAL in 30 14 7
do
LOWER=$(( $INTERVAL - 1 ))
QUERY="SELECT username,password_expiry FROM mailbox WHERE password_expiry > now() + interval $LOWER DAY AND password_expiry < NOW() + interval $INTERVAL DAY"
mysql --defaults-extra-file="$MYSQL_CREDENTIALS_FILE" "$POSTFIX_DB" -B -e "$QUERY" | while read -a RESULT ; do
echo -e "Dear User, \n Your password will expire on ${RESULT[1]}" | mail -s "Password 30 days before expiration notication" -r $REPLY_ADDRESS ${RESULT[0]}
done
done

@ -8,6 +8,7 @@
*
* Further details on the project are available at http://postfixadmin.sf.net
*
* @version $Id$
* @license GNU GPL v2 or later.
*
* File: common.php
@ -31,6 +32,12 @@ if (!defined('POSTFIXADMIN')) { # already defined if called from setup.php
}
$incpath = dirname(__FILE__);
(ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_runtime', '0') : '1');
(ini_get('magic_quotes_gpc') ? ini_set('magic_quotes_sybase', '0') : '1');
if (ini_get('register_globals') == 'on') {
die("Please turn off register_globals; edit your php.ini");
}
/**
* @param string $class
@ -50,25 +57,19 @@ spl_autoload_register('postfixadmin_autoload');
if (!is_file("$incpath/config.inc.php")) {
die("config.inc.php is missing!");
}
global $CONF;
require_once("$incpath/config.inc.php");
if (isset($CONF['configured']) && !defined('PHPUNIT_TEST')) {
if (isset($CONF['configured'])) {
if ($CONF['configured'] == false) {
die("Please edit config.local.php - change \$CONF['configured'] to true after specifying appropriate local settings (database_type etc)");
die("Please edit config.local.php - change \$CONF['configured'] to true after setting your database settings");
}
}
Config::write($CONF);
$PALANG = [];
require_once("$incpath/languages/language.php");
require_once("$incpath/functions.inc.php");
if (extension_loaded('Phar') && ( version_compare(PHP_VERSION, '7.0.0') < 0)) {
if (extension_loaded('Phar')) {
require_once("$incpath/lib/random_compat.phar");
}
@ -78,9 +79,8 @@ if (defined('POSTFIXADMIN_CLI')) {
$language = check_language(); # TODO: storing the language only at login instead of calling check_language() on every page would save some processor cycles ;-)
$_SESSION['lang'] = $language;
}
if (!empty($language)) {
require_once("$incpath/languages/" . $language . ".lang");
}
require_once("$incpath/languages/" . $language . ".lang");
if (!empty($CONF['language_hook']) && function_exists($CONF['language_hook'])) {
$hook_func = $CONF['language_hook'];

@ -4,44 +4,20 @@
"type": "project",
"license": "GPL-2.0",
"scripts": {
"build" : [
"@check-format",
"@lint",
"@test-fixup",
"@psalm",
"@test"
],
"check-format": "php-cs-fixer fix --ansi --dry-run --diff",
"format": "php-cs-fixer fix --ansi",
"lint": "@php ./vendor/bin/parallel-lint --exclude vendor/ --exclude lib/block_random_int.php --exclude lib/array_column.php .",
"test": "DATABASE=sqlite ./vendor/bin/phpunit --coverage-clover ./clover.xml tests/",
"test-fixup": "mkdir -p templates_c ; test -f config.local.php || touch config.local.php",
"psalm": "@php ./vendor/bin/psalm --show-info=false "
"lint": "@php ./vendor/bin/parallel-lint --exclude vendor/ .",
"test": "@php ./vendor/bin/phpunit tests/"
},
"require": {
"php": ">=7.0"
"php": ">=5.2"
},
"require-dev": {
"ext-mysqli": "*",
"ext-sqlite3": "*",
"friendsofphp/php-cs-fixer": "*",
"php-parallel-lint/php-parallel-lint": "^1.0",
"php": ">7.2.0",
"cedx/coveralls": "^11.0",
"phpunit/phpunit": "8.*",
"vimeo/psalm":"^3.0",
"shardj/zf1-future" : "^1.12"
},
"autoload": {
"files": [
"config.inc.php",
"functions.inc.php",
"lib/smarty/libs/bootstrap.php"
]
},
"support": {
"irc": "irc://irc.freenode.org/postfixadmin",
"issues": "https://github.com/postfixadmin/postfixadmin/issues",
"chat": "https://gitter.im/postfixadmin/Lobby"
"friendsofphp/php-cs-fixer": "^2.7",
"vimeo/psalm":"^1.0",
"jakub-onderka/php-parallel-lint": "^0.9.2",
"phpunit/phpunit": "^5.7",
"zendframework/zendframework1": "^1.12.0"
}
}

2516
composer.lock generated

File diff suppressed because it is too large Load Diff

@ -8,6 +8,7 @@
*
* Further details on the project are available at http://postfixadmin.sf.net
*
* @version $Id$
* @license GNU GPL v2 or later.
*
* File: config.inc.php
@ -29,7 +30,7 @@
# #
################################################################################
global $CONF;
/*****************************************************************
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@ -103,14 +104,13 @@ $CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
// Database SSL Config (PDO/MySQLi only)
// Database SSL Config
$CONF['database_use_ssl'] = false;
$CONF['database_ssl_key'] = NULL;
$CONF['database_ssl_cert'] = NULL;
$CONF['database_ssl_ca'] = NULL;
$CONF['database_ssl_ca_path'] = NULL;
$CONF['database_ssl_cipher'] = NULL;
$CONF['database_ssl_verify_server_cert'] = true;
// If you need to specify a different port for a MYSQL database connection, use e.g.
// $CONF['database_host'] = '172.30.33.66:3308';
@ -119,10 +119,9 @@ $CONF['database_ssl_verify_server_cert'] = true;
// uncomment and change the following
// $CONF['database_port'] = '5432';
//
// If you wish to connect using a local socket file (e.g /var/run/mysql.sock) set this to the socket path.
// If you wish to connect using a local socket file (e.g /var/run/mysql.sock) uncomment the below.
// $CONF['database_socket'] = '/var/run/mysql/mysqld.sock';
$CONF['database_socket'] = '';
//
// If sqlite is used, specify the database file path:
// $CONF['database_name'] = '/etc/postfix/sqlite/postfixadmin.db'
@ -151,12 +150,6 @@ $CONF['database_tables'] = array (
// Leave blank to send email from the logged-in Admin's Email address.
$CONF['admin_email'] = '';
// Define the smtp password for admin_email.
// This will be used to send emails from to create mailboxes and
// from Send Email / Broadcast message pages.
// Leave blank to send emails without authentification
$CONF['admin_smtp_password'] = '';
// Site admin name
// This will be used as signature in notification messages
$CONF['admin_name'] = 'Postmaster';
@ -172,9 +165,6 @@ $CONF['smtp_port'] = '25';
// Used in the HELO when sending emails from Postfix Admin
$CONF['smtp_client'] = '';
// Set 'YES' to use TLS when sending emails.
$CONF['smtp_sendmail_tls'] = 'NO';
// Encrypt
// In what way do you want the passwords to be crypted?
// md5crypt = internal postfix admin md5
@ -184,17 +174,10 @@ $CONF['smtp_sendmail_tls'] = 'NO';
// mysql_encrypt = useful for PAM integration
// authlib = support for courier-authlib style passwords - also set $CONF['authlib_default_flavor']
// dovecot:CRYPT-METHOD = use dovecotpw -s 'CRYPT-METHOD'. Example: dovecot:CRAM-MD5
// php_crypt:CRYPT-METHOD:DIFFICULTY = use PHP built in crypt()-function. Example: php_crypt:SHA512:50000
// - php_crypt CRYPT-METHOD: Supported values are DES, MD5, BLOWFISH, SHA256, SHA512
// - php_crypt DIFFICULTY: Larger value is more secure, but uses more CPU and time for each login.
// - php_crypt DIFFICULTY: Set this according to your CPU processing power.
// - php_crypt DIFFICULTY: Supported values are BLOWFISH:4-31, SHA256:1000-999999999, SHA512:1000-999999999
// - php_crypt DIFFICULTY: leave empty to use default values (BLOWFISH:10, SHA256:5000, SHA512:5000). Example: php_crypt:SHA512
// IMPORTANT:
// - don't use dovecot:* methods that include the username in the hash - you won't be able to login to PostfixAdmin in this case
// - you'll need at least dovecot 2.1 for salted passwords ('doveadm pw' 2.0.x doesn't support the '-t' option)
// - dovecot 2.0.0 - 2.0.7 is not supported
// sha512.b64 - {SHA512-CRYPT.B64} (base64 encoded sha512) (no dovecot dependency; should support migration from md5crypt)
$CONF['encrypt'] = 'md5crypt';
// In what flavor should courier-authlib style passwords be encrypted?
@ -217,7 +200,7 @@ if(@file_exists('/usr/bin/doveadm')) { // @ to silence openbase_dir stuff; see h
// Password validation
// New/changed passwords will be validated using all regular expressions in the array.
// If a password doesn't match one of the regular expressions, the corresponding
// error message from $PALANG (see languages/*.lang) will be displayed.
// error message from $PALANG (see languages/*) will be displayed.
// See http://de3.php.net/manual/en/reference.pcre.pattern.syntax.php for details
// about the regular expression syntax.
// If you need custom error messages, you can add them using $CONF['language_hook'].
@ -355,10 +338,6 @@ $CONF['quota'] = 'NO';
$CONF['domain_quota'] = 'YES';
// You can either use '1024000' or '1048576'
$CONF['quota_multiplier'] = '1024000';
// fill state threshold (in per cent) for medium level (displayed as orange)
$CONF['quota_level_med_pct'] = 55;
// fill state threshold (in per cent) for high level (displayed as red)
$CONF['quota_level_high_pct'] = 90;
// Transport
// If you want to define additional transport options for a domain set this to 'YES'.
@ -531,16 +510,6 @@ $CONF['show_undeliverable']='YES';
$CONF['show_undeliverable_color']='tomato';
// mails to these domains will never be flagged as undeliverable
$CONF['show_undeliverable_exceptions']=array("unixmail.domain.ext","exchangeserver.domain.ext");
// show mailboxes with expired password; requires password_expiration to be enabled
$CONF['show_expired']='YES';
$CONF['show_expired_color']='orange';
// show vacation enabled mailboxes
$CONF['show_vacation']='YES';
$CONF['show_vacation_color']='turquoise';
// show disabled accounts
$CONF['show_disabled']='YES';
$CONF['show_disabled_color']='grey';
// show POP/IMAP mailboxes
$CONF['show_popimap']='YES';
$CONF['show_popimap_color']='darkgrey';
// you can assign special colors to some domains. To do this,
@ -605,7 +574,7 @@ $CONF['domain_postdeletion_script'] = '';
// Will not work with POP3.
// If you define create_mailbox_subdirs, then the
// create_mailbox_subdirs_host must also be defined.
// Note: requires imap extension within PHP
//
// $CONF['create_mailbox_subdirs']=array('Spam');
$CONF['create_mailbox_subdirs'] = array();
$CONF['create_mailbox_subdirs_host']='localhost';
@ -672,9 +641,7 @@ function x_send_sms_clickatell($to, $message) {
*/
// Theme Config
$CONF['theme'] = 'default';
// Specify your own favicon, logo and CSS file
$CONF['theme_favicon'] = 'images/favicon.ico';
// Specify your own logo and CSS file
$CONF['theme_logo'] = 'images/logo-default.png';
$CONF['theme_css'] = 'css/default.css';
// If you want to customize some styles without editing the $CONF['theme_css'] file,
@ -687,12 +654,7 @@ $CONF['theme_custom_css'] = '';
// change to boolean true to enable xmlrpc
$CONF['xmlrpc_enabled'] = false;
//Account expiration info
//If enabled, mailbox passwords have a password_expiry field set, which is updated each time the password is changed, based on the parent domain's password_expiry (days) value.
//More details in README.password_expiration
$CONF['password_expiration'] = 'YES';
// If you want to keep most settings at default values and/or want to ensure
// If you want to keep most settings at default values and/or want to ensure
// that future updates work without problems, you can use a separate config
// file (config.local.php) instead of editing this file and override some
// settings there.

@ -39,7 +39,7 @@ tr_hilightoff = <tr class="hilightoff" onmouseover="className='hilighton';" onmo
url_delete = delete.php
url_search = list-virtual.php
form_search = <form name="search" method="post" action="list-virtual.php"><input class="form-control" name="search[_]" size="10" /></form>
form_search = <form name="search" method="post" action="list-virtual.php"><input name="search[_]" size="10" /></form>
[adminlistadmin]
url_edit_admin = edit.php?table=admin

4
debian/control vendored

@ -11,8 +11,8 @@ Homepage: http://postfixadmin.sourceforge.net
Package: postfixadmin
Architecture: all
Depends: debconf (>= 0.5), dbconfig-common, wwwconfig-common, apache2 | lighttpd | httpd, libapache2-mod-php | php-cgi | php-fpm | php, php-mysql | php-mysqlnd | php-pgsql | php-pgsql | php-sqlite3, php-mbstring, default-mysql-client | mysql-client | postgresql-client | mariadb-client
Recommends: postfix-mysql | postfix-pgsql, virtual-mysql-server | postgresql | sqlite (>= 3.12.0) | mariadb-server, zendframework, php-imap, dovecot-core | courier-authlib-mysql | courier-authlib-postgresql, php-cli
Depends: debconf (>= 0.5), dbconfig-common, wwwconfig-common, apache2 | lighttpd | httpd, libapache2-mod-php | php-cgi | php-fpm | php, php-imap, php-mysql | php-mysqlnd | php-pgsql | php-pgsql | php-sqlite3, php-mbstring, default-mysql-client | mysql-client | postgresql-client | mariadb-client
Recommends: postfix-mysql | postfix-pgsql, virtual-mysql-server | postgresql | sqlite (>= 3.12.0) | mariadb-server, zendframework, dovecot-core | courier-authlib-mysql | courier-authlib-postgresql, php-cli
Description: Virtual mail hosting interface for Postfix
Postfixadmin is a web interface to manage virtual users and domains
for a Postfix mail transport agent. It supports Virtual mailboxes,

File diff suppressed because it is too large Load Diff

@ -140,7 +140,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Не мога да модифицирам този alias! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Създаване на нова пощенска кутия за вашия домейн.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Е-мейл-а не е валиден!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Вие сте достигнали своя лимит за създаване на пощенски кутии!';
$PALANG['pCreate_mailbox_password_text'] = 'Парола за POP3/IMAP';
@ -339,13 +338,10 @@ $PALANG['pBroadcast_error_empty'] = 'Полетата Име, Заглавие
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -364,7 +360,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -384,7 +379,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -400,8 +394,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -138,7 +138,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Imposible modificar l\'àlies! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Crear una nova bústia pel seu domini.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'L\'e-mail no és vàlido!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Has arribat al límit de creació de bústies!';
$PALANG['pCreate_mailbox_password_text'] = 'Contrasenya per a POP3/IMAP';
@ -338,13 +337,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -363,7 +359,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -383,7 +378,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -399,8 +393,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -139,7 +139,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = '不能修改该别名! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = '在你的域中新建一个本地邮箱.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = '邮件非法!';
$PALANG['pCreate_mailbox_username_text_error3'] = '邮箱地址已经达到上限!';
$PALANG['pCreate_mailbox_password_text'] = 'POP3/IMAP 密码';
@ -338,13 +337,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -363,7 +359,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -383,7 +378,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -399,8 +393,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -147,7 +147,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Přesměrovat pouze na dané adresy.';
$PALANG['pEdit_alias_result_error'] = 'Nepodařilo se upravit přesměrování! (%s)';
$PALANG['pCreate_mailbox_welcome'] = 'Vytvořit novou lokální schránku v doméně.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Adresa není platná!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Dosáhli jste limitu, nemů&cedil;ete vytvářet další schránky!';
$PALANG['pCreate_mailbox_password_text'] = 'Heslo pro POP3/IMAP/SMTP';
@ -352,13 +351,10 @@ $PALANG['pBroadcast_error_empty'] = 'Pole Od, Předmět a Zpráva by neměly bý
$PALANG['broadcast_mailboxes_only'] = 'Pouze poslat do schránek';
$PALANG['broadcast_to_domains'] = 'Poslat na domény:';
$PALANG['pStatus_undeliverable'] = 'možná NEDORUČITELNÉ ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Doručeno do ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Heslo je příliš krátké - je vyžadováno minimálně %s znaků";
$PALANG['password_no_characters'] = "Heslo musí obsahovat alespoň %s znak(-y)."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)."
$PALANG['password_no_characters'] = "Heslo musí obsahovat alespoň %s znak(-y).";
$PALANG['password_no_digits'] = "Heslo musí obsahovat alespoň %s číslici(-ce).";
$PALANG['pInvalidDomainRegex'] = "Neplatné doménové jméno %s, nevyhovělo regulárnímu výrazu";
$PALANG['pInvalidDomainDNS'] = "Neplatná doména %s, a/nebo nezjištěn DNS záznam.";
@ -377,7 +373,6 @@ $PALANG['pFetchmail_password_missing'] = 'Prosím zadejte heslo ke vzdálené sc
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Schránka';
$PALANG['pFetchmail_field_src_server'] = 'Server';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Typ autentizace';
$PALANG['pFetchmail_field_src_user'] = 'Uživatel';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -397,7 +392,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Výstupní text';
$PALANG['pFetchmail_desc_id'] = 'ID záznamu';
$PALANG['pFetchmail_desc_mailbox'] = 'Místní schránka';
$PALANG['pFetchmail_desc_src_server'] = 'Vzdálený server';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Většinou \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Vzdálený uživatel';
$PALANG['pFetchmail_desc_src_password'] = 'Heslo vzdáleného uživatele';
@ -413,8 +407,6 @@ $PALANG['pFetchmail_desc_date'] = 'Datum posledního stažení pošt
$PALANG['pFetchmail_desc_returned_text'] = 'Výstupní textový záznam posledního stahování pošty';
$PALANG['dateformat_pgsql'] = 'dd-mm-YYYY'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format
$PALANG['dateformat_mysql'] = '%d.%m.%Y'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -144,7 +144,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Videresend til angivene emailadres
$PALANG['pEdit_alias_result_error'] = 'Kan ikke redigere aliaset. (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Tilføj en ny lokal postboks til domænet.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Emailadressen er ikke gyldig!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Du har nået grænsen for antallet af postbokse til domæne!';
$PALANG['pCreate_mailbox_password_text'] = 'Adgangskode til POP3/IMAP';
@ -350,14 +349,11 @@ $PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'kan måske ikke leveres ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Leveres til ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Adgangskoden er for kort. Der kræves mindst %s tegn";
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Ugyldigt domæne-navn %s. Fejlede regulært udtryks-tjek";
$PALANG['pInvalidDomainDNS'] = "Ugyldigt domæne %s, og/eller ikke fundet i DNS";
@ -377,7 +373,6 @@ $PALANG['pFetchmail_password_missing'] = 'Angiv adgangskoden til fjernserveren!'
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Postboks';
$PALANG['pFetchmail_field_src_server'] = 'Server';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Godkendelsesmetode';
$PALANG['pFetchmail_field_src_user'] = 'Brugernavn';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -397,7 +392,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returneret tekst';
$PALANG['pFetchmail_desc_id'] = 'Post ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Lokal postboks';
$PALANG['pFetchmail_desc_src_server'] = 'Fjernserver';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Somregel \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Eksternt brugernavn';
$PALANG['pFetchmail_desc_src_password'] = 'Ekstern adgangskode';
@ -413,8 +407,6 @@ $PALANG['pFetchmail_desc_date'] = 'Dato for seneste prøve/konfigura
$PALANG['pFetchmail_desc_returned_text'] = 'Tekstbesked fra seneste prøve';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -141,15 +141,14 @@ $PALANG['pEdit_alias_forward_only'] = 'Nur zur angegebenen Adresse weiterleiten.
$PALANG['pEdit_alias_result_error'] = 'Ändern des Aliases %s ist fehlgeschlagen!';
$PALANG['pCreate_mailbox_welcome'] = 'Legen Sie eine neue Mailbox für Ihre Domain an.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Die EMAIL ist nicht korrekt!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Sie dürfen leider nicht mehr Mailboxen für diese Domain anlegen!';
$PALANG['pCreate_mailbox_password_text'] = 'Passwort für POP3/IMAP';
$PALANG['pCreate_mailbox_name_text'] = 'Vollständiger Name';
$PALANG['pCreate_mailbox_phone'] = 'Mobiltelefon';
$PALANG['pCreate_mailbox_phone_desc'] = "Wird benutzt, um eine SMS senden, falls das Passwort vergessen wurde";
$PALANG['pCreate_mailbox_email'] = 'Andere E-Mail Adresse';
$PALANG['pCreate_mailbox_email_desc'] = "Wird benutzt, falls das Passwort vergessen wurde";
$PALANG['pCreate_mailbox_phone'] = 'Mobile phone'; # XXX
$PALANG['pCreate_mailbox_phone_desc'] = "Used to send a SMS if the password is forgotten"; # XXX
$PALANG['pCreate_mailbox_email'] = 'Other e-mail'; # XXX
$PALANG['pCreate_mailbox_email_desc'] = "Used if the password is forgotten"; # XXX
$PALANG['pCreate_mailbox_mail'] = 'Begrüßungsmail senden';
$PALANG['pCreate_mailbox_result_error'] = 'Das Erstellen der Mailbox %s ist fehlgeschlagen';
$PALANG['pCreate_mailbox_result_success'] = 'Die Mailbox %s wurde in die Mailbox-Tabelle eingetragen.';
@ -177,13 +176,13 @@ $PALANG['pPassword_password_text_error'] = 'Die beiden angegebenen Passwörter s
$PALANG['change_password'] = 'Passwort ändern';
$PALANG['pPassword_result_error'] = 'Das Passwort für %s konnte nicht geändert werden';
$PALANG['pPassword_result_success'] = 'Das Passwort für %s wurde geändert.';
$PALANG['pPassword_recovery_title'] = 'Folgen Sie den Anweisungen, um Ihr Passwort zurückzusetzen.';
$PALANG['pPassword_recovery_button'] = 'Code zusenden';
$PALANG['pPassword_recovery_email_body'] = "Hallo,\n\nBenutzen Sie den folgenden Link, um Ihr E-Mail-Passwort zu ändern :\n%s\n\nMit freundlichen Grüßen,\n\n" . $CONF['admin_name'];
$PALANG['pPassword_recovery_sms_body'] = "Hallo,\nDer Code zum Ändern des Passwortes lautet: %s\n" . $CONF['admin_name'];
$PALANG['pPassword_recovery_processed'] = "Wir haben Ihre Anfrage erhalten. Wenn Sie einen gültigen Benutzernamen eingegeben haben, dann erhalten Sie eine E-Mail/SMS mit dem Passwort-Code.";
$PALANG['pPassword_password_code'] = 'Code per E-Mail/SMS geschickt';
$PALANG['pPassword_code_text_error'] = 'Ungültiger Code';
$PALANG['pPassword_recovery_title'] = 'Follow the instructions to reset your password.'; # XXX
$PALANG['pPassword_recovery_button'] = 'Send me the code'; # XXX
$PALANG['pPassword_recovery_email_body'] = "Hello,\n\nUse the following link to change your email password :\n%s\n\nRegards,\n\n" . $CONF['admin_name']; # XXX
$PALANG['pPassword_recovery_sms_body'] = "Hello,\nThe code to change your password is: %s\n" . $CONF['admin_name']; # XXX
$PALANG['pPassword_recovery_processed'] = "We processed your request. If you entered a valid username, you'll receive an email/SMS with a password code."; # XXX
$PALANG['pPassword_password_code'] = 'Code sent by email/SMS'; # XXX
$PALANG['pPassword_code_text_error'] = 'Invalid code'; # XXX
$PALANG['pEdit_vacation_set'] = 'Automatische Antwort ändern / einrichten';
$PALANG['pEdit_vacation_remove'] = 'Automatische Antwort abschalten';
@ -191,8 +190,8 @@ $PALANG['pEdit_vacation_remove'] = 'Automatische Antwort abschalten';
$PALANG['pVacation_result_error'] = 'Änderungen der automatischen Antwort für %s konnten nicht gespeichert werden!';
$PALANG['pVacation_result_removed'] = 'Automatische Antwort für %s wurde abgeschaltet!';
$PALANG['pVacation_result_added'] = 'Automatische Antwort für %s wurde aktiviert!';
$PALANG['pVacation_reply_type'] = 'Art der Antwort';
$PALANG['pVacation_reply_delay_time'] = 'Zeitintervall';
$PALANG['pVacation_reply_type'] = 'Choice of reply'; # XXX
$PALANG['pVacation_reply_delay_time'] = 'Interval time'; # XXX
$PALANG['pVacation_reply_delay_time_text'] = 'Zeit in Sekunden';
$PALANG['pVacation_until_before_today'] = 'Das Datum von [Aktiv bis] ist in der Vergangenheit';
$PALANG['pVacation_until_before_from'] = 'Das Datum von [Aktiv bis] ist vor [Aktiv ab]';
@ -309,7 +308,7 @@ $PALANG['pAdminEdit_admin_result_success'] = 'Der Admin %s wurde geändert.';
$PALANG['pUsersLogin_welcome'] = 'Benutzer bitte hier einloggen, um Weiterleitungen bzw. das Passwort zu ändern.';
$PALANG['pUsersLogin_username_incorrect'] = 'Falscher Login! Bitte benutzen Sie ihre Email-Adresse als Login';
$PALANG['pUsersLogin_password_incorrect'] = 'Falsches Passwort!';
$PALANG['pUsersLogin_password_recover'] = 'Ich habe mein Passwort vergessen';
$PALANG['pUsersLogin_password_recover'] = 'I forgot my password'; # XXX
$PALANG['pUsersMenu_vacation'] = 'Automatische Antwort';
$PALANG['pUsersMenu_edit_alias'] = 'Weiterleitung ändern';
@ -348,14 +347,11 @@ $PALANG['broadcast_mailboxes_only'] = "Nur an Postfächer senden";
$PALANG['broadcast_to_domains'] = "Senden an Domains:";
$PALANG['pStatus_undeliverable'] = 'möglicherweise UNZUSTELLBAR ';
$PALANG['pStatus_disabled'] = 'Konto deaktiviert ';
$PALANG['pStatus_expired'] = 'Passwort abgelaufen ';
$PALANG['pStatus_vacation'] = 'Automatische Antwort aktiviert ';
$PALANG['pStatus_custom'] = 'Zustellung an ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Das Passwort ist zu kurz - mindestens %s Zeichen benötigt";
$PALANG['password_no_characters'] = "Ihr Passwort muss mindestens %s Buchstaben (A-Z, a-z) enthalten.";
$PALANG['password_no_characters'] = "Ihr Passwort muss mindestens %s Buchstaben enthalten.";
$PALANG['password_no_digits'] = "Ihr Passwort muss mindestens %s Ziffer(n) enthalten.";
$PALANG['pInvalidDomainRegex'] = "Ungültiger Domainname %s - Überprüfung per RegEx fehlgeschlagen";
$PALANG['pInvalidDomainDNS'] = "Ungültige Domain %s - nicht per DNS auflösbar";
@ -375,7 +371,6 @@ $PALANG['pFetchmail_password_missing'] = 'Bitte geben Sie das Passwort ein!';
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox';
$PALANG['pFetchmail_field_src_server'] = 'Server';
$PALANG['pFetchmail_field_src_port'] = 'Port';
$PALANG['pFetchmail_field_src_auth'] = 'Anmeldemethode';
$PALANG['pFetchmail_field_src_user'] = 'Benutzername';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -387,7 +382,7 @@ $PALANG['pFetchmail_field_protocol'] = 'Protokoll';
$PALANG['pFetchmail_field_usessl'] = 'SSL aktiv';
$PALANG['pFetchmail_field_sslcertck'] = 'SSL Zertifikatsprüfung';
$PALANG['pFetchmail_field_sslcertpath'] = 'SSL Pfad der Zertifikate';
$PALANG['pFetchmail_field_sslfingerprint'] = 'SSL Fingerabdruck (md5)';
$PALANG['pFetchmail_field_sslfingerprint'] = 'SSL fingerprint (md5)';
$PALANG['pFetchmail_field_extra_options'] = 'Zusätzliche Optionen';
$PALANG['pFetchmail_field_mda'] = 'MDA';
$PALANG['pFetchmail_field_date'] = 'Datum';
@ -395,7 +390,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Zurückgegebener Text';
$PALANG['pFetchmail_desc_id'] = 'Eintrags-ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Lokales Postfach';
$PALANG['pFetchmail_desc_src_server'] = 'Entfernter Server';
$PALANG['pFetchmail_desc_src_port'] = 'Entfernter Port, falls nicht der Standard-Port benutzt werden soll. (0: Standard-Port)';
$PALANG['pFetchmail_desc_src_auth'] = 'Normalerweise \'password\'';
$PALANG['pFetchmail_desc_src_user'] = 'Entfernter Benutzername';
$PALANG['pFetchmail_desc_src_password'] = 'Entferntes Passwort';
@ -411,8 +405,6 @@ $PALANG['pFetchmail_desc_date'] = 'Datum des letzten Mailabrufs/Konf
$PALANG['pFetchmail_desc_returned_text'] = 'Textausgabe des letzten Mailabrufs';
$PALANG['dateformat_pgsql'] = 'dd.mm.YYYY'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format
$PALANG['dateformat_mysql'] = '%d.%m.%Y'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format
$PALANG['password_expiration'] = 'Password läuft ab';
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -142,7 +142,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Modifying the alias %s failed!';
$PALANG['pCreate_mailbox_welcome'] = 'Create a new mailbox for your domain.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.';
$PALANG['pCreate_mailbox_username_text_error1'] = 'The EMAIL is not valid!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'You have reached your limit to create mailboxes!';
$PALANG['pCreate_mailbox_password_text'] = 'Password for POP3/IMAP';
@ -349,15 +348,11 @@ $PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes';
$PALANG['broadcast_to_domains'] = 'Send to domains:';
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE ';
$PALANG['pStatus_disabled'] = 'Account disabled ';
$PALANG['pStatus_expired'] = 'Password expired ';
$PALANG['pStatus_vacation'] = 'Vacation enabled ';
$PALANG['pStatus_custom'] = 'Delivers to ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Password is too short - requires %s characters";
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z).";
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s).";
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s).";
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check";
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS";
@ -377,7 +372,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!';
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox';
$PALANG['pFetchmail_field_src_server'] = 'Server';
$PALANG['pFetchmail_field_src_port'] = 'Port';
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type';
$PALANG['pFetchmail_field_src_user'] = 'User';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -397,7 +391,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text';
$PALANG['pFetchmail_desc_id'] = 'Record ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox';
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)';
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Remote User';
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password';
@ -414,8 +407,6 @@ $PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format
$PALANG['password_expiration'] = 'Pass expires';
$PALANG['password_expiration_desc'] = 'Date when password will expire';
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -139,7 +139,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Reenviar sólo al email especificado.';
$PALANG['pEdit_alias_result_error'] = '¡Imposible modificar el alias! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Crear un nuevo buzón para su dominio.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = '¡El e-mail no es válido!';
$PALANG['pCreate_mailbox_username_text_error3'] = '¡Ha llegado al límite de creación de buzones!';
$PALANG['pCreate_mailbox_password_text'] = 'Contraseña para POP3/IMAP';
@ -340,13 +339,10 @@ $PALANG['pBroadcast_error_empty'] = '¡Los campos Nombre, Asunto y Mensaje no pu
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'posiblemente NO SE ENTREGÓ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Enviado a ';
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "La contraseña es demasiado corta - se necesitan %s caracteres";
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "El nombre de dominio %s es inválido, no se ajusta a la expresión regular";
$PALANG['pInvalidDomainDNS'] = "El dominio %s no es válido, y/o no tiene resolución DNS";
@ -365,7 +361,6 @@ $PALANG['pFetchmail_password_missing'] = '¡Por favor introduzca la contraseña
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Buzón';
$PALANG['pFetchmail_field_src_server'] = 'Servidor';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Tipo Autenticación';
$PALANG['pFetchmail_field_src_user'] = 'Usuario';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -385,7 +380,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Texto Devuelto';
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Buzón local';
$PALANG['pFetchmail_desc_src_server'] = 'Servidor Remoto';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Usuario Remoto';
$PALANG['pFetchmail_desc_src_password'] = 'Contraseña Remota';
@ -401,8 +395,6 @@ $PALANG['pFetchmail_desc_date'] = 'Fecha del último sondeo/cambio e
$PALANG['pFetchmail_desc_returned_text'] = 'Mensaje del último sondeo';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -139,7 +139,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Aliase muutmine ebaõnnestus! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Loo uus postkast domeenis.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-posti aadress pole kehtiv!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Oled kasutanud kogu postkastide arvu!';
$PALANG['pCreate_mailbox_password_text'] = 'Parool POP3/IMAP\'le';
@ -342,13 +341,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -367,7 +363,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -387,7 +382,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -403,8 +397,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -137,7 +137,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Ezinezkoa aliasa aldatzea! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Postontzi berri bat sortu domeinuarentzat.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-maila baliogabekoa da!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Postontzi sorkuntza mugara iritsi zara!';
$PALANG['pCreate_mailbox_password_text'] = 'POP3/IMAP-entzat pasahitza';
@ -337,13 +336,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -362,7 +358,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -382,7 +377,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -398,8 +392,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -139,7 +139,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Edelleenlähetä ainoastaan annettuun sä
$PALANG['pEdit_alias_result_error'] = 'Aliasta ei voi muokata! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Luo uusi paikallinen postilaatikko.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Sähköpostiosoite ei ole oikean muotoinen!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Postilaatikoiden maksimimäärä saavutettu!';
$PALANG['pCreate_mailbox_password_text'] = 'POP3/IMAP salasana';
@ -338,13 +337,10 @@ $PALANG['pBroadcast_error_empty'] = 'Nimi, Aihe tai Viesti kenttien ei pidä oll
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'ehkä ei voida toimittaa ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Toimittaa osoiteeseen ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Salasana on liian lyhyt, vaaditaan %s merkkiä";
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Virheellinen domain nimi %s, ei läpäise regexp testiä";
$PALANG['pInvalidDomainDNS'] = "Virheellinen domain %s ja/tai ei löydy nimipalvelimista";
@ -363,7 +359,6 @@ $PALANG['pFetchmail_password_missing'] = 'Ole hyvä ja syötä etäkäyttäjän
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Sähköpostilaatikko';
$PALANG['pFetchmail_field_src_server'] = 'Palvelin';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Tunnistautumisen tyyppi';
$PALANG['pFetchmail_field_src_user'] = 'Käyttäjä';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -383,7 +378,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Palautettu teksti';
$PALANG['pFetchmail_desc_id'] = 'Tietue ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Paikallinen sähköpostilaatikko';
$PALANG['pFetchmail_desc_src_server'] = 'Etäpalvelin';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Useimmiten \'password\'';
$PALANG['pFetchmail_desc_src_user'] = 'Etäkäyttäjä';
$PALANG['pFetchmail_desc_src_password'] = 'Etäkäyttäjän salasana';
@ -399,8 +393,6 @@ $PALANG['pFetchmail_desc_date'] = 'Viimeisen tarkistuksen/konfiguraa
$PALANG['pFetchmail_desc_returned_text'] = 'Viesti edellisestä tarkistuksesta';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -139,7 +139,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Fái ikki broytt dulnevni! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Stovna ein nýggjan postkassa á tínum navnaøki.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-post adressan er ógyldug!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Tú hevur nýtt tínum marki at stovna postkassar!';
$PALANG['pCreate_mailbox_password_text'] = 'Loyniorð til POP3/IMAP';
@ -343,13 +342,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -368,7 +364,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -388,7 +383,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -404,8 +398,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -26,7 +26,7 @@ $PALANG['confirm_delete_mailbox'] = 'Êtes-vous sûr de vouloir supprimer la bo
$PALANG['confirm_delete_vacation'] = 'Êtes-vous sûr de vouloir supprimer le message d\'absence pour %s?';
$PALANG['no_delete_permissions'] = 'Vous n\'êtes pas autorisé à supprimer %s !';
$PALANG['check_update'] = 'Vérifier les mises à jour';
$PALANG['invalid_parameter'] = 'Paramètre invalide !';
$PALANG['invalid_parameter'] = 'Paramètres invalides !';
$PALANG['show'] = 'Afficher:';
$PALANG['all'] = 'Tous';
$PALANG['created'] = 'Créé';
@ -37,7 +37,7 @@ $PALANG['must_be_numeric'] = '%s doit être au format numérique';
$PALANG['must_be_numeric_bigger_than_null'] = '%s doit être au format numérique et plus grand que 0';
$PALANG['must_be_boolean'] = '%s doit être booléen';
$PALANG['invalid_value_given'] = 'Valeur incorrecte pour %s';
$PALANG['edit_not_allowed'] = 'Vous n\'êtes pas autorisé à éditer %s';
$PALANG['edit_not_allowed'] = 'Vous n\'êtes pas autorisé à editer %s';
$PALANG['searchparams'] = 'Paramètre de recherche :';
$PALANG['pFooter_logged_as'] = 'Connecté en tant que %s';
@ -58,7 +58,7 @@ $PALANG['pMenu_fetchmail'] = 'Récupérer le courrier';
$PALANG['pMenu_sendmail'] = 'Envoyer un courriel';
$PALANG['pMenu_password'] = 'Mot de passe';
$PALANG['pMenu_viewlog'] = 'Journal';
$PALANG['pMenu_logout'] = 'Déconnexion';
$PALANG['pMenu_logout'] = 'Sortir';
$PALANG['pMain_welcome'] = 'Bienvenue sur Postfix Admin !';
$PALANG['pMain_overview'] = 'Visualiser vos alias et comptes courriels. (Modifier/Effacer)';
@ -66,8 +66,8 @@ $PALANG['pMain_create_alias'] = 'Ajouter un nouvel alias à votre domaine.';
$PALANG['pMain_create_mailbox'] = 'Ajouter un nouveau compte courriel à votre domaine.';
$PALANG['pMain_sendmail'] = 'Envoyer un courriel à un de vos nouveaux comptes courriels.';
$PALANG['pMain_password'] = 'Changer votre mot de passe pour le compte administrateur.';
$PALANG['pMain_viewlog'] = 'Visualiser le journal des événements.';
$PALANG['pMain_logout'] = 'Déconnexion du système';
$PALANG['pMain_viewlog'] = 'Visualiser le fichier d\'événements.';
$PALANG['pMain_logout'] = 'Sortir du système';
$PALANG['pOverview_disabled'] = 'Désactivé';
$PALANG['pOverview_unlimited'] = 'Illimité';
@ -80,16 +80,16 @@ $PALANG['pOverview_alias_title'] = ':: Alias';
$PALANG['pOverview_mailbox_title'] = ':: Comptes courriels';
$PALANG['go'] = 'Aller';
$PALANG['pOverview_welcome'] = 'Vue d\'ensemble pour ';
$PALANG['pOverview_alias_domain_aliases'] = 'Alias de domaines';
$PALANG['pOverview_alias_domain_aliases'] = 'Alias de Domaines';
$PALANG['pOverview_alias_address'] = 'De';
$PALANG['active'] = 'Actif';
$PALANG['and_x_more'] = '[et %s en plus...]';
$PALANG['pOverview_mailbox_username'] = 'courriel';
$PALANG['name'] = 'Nom';
$PALANG['pOverview_mailbox_quota'] = 'Limite (Mo)';
$PALANG['pOverview_vacation_edit'] = 'RÉPONDEUR ACTIVE';
$PALANG['pOverview_vacation_edit'] = 'REPONDEUR ACTIVE';
$PALANG['pOverview_vacation_option'] = 'Configurer le répondeur';
$PALANG['no_domains_for_this_admin'] = 'Vous n\'avez les permissions pour aucun domaine.';
$PALANG['no_domains_for_this_admin'] = 'Vous n\'avez de permissions pour aucun domaine.';
$PALANG['no_domains_exist'] = 'Vous devez créer au moins un domaine avant d\'utiliser la Liste des Virtuels.';
$PALANG['domain'] = 'Domaine';
@ -101,12 +101,12 @@ $PALANG['pDelete_delete_error'] = 'Impossible d\'effacer cette entrée ';
$PALANG['pDelete_delete_success'] = '%s supprimé.';
$PALANG['pDelete_domain_error'] = 'Ce domaine n\'est pas le votre ';
$PALANG['pDelete_alias_error'] = 'Impossible d\'effacer cet alias ';
$PALANG['pCreate_alias_domain_welcome'] = 'Les adresses mirroir de l\'un de vos domaines vers un autre.';
$PALANG['pCreate_alias_domain_welcome'] = 'Les adresses mirroirs de l\'un de vos domaines vers un autre.';
$PALANG['pCreate_alias_domain_alias'] = 'Alias de domaine';
$PALANG['pCreate_alias_domain_alias_text'] = 'Le domaine de réception du courrier (source).';
$PALANG['pCreate_alias_domain_alias_text'] = 'Le domaine de récéption du courrier (source).';
$PALANG['pCreate_alias_domain_target'] = 'Domaine cible';
$PALANG['pCreate_alias_domain_target_text'] = 'Le domaine qui va réceptionner le courrier à la place.';
$PALANG['pCreate_alias_domain_error1'] = 'Vous n\'êtes pas autorisé à créer la configuration choisie.';
$PALANG['pCreate_alias_domain_error1'] = 'Vous n\'êtes pas autorisé a créer la configuration choisie.';
$PALANG['pCreate_alias_domain_error2'] = 'La configuration choisie est invalide, merci d\'en choisir une autre !';
$PALANG['alias_domain_already_exists'] = 'Ce domaine est déjà un alias de domaine !';
$PALANG['alias_domain_does_not_exist'] = 'Ce domaine n\'est pas un alias de domaine !';
@ -131,18 +131,17 @@ $PALANG['mailbox_alias_cant_be_deleted'] = 'Cet alias appartient à un compte co
$PALANG['protected_alias_cant_be_deleted'] = 'L\'alias %s est protégé et ne peut être supprimé que par un Super Administrateur.';
$PALANG['pEdit_alias_welcome'] = 'Modifier les paramètres de transfert.';
$PALANG['pEdit_alias_help'] = 'Destinataires multiples acceptés, une entrée par ligne.';
$PALANG['pEdit_alias_help'] = 'Cibles multiples acceptées, une entrée par ligne.';
$PALANG['alias'] = 'Alias';
$PALANG['to'] = 'À';
$PALANG['pEdit_alias_goto_text_error1'] = 'Vous devez renseigner quelque chose dans le champ À';
$PALANG['pEdit_alias_goto_text_error2'] = 'L\'adresse email que vous avez indiquée est invalide: ';
$PALANG['pEdit_alias_goto_text_error2'] = 'L\'adresse email que vous avez indiqué est invalide: ';
$PALANG['pEdit_alias_domain_result_error'] = 'Impossible de modifier cet alias de domaine !';
$PALANG['pEdit_alias_forward_and_store'] = 'Conserver une copie des messages dans la boîte aux lettres.';
$PALANG['pEdit_alias_forward_and_store'] = 'Conserver une copie des messages dans la boite aux lettres.';
$PALANG['pEdit_alias_forward_only'] = 'Transférer les messages sans conserver de copie.';
$PALANG['pEdit_alias_result_error'] = 'Échec de la modification de l\'alias %s !';
$PALANG['pCreate_mailbox_welcome'] = 'Ajouter un nouveau compte courriel à votre domaine.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'L\'adresse email est invalide !';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Vous avez atteint le nombre maximum de comptes courriel !';
$PALANG['pCreate_mailbox_password_text'] = 'Mot de passe pour le compte POP3/IMAP';
@ -194,8 +193,8 @@ $PALANG['pVacation_result_added'] = 'Le répondeur de %s a été activé !';
$PALANG['pVacation_reply_type'] = 'Type de réponse';
$PALANG['pVacation_reply_delay_time'] = 'Intervalle';
$PALANG['pVacation_reply_delay_time_text'] = 'Durée en secondes';
$PALANG['pVacation_until_before_today'] = 'La date de [Actif jusqu\'au] est antérieure à la date d\'aujourd\'hui';
$PALANG['pVacation_until_before_from'] = 'La date de [Actif jusqu\'au] est antérieure à [Actif à partir de]';
$PALANG['pVacation_until_before_today'] = 'La date de [Actif jusqu\'au] est antèrieure à la date d\'aujourd\'hui';
$PALANG['pVacation_until_before_from'] = 'La date de [Actif jusqu\'au] est antèrieure à [Actif à partir de]';
$PALANG['reply_once'] = 'Répondre une seule fois';
$PALANG['reply_every_mail'] = 'Répondre à chaque message';
$PALANG['reply_once_per_day'] = 'Répondre une fois par jour';
@ -219,7 +218,7 @@ $PALANG['pViewlog_action_delete_alias'] = 'supprimer un alias';
$PALANG['pViewlog_action_delete_alias_domain'] = 'supprimer un alias de domaine';
$PALANG['pViewlog_action_edit_alias'] = 'éditer un alias';
$PALANG['pViewlog_action_edit_alias_state'] = 'activer un alias';
$PALANG['pViewlog_action_edit_alias_domain_state'] = 'éditer l\'alias de domaine actif';
$PALANG['pViewlog_action_edit_alias_domain_state'] = 'éditer alias de domaine actif';
$PALANG['pViewlog_action_edit_password'] = 'changer le mot de passe';
$PALANG['pViewlog_action_create_admin'] = 'créer un administrateur';
$PALANG['pViewlog_action_edit_admin'] = 'modifier un administrateur';
@ -284,7 +283,7 @@ $PALANG['pAdminEdit_domain_maxquota'] = 'Limite maximum';
$PALANG['pAdminEdit_domain_maxquota_text'] = 'Mo | -1 = désactivé | 0 = illimité';
$PALANG['pAdminEdit_domain_quota'] = 'Quota du Domaine';
$PALANG['transport'] = 'Transport';
$PALANG['pAdminEdit_domain_transport_text'] = 'Définir le transport';
$PALANG['pAdminEdit_domain_transport_text'] = 'Definir le transport';
$PALANG['pAdminEdit_domain_backupmx'] = 'Le serveur est un "Backup MX"';
$PALANG['pAdminEdit_domain_result_error'] = 'Échec de la mise à jour du domaine %s';
@ -308,7 +307,7 @@ $PALANG['pAdminEdit_admin_result_success'] = 'L\'administrateur %s a été ajout
$PALANG['pUsersLogin_welcome'] = 'Entrer votre adresse email pour modifier votre mot de passe et vos transferts.';
$PALANG['pUsersLogin_username_incorrect'] = 'L\'adresse email est invalide. Assurez-vous d\'avoir correctement saisi votre adresse email !';
$PALANG['pUsersLogin_password_incorrect'] = 'Votre mot de passe est invalide !';
$PALANG['pUsersLogin_password_recover'] = 'Mot de passe oublié';
$PALANG['pUsersLogin_password_recover'] = 'J\'ai oublié mon mot de passe';
$PALANG['pUsersMenu_vacation'] = 'Réponse Automatique';
$PALANG['pUsersMenu_edit_alias'] = 'Modifier votre transfert';
@ -319,7 +318,7 @@ $PALANG['pUsersMain_edit_alias'] = 'Modifier vos transferts de courriel.';
$PALANG['pUsersMain_password'] = 'Changer votre mot de passe.';
$PALANG['pUsersVacation_welcome'] = 'Répondeur Automatique.';
$PALANG['pUsersVacation_welcome_text'] = 'Le répondeur automatique pour l\'adresse %s est déjà configuré !';
$PALANG['pUsersVacation_welcome_text'] = 'Le repondeur automatique pour l\'adresse %s est déjà configuré !';
$PALANG['pUsersVacation_subject_text'] = 'Notification d\'absence';
$PALANG['message'] = 'Message';
$PALANG['pUsersVacation_body_text'] = <<<EOM
@ -338,21 +337,18 @@ $PALANG['pReturn_to'] = 'Réponse à';
$PALANG['pBroadcast_title'] = 'Envoyer un message général';
$PALANG['pBroadcast_name'] = 'Votre nom';
$PALANG['pBroadcast_success'] = 'Votre message général a été envoyé.';
$PALANG['pAdminMenu_broadcast_message'] = 'Message général';
$PALANG['pAdminMenu_broadcast_message'] = 'message général';
$PALANG['pBroadcast_error_empty'] = 'Les champs "Nom", "Sujet" et "Message" ne peuvent pas être vides !';
$PALANG['broadcast_mailboxes_only'] = 'Envoyer seulement aux comptes courriel';
$PALANG['broadcast_to_domains'] = 'Envoyer aux domaines:';
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'Non délivrable ';
$PALANG['pStatus_disabled'] = 'Compte désactivé ';
$PALANG['pStatus_expired'] = 'Mot de passe expiré ';
$PALANG['pStatus_vacation'] = 'Répondeur activé ';
$PALANG['pStatus_custom'] = 'Délivré à ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = 'Mot de passe trop court. - %s caractères minimum';
$PALANG['password_no_characters'] = 'Votre mot de passe doit contenir au moins %s lettres (A-Z, a-z).';
$PALANG['password_no_characters'] = 'Votre mot de passe doit contenir au moins %s caractères.';
$PALANG['password_no_digits'] = 'Votre mot de passe doit contenir au moins %s chiffres.';
$PALANG['pInvalidDomainRegex'] = 'Nom de domaine invalide %s, vérification "regexp" impossible';
$PALANG['pInvalidDomainDNS'] = 'Le domaine %s est invalide et/ou non résolvable via les DNS';
$PALANG['pInvalidDomainDNS'] = 'Le domaine %s est invalide et/ou non resolvable via les DNS';
$PALANG['pInvalidMailRegex'] = 'L\'adresse email %s est invalide, vérification "regexp" impossible';
$PALANG['pFetchmail_welcome'] = 'Récupérer le courrier pour :';
$PALANG['pFetchmail_new_entry'] = 'Nouvelle entrée';
@ -368,7 +364,6 @@ $PALANG['pFetchmail_password_missing'] = 'Merci d\'indiquer le mot de passe dist
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Compte courriel';
$PALANG['pFetchmail_field_src_server'] = 'Serveur';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Type Auth';
$PALANG['pFetchmail_field_src_user'] = 'Utilisateur';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -388,7 +383,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Message retour';
$PALANG['pFetchmail_desc_id'] = 'Identifiant';
$PALANG['pFetchmail_desc_mailbox'] = 'Compte courriel local';
$PALANG['pFetchmail_desc_src_server'] = 'Serveur distant';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Surtout \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Utilisateur distant';
$PALANG['pFetchmail_desc_src_password'] = 'Mot de passe distant';
@ -404,8 +398,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date de la dernière vérification/changement
$PALANG['pFetchmail_desc_returned_text'] = 'Message de la dernière vérification';
$PALANG['dateformat_pgsql'] = 'dd-mm-YYYY';
$PALANG['dateformat_mysql'] = '%d-%m-%Y';
$PALANG['password_expiration'] = 'Expiration du mot de passe';
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -1,407 +0,0 @@
<?php
# $Id$
//
// Language file Spanish
// by Alexandre Espinosa Menor <aemenor@gmail.com>
$PALANG['YES'] = 'SI';
$PALANG['NO'] = 'NON';
$PALANG['edit'] = 'editar';
$PALANG['del'] = 'borrar';
$PALANG['exit'] = 'Sair';
$PALANG['cancel'] = 'Cancelar';
$PALANG['save'] = 'Gardar'; # XXX Text change: "Save" -> "Save changes"
$PALANG['confirm'] = 'Está seguro que desexa borralo?\n';
$PALANG['confirm_delete_admin'] = 'Realmente quere borrar o/a administrador/a %s?'; # XXX
$PALANG['confirm_delete_alias'] = 'Realmente quere borrar o alias %s?'; # XXX
$PALANG['confirm_delete_aliasdomain'] = 'Realmente quere borrar o alias de dominio %s?'; # XXX
$PALANG['confirm_delete_domain'] = 'Está seguro que desexa borrar todos os rexistros deste dominio? Non se pode desfacer!\n (%s)'; # XXX text changed to: 'Do you really want to delete all records for the domain %s? This can not be undone'
$PALANG['confirm_delete_fetchmail'] = 'Realmente quere borrar a tarefa de fetchmail %s?'; # XXX
$PALANG['confirm_delete_mailbox'] = 'Realmente quere borrar o buzón %s?'; # XXX
$PALANG['confirm_delete_vacation'] = 'Realmente quere borrar a mensaxe de ausencia de %s?'; # XXX
$PALANG['no_delete_permissions'] = 'Non ten permisos para borrar %s!'; # XXX
$PALANG['check_update'] = 'Comprobar actualización'; # XXX
$PALANG['invalid_parameter'] = 'Par&aacute;metro inválido!';
$PALANG['show'] = 'Ver:'; # XXX
$PALANG['all'] = 'Todo'; # XXX
$PALANG['created'] = 'Creado'; # XXX
$PALANG['unknown'] = 'descoñecido'; # XXX
$PALANG['download_csv'] = 'Descarga esta lista como un ficheiro CSV'; # XXX
$PALANG['missing_field'] = 'Non existe o campo %s '; # XXX
$PALANG['must_be_numeric'] = '%s debe ser numérico'; # XXX
$PALANG['must_be_numeric_bigger_than_null'] = '%s debe ser numérico e maior que 0'; # XXX
$PALANG['must_be_boolean'] = '%s debe ser booleano'; # XXX
$PALANG['invalid_value_given'] = 'Valor inválido para %s'; # XXX
$PALANG['edit_not_allowed'] = 'Non ten permisos para editar %s'; # XXX
$PALANG['searchparams'] = 'Buscar parámetros:'; # XXX
$PALANG['pFooter_logged_as'] = 'Autenticado como %s'; # XXX Text change: 'logged in as %s' (the 'in' was missing)
$PALANG['pLogin_welcome'] = 'Login de administrador para administración de dominios.';
$PALANG['pLogin_username'] = 'Usuario (e-mail)'; # XXX compare with pUsersLogin_username - should be "Login (email)"
$PALANG['password'] = 'Contrasinal';
$PALANG['pLogin_language'] = 'Linguaxe'; # XXX
$PALANG['pLogin_button'] = 'Usuario'; # XXX compare with pUsersLogin_button - should be "Login"
$PALANG['pLogin_failed'] = 'A conta de email ou o contrasinal non son correctas.';
$PALANG['pLogin_login_users'] = 'Login para ir á sección de usuarios.';
$PALANG['pMenu_main'] = 'Principal';
$PALANG['pMenu_overview'] = 'Resumo';
$PALANG['add_alias'] = 'Engadir alias';
$PALANG['add_alias_domain'] = 'Engadir alias de dominio'; # XXX check text - should be 'Add Alias Domain'
$PALANG['add_mailbox'] = 'Engadir buzón';
$PALANG['pMenu_fetchmail'] = 'Obter Emails';
$PALANG['pMenu_sendmail'] = 'Enviar e-mail';
$PALANG['pMenu_password'] = 'Contrasinal';
$PALANG['pMenu_viewlog'] = 'Ver Logs';
$PALANG['pMenu_logout'] = 'Sair';
$PALANG['pMain_welcome'] = 'Benvido/a a Postfix Admin!';
$PALANG['pMain_overview'] = 'Listado dos alias e buzóns. Pode editalos / borralos desde aquí.';
$PALANG['pMain_create_alias'] = 'Creación dun novo alias para o seu dominio.'; # XXX check text - should be 'Create a new alias for your domain.'
$PALANG['pMain_create_mailbox'] = 'Creación dun nuevo buzón para o seu dominio.';
$PALANG['pMain_sendmail'] = 'Enviar un e­mail a un dos buzóns recentemente creados.';
$PALANG['pMain_password'] = 'Cambiar o contrasinal para a súa conta de administración.';
$PALANG['pMain_viewlog'] = 'Ver Logs.';
$PALANG['pMain_logout'] = 'Sair.';
$PALANG['pOverview_disabled'] = 'Desabilitado';
$PALANG['pOverview_unlimited'] = 'Ilimitado';
$PALANG['pOverview_title'] = ':: Dominios Definidos';
$PALANG['pOverview_up_arrow'] = 'Arriba';
$PALANG['pOverview_right_arrow'] = 'Páxina seguinte';
$PALANG['pOverview_left_arrow'] = 'Páxina anterior';
$PALANG['pOverview_alias_domain_title'] = ':: Alias de Dominios';
$PALANG['pOverview_alias_title'] = ':: Alias';
$PALANG['pOverview_mailbox_title'] = ':: Buzóns';
$PALANG['go'] = 'Ir';
$PALANG['pOverview_welcome'] = 'Resumo de ';
$PALANG['pOverview_alias_domain_aliases'] = 'Alias de Dominios';
$PALANG['pOverview_alias_address'] = 'De';
$PALANG['active'] = 'Activo';
$PALANG['and_x_more'] = '[e %s máis...]';
$PALANG['pOverview_mailbox_username'] = 'E-mail';
$PALANG['name'] = 'Nome';
$PALANG['pOverview_mailbox_quota'] = 'Cota (MB)';
$PALANG['pOverview_vacation_edit'] = 'VACATION ESTÁ ACTIVADO';
$PALANG['pOverview_vacation_option'] = 'Establecer Vacation';
$PALANG['no_domains_for_this_admin'] = 'Non ten permisos para nengún dominio.'; # XXX
$PALANG['no_domains_exist'] = 'Debe crear cando menos un dominio antes de empregar unha lista virtual.'; # "virtual list" should match $PALANG['pAdminMenu_list_virtual'] # XXX
$PALANG['domain'] = 'Dominio';
$PALANG['pOverview_get_alias_domains'] = 'Alias de Dominios';
$PALANG['mailboxes'] = 'Buzóns';
$PALANG['pOverview_get_quota'] = 'Cota de buzón (MB)';
$PALANG['pDelete_delete_error'] = 'Imposible borrar o rexistro ';
$PALANG['pDelete_delete_success'] = '%s borrado.';
$PALANG['pDelete_domain_error'] = 'Este dominio non lle pertence ';
$PALANG['pDelete_alias_error'] = 'Non se puido eliminar o alias ';
$PALANG['pCreate_alias_domain_welcome'] = 'Sincronizar direccións dun dominio a outro.';
$PALANG['pCreate_alias_domain_alias'] = 'Alias de Dominio';
$PALANG['pCreate_alias_domain_alias_text'] = 'O dominio ao que cheega o email.';
$PALANG['pCreate_alias_domain_target'] = 'Dominio de destino';
$PALANG['pCreate_alias_domain_target_text'] = 'O dominio ao que deberían ir os emails.';
$PALANG['pCreate_alias_domain_error1'] = 'Non estás autorizado a crear a configuración que elexiches.';
$PALANG['pCreate_alias_domain_error2'] = 'A configuración seleccionada non é válida, por favor elixe unha distinta!';
$PALANG['alias_domain_already_exists'] = 'Xa existe un alias para este dominio!'; # XXX
$PALANG['alias_domain_does_not_exist'] = 'Non existe un alias para este dominio!'; # XXX
$PALANG['alias_domain_create_failed'] = 'Fallou a inserción na base de datos. (%s)'; # XXX Text changed to: Creating the alias domain %s failed!
$PALANG['alias_domain_change_failed'] = 'Errou o cambio de alias do dominio %s!'; # XXX
$PALANG['pCreate_alias_domain_error4'] = 'Xa están todos os dominios asignados.';
$PALANG['pCreate_alias_domain_success'] = 'O alias de dominio insertouse na táboa! (%s)'; # XXX Text changed to: The alias domain %s has been created.
$PALANG['alias_domain_changed'] = 'O alias do dominio cambiouse.'; # XXX
$PALANG['alias_domain_to_itsself'] = 'Un dominio non pode ser un alias de dominio de sí mesmo!'; # XXX
$PALANG['delete_domain_aliasdomain_target'] = 'O dominio %s é o destino dun ou máis alias de dominio e non pode ser borrado! (Borra primeiro os alias do dominio.)'; # XXX
$PALANG['pCreate_alias_address_text_error1'] = 'O ALIAS non é válido!';
$PALANG['alias_does_not_exist'] = 'Este alias non existe!'; # XXX
$PALANG['email_address_already_exists'] = '¡Esta dirección xa existe, elixa outra diferente por favor!'; # XXX check text - should be 'This email address already exists, please choose a different one\!'
$PALANG['pCreate_alias_address_text_error3'] = 'Chegou ao seu límite de creación de alias!';
$PALANG['pCreate_alias_goto_text'] = 'Onde debe de ser enviado o e-mail.';
$PALANG['pCreate_alias_goto_text_error'] = 'O PARA non é válido!';
$PALANG['pCreate_alias_result_error'] = 'Non é posible engadir o alias á táboa de alias! (%s)'; # XXX Text changed to: Creating the alias %s failed!
$PALANG['pCreate_alias_result_success'] = 'O alias foi engadido á táboa de alias!'; # XXX text change: 'The alias %s has been created!'
$PALANG['alias_updated'] = 'O alias %s foi actualizado!'; # XXX
$PALANG['pCreate_alias_catchall_text'] = 'Para crear un alias xeral use "*" como alias. Para unha redirección de dominio a dominio, use "*@domain.tld" como Destino.'; # XXX check/beautify - was split in two lines before
$PALANG['mailbox_alias_cant_be_deleted'] = 'Este alias pertence a un buzón e non pode borrarse!'; # XXX
$PALANG['protected_alias_cant_be_deleted'] = 'O alias %s está protexido e só pode ser borrado por un superadmin'; # XXX
$PALANG['pEdit_alias_welcome'] = 'Edite un alias para o seu dominio.'; # XXX Text change to: 'Edit forwarding settings'
$PALANG['pEdit_alias_help'] = 'Unha entrada por liña.'; # XXX # XXX Text change to: 'Accepts multiple targets, one entry per line.'
$PALANG['alias'] = 'Alias';
$PALANG['to'] = 'Destino';
$PALANG['pEdit_alias_goto_text_error1'] = 'Non introduciu nada no destino';
$PALANG['pEdit_alias_goto_text_error2'] = 'A dirección de e-mail introducida non é válida: ';
$PALANG['pEdit_alias_domain_result_error'] = 'Non se puido modificar o alias de dominio!';
$PALANG['pEdit_alias_forward_and_store'] = 'Entregar no buzón local.';
$PALANG['pEdit_alias_forward_only'] = 'Reenviar só ao email especificado.';
$PALANG['pEdit_alias_result_error'] = 'Imposible modificar o alias! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Crear un novo buzón para o seu dominio.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'O email non é válido!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Chegou ao límite de creación de buzóns!';
$PALANG['pCreate_mailbox_password_text'] = 'Contrasinal para POP3/IMAP';
$PALANG['pCreate_mailbox_name_text'] = 'Nome completo';
$PALANG['pCreate_mailbox_phone'] = 'Teléfono móvil'; # XXX
$PALANG['pCreate_mailbox_phone_desc'] = "Empregado para enviar un SMS se esquece o seu contrasinal"; # XXX
$PALANG['pCreate_mailbox_email'] = 'Outro email'; # XXX
$PALANG['pCreate_mailbox_email_desc'] = "Empregado se esquece o seu contrasinal"; # XXX
$PALANG['pCreate_mailbox_mail'] = 'Enviar correo benvida';
$PALANG['pCreate_mailbox_result_error'] = 'Imposible engadir un buzón á táboa de buzóns! (%s)'; # XXX Text changed to: Creating the mailbox %s failed!
$PALANG['pCreate_mailbox_result_success'] = 'O buzón foi engadido á táboa de buzóns! (%s)'; # XXX Text changed to: The mailbox %s has been added to the mailbox table!
$PALANG['pCreate_mailbox_result_succes_nosubfolders'] = 'O buzón %s foi engadido á táboa de buzóns, pero nengún (ou só algún) das subcarpetas predefinidas puideron ser creadas.'; # XXX
$PALANG['mailbox_updated'] = "O buzón %s fpoi actualizado."; # XXX
$PALANG['mailbox_update_failed'] = "A actualización do buzón %s fallou!"; # XXX
$PALANG['pEdit_mailbox_welcome'] = 'Editar un buzón para o seu dominio.';
$PALANG['pEdit_mailbox_username'] = 'Usuario';
$PALANG['pEdit_mailbox_password_text_error'] = 'Os contrasinais introducidos non coinciden!';
$PALANG['pEdit_mailbox_quota'] = 'Cota';
$PALANG['pEdit_mailbox_quota_text'] = 'MB';
$PALANG['mb_max'] = 'MB (max: %s)'; # XXX
$PALANG['pEdit_mailbox_quota_text_error'] = 'A cota especificada é demasiado alta!';
$PALANG['pEdit_mailbox_domain_error'] = 'Este dominio non lle pertence: ';
$PALANG['pEdit_mailbox_result_error'] = 'Imposible mudar o contrasinal!';
$PALANG['pPassword_welcome'] = 'Cambie o seu contrasinal de login.';
$PALANG['pPassword_admin'] = 'Login';
$PALANG['pPassword_password_current'] = 'Contrasinal actual';
$PALANG['pPassword_password_current_text_error'] = 'Non se introduciu o contrasinal actual!';
$PALANG['pPassword_password'] = 'Novo contrasinal';
$PALANG['pPassword_password2'] = 'Novo contrasinal (repetir)';
$PALANG['pPassword_password_text_error'] = 'Os contrasinais introducidos non coinciden ou están en branco!'; # XXX check/beautify - was split in two lines before
$PALANG['change_password'] = 'Cambiar contrasinal'; # XXX check text - should be 'Change Password'
$PALANG['pPassword_result_error'] = 'Imposible mudar o contrasinal! (%s)'; # XXX Text changed to: Changing the password for %s failed!
$PALANG['pPassword_result_success'] = 'o seu contrasinal foi cambiado! (%s)'; # XXX Text changed to: The password for %s has been changed.
$PALANG['pPassword_recovery_title'] = 'Siga as instruccións para mudar o seu contrasinal.'; # XXX
$PALANG['pPassword_recovery_button'] = 'Enviar o código'; # XXX
$PALANG['pPassword_recovery_email_body'] = "Olá,\n\nUse a seguinte ligazón para mudar o seu contrasinal de correo :\n%s\n\nGrazas,\n\n" . $CONF['admin_name']; # XXX
$PALANG['pPassword_recovery_sms_body'] = "Olá,\nO código para mudar o seu contrasinal é: %s\n" . $CONF['admin_name']; # XXX
$PALANG['pPassword_recovery_processed'] = "Procesouse a súa petición. Se introduciu un usuario válido, recibirá un email/SMS con un código de contrasinal."; # XXX
$PALANG['pPassword_password_code'] = 'Código enviado por email/SMS'; # XXX
$PALANG['pPassword_code_text_error'] = 'Código inválido'; # XXX
$PALANG['pEdit_vacation_set'] = 'Cambiar / Establecer mensaxe de ausencia';
$PALANG['pEdit_vacation_remove'] = 'Quitar mensaxe de ausencia';
$PALANG['pVacation_result_error'] = 'Imposible actualizar a configuración e a resposta automática! (%s)'; # XXX Text changed to: Updating the auto response settings for %s failed
$PALANG['pVacation_result_removed'] = 'Autoresposta eliminada! (%s)'; # XXX Text changed to "Auto response for %s has been disabled!"
$PALANG['pVacation_result_added'] = 'Autoresposta habilitada! (%s)'; # XXX Text changed to "Auto response for %s has been enabled!"
$PALANG['pVacation_reply_type'] = 'Escolla de resposta'; # XXX
$PALANG['pVacation_reply_delay_time'] = 'Intervalo de tempo'; # XXX
$PALANG['pVacation_reply_delay_time_text'] = 'Tempo en segundos'; # XXX
$PALANG['pVacation_until_before_today'] = 'The Date of [Active until] is set before Today'; # XXX
$PALANG['pVacation_until_before_from'] = 'The Date of [Active until] is set before [Active from]'; # XXX
$PALANG['reply_once'] = 'Respostar unha vez'; # XXX
$PALANG['reply_every_mail'] = 'Respostar cada email'; # XXX
$PALANG['reply_once_per_day'] = 'Respostar unha vez ao día'; # XXX
$PALANG['reply_once_per_week'] = 'Respostar unha vez á semana'; # XXX
$PALANG['pViewlog_welcome'] = 'Ver as últimas %s accións para ';
$PALANG['pViewlog_timestamp'] = 'Data/Hora';
$PALANG['pViewlog_action'] = 'Acción';
$PALANG['pViewlog_data'] = 'Datos';
$PALANG['pViewlog_action_create_domain'] = 'crear domain'; # XXX
$PALANG['pViewlog_action_delete_domain'] = 'borrar domain'; # XXX
$PALANG['pViewlog_action_edit_domain'] = 'editar domain'; # XXX
$PALANG['pViewlog_action_create_mailbox'] = 'crear buzón';
$PALANG['pViewlog_action_delete_mailbox'] = 'borrar buzón';
$PALANG['pViewlog_action_edit_mailbox'] = 'editar buzón';
$PALANG['pViewlog_action_edit_mailbox_state'] = 'editar buzón activo';
$PALANG['pViewlog_action_create_alias'] = 'crear alias';
$PALANG['pViewlog_action_create_alias_domain'] = 'crear alias de dominio';
$PALANG['pViewlog_action_edit_alias_domain'] = 'editar alias de dominio'; # XXX
$PALANG['pViewlog_action_delete_alias'] = 'borrar alias';
$PALANG['pViewlog_action_delete_alias_domain'] = 'borrar alias de dominio';
$PALANG['pViewlog_action_edit_alias'] = 'editar alias';
$PALANG['pViewlog_action_edit_alias_state'] = 'editar alias activo';
$PALANG['pViewlog_action_edit_alias_domain_state'] = 'editar alias de dominio activo';
$PALANG['pViewlog_action_edit_password'] = 'cambiar contrasinal';
$PALANG['pViewlog_action_create_admin'] = 'crear admin'; # XXX
$PALANG['pViewlog_action_edit_admin'] = 'editar admin'; # XXX
$PALANG['pViewlog_action_delete_admin'] = 'borrar admin'; # XXX
$PALANG['pViewlog_action_edit_vacation'] = 'editar ausencia'; # XXX
$PALANG['pViewlog_action_create_fetchmail'] = 'crear tarefa de fetchmail'; # XXX
$PALANG['pViewlog_action_edit_fetchmail'] = 'editar tarefa de fetchmail'; # XXX
$PALANG['pViewlog_action_delete_fetchmail'] = 'borrar tarefa de fetchmail'; # XXX
$PALANG['pViewlog_result_error'] = 'Imposible atopar os logs!';
$PALANG['pSendmail_welcome'] = 'Enviar un email.';
$PALANG['from'] = 'De';
$PALANG['pSendmail_to'] = 'Destino';
$PALANG['pSendmail_to_text_error'] = 'A dirección destino está baleira o é unha dirección inválida!';
$PALANG['subject'] = 'Asunto';
$PALANG['pSendmail_subject_text'] = 'Benvido';
$PALANG['pSendmail_body'] = 'Corpo';
$PALANG['pSendmail_button'] = 'Enviar mensaxe';
$PALANG['pSendmail_result_error'] = 'Imposible enviar o email! (%s)'; # XXX text change - new: Unable to send email to %s!
$PALANG['pSendmail_result_success'] = 'Email enviado! (%s)'; # XXX text change - new: Email sent to %s.
$PALANG['pAdminMenu_list_admin'] = 'Lista de administradores';
$PALANG['pAdminMenu_list_domain'] = 'Lista de dominios';
$PALANG['pAdminMenu_list_virtual'] = 'Lista de direccións virtuais';
$PALANG['pAdminMenu_backup'] = 'Backup';
$PALANG['pAdminMenu_create_domain_admins'] = 'Administradores de dominio';
$PALANG['pAdminMenu_create_admin'] = 'Novo administrador';
$PALANG['pAdminMenu_create_domain'] = 'Novo dominio';
$PALANG['pAdminList_admin_count'] = 'Dominios';
$PALANG['description'] = 'Descripción';
$PALANG['aliases'] = 'Alias';
$PALANG['pAdminList_domain_quota'] = 'Cota de dominio (MB)'; # XXX
$PALANG['pAdminList_domain_backupmx'] = 'Backup MX'; # XXX
$PALANG['last_modified'] = 'Última Modificación';
$PALANG['pAdminCreate_domain_welcome'] = 'Engadir novo dominio';
$PALANG['pAdminCreate_domain_domain_text_error'] = 'O dominio xa existe!';
$PALANG['domain_does_not_exist'] = 'O dominio non existe!'; # XXX
$PALANG['pAdminCreate_domain_domain_text_error2'] = 'O dominio non é válido!';
$PALANG['pAdminCreate_domain_defaultaliases'] = 'Engadir alias por defecto';
$PALANG['pAdminCreate_domain_button'] = 'Engadir dominio';
$PALANG['pAdminCreate_domain_result_error'] = 'Imposible engadir o dominio! (%s)'; # XXX Text changed to: Adding the domain %s failed!
$PALANG['pAdminCreate_domain_result_success'] = 'O dominio foi añadido! (%s)'; # XXX Text changed to: The domain %s has been added.
$PALANG['domain_updated'] = 'O dominio %s foi actualizado.'; # XXX
$PALANG['pAdminDelete_admin_error'] = 'Non se puido borrar admin!'; # XXX
$PALANG['domain_postdel_failed'] = 'Non se puido borrar o dominio!'; # XXX Text changed to: The domain postdeletion script failed, check the error log for details!
$PALANG['domain_postcreate_failed'] = 'Fallou o script executado despois da creación do dominio, revise o log!'; # XXX
$PALANG['mailbox_postdel_failed'] = 'Fallou o script executado despois do borrado do buzón, revise o log!'; # XXX
$PALANG['mailbox_postedit_failed'] = 'Fallou o script executado despois da edición do buzón, revise o log!'; # XXX
$PALANG['mailbox_postcreate_failed'] = 'Fallou o script executado despois da creación do buzón, revise o log!'; # XXX
$PALANG['pAdminDelete_alias_domain_error'] = 'Non se puido eliminar o alias do dominio!';
$PALANG['domain_conflict_vacation_domain'] = 'Non pode usar o dominio de ausencia como dominio de correo!'; # XXX
$PALANG['pAdminEdit_domain_welcome'] = 'Editar un dominio';
$PALANG['pAdminEdit_domain_aliases_text'] = '-1 = desabilitar | 0 = ilimitado';
$PALANG['pAdminEdit_domain_maxquota'] = 'Cota máxima';
$PALANG['pAdminEdit_domain_maxquota_text'] = 'MB | -1 = desabilitar | 0 = ilimitado';
$PALANG['pAdminEdit_domain_quota'] = 'Cota de dominio'; # XXX
$PALANG['transport'] = 'Transporte'; # XXX check text - should be 'Transport'
$PALANG['pAdminEdit_domain_transport_text'] = 'Definir transporte'; # XXX
$PALANG['pAdminEdit_domain_backupmx'] = 'O servidor de correo é backup MX'; # XXX
$PALANG['pAdminEdit_domain_result_error'] = 'Imposible modificar o dominio! (%s)'; # XXX Text changed to: Modifying the domain %s failed!
$PALANG['pAdminCreate_admin_welcome'] = 'Engadir un novo administrador de dominio';
$PALANG['email_address'] = 'Email';
$PALANG['pAdminCreate_admin_username_text_error1'] = 'Administrador/a non é un email válido!';
$PALANG['admin_already_exists'] = 'O/a administrador/a xa existe ou non é válido/a!'; # XXX Text changed to: The admin already exists!
$PALANG['admin_does_not_exist'] = 'O/a administrador/a non existe!'; # XXX
$PALANG['pAdminCreate_admin_button'] = 'Engadir administrador/a';
$PALANG['pAdminCreate_admin_result_error'] = 'Imposible engadir o/a administrador/a! (%s)'; # XXX Text changed to: Adding the admin %s failed!
$PALANG['pAdminCreate_admin_result_success'] = 'O/A administrador/a foi engadido! (%s)'; # XXX Text changed to: The admin %s has been added.
$PALANG['pAdminEdit_admin_welcome'] = 'Editar un/unha administrador/a de dominio';
$PALANG['admin'] = 'Administrador/a';
$PALANG['password_again'] = 'Contrasinal (repetir)';
$PALANG['super_admin'] = 'Super admin'; # XXX
$PALANG['super_admin_desc'] = 'Super admins teñen aceso a todos os dominios e poden manexar dominios e contas de administradores/as.'; # XXX
$PALANG['pAdminEdit_admin_result_error'] = 'Imposible modificar o/a administrador/a! (%s)'; # XXX Text changed to: Modifying the admin %s failed!
$PALANG['pAdminEdit_admin_result_success'] = 'O/A administrador/a foi modificado! (%s)'; # XXX Text changed to: The admin %s has been modified.
$PALANG['pUsersLogin_welcome'] = 'Login de usuarios para mudar o alias.';
$PALANG['pUsersLogin_username_incorrect'] = 'Su login no es correcto. ¡Asegúrese de haber introducido su dirección de e-mail como login!';
$PALANG['pUsersLogin_password_incorrect'] = '¡Su contraseña no es correcta!';
$PALANG['pUsersLogin_password_recover'] = 'I forgot my password'; # XXX
$PALANG['pUsersMenu_vacation'] = 'Resposta automática';
$PALANG['pUsersMenu_edit_alias'] = 'Cambiar a redirección';
$PALANG['pUsersMain_vacation'] = 'Configure unha mensaxe de "fora do traballo" ou unha resposta automática para o seu correo.';
$PALANG['pUsersMain_vacationSet'] = $PALANG['pUsersMenu_vacation'] . ' está ACTIVADO, click \'' . $PALANG['pUsersMenu_vacation'] . '\' para ' . $PALANG['edit'] . '/eliminar';
$PALANG['pUsersMain_edit_alias'] = 'Cambie a súa redirección de correo.';
$PALANG['pUsersMain_password'] = 'Cambie o seu contrasinal.';
$PALANG['pUsersVacation_welcome'] = 'Resposta automática.';
$PALANG['pUsersVacation_welcome_text'] = 'Xa dispón dunha resposta automática configurada! (%s)'; # XXX Text changed to: 'Auto response for %s is active!'
$PALANG['pUsersVacation_subject_text'] = 'Fóra do traballo';
$PALANG['message'] = 'Mensaxe';
$PALANG['pUsersVacation_body_text'] = <<<EOM
Estarei fóra desde <date> ata <date>.
Para asuntos urxentes, pode contactar comigo en <contact person>.
EOM;
$PALANG['pUsersVacation_activefrom'] = 'Activo desde'; # XXX
$PALANG['pUsersVacation_activeuntil'] = 'Activo ata'; # XXX
$PALANG['pEdit_dbLog_editactive'] = 'cambiar estado activo';
$PALANG['pSearch'] = 'buscar';
$PALANG['pSearch_welcome'] = 'Buscando: ';
$PALANG['pReturn_to'] = 'Volver a';
$PALANG['pBroadcast_title'] = 'Enviar mensaxe a todos'; # XXX
$PALANG['pBroadcast_name'] = 'O teu nombre';
$PALANG['pBroadcast_success'] = 'Enviouse a mensaxe.';
$PALANG['pAdminMenu_broadcast_message'] = 'Mensaxe de Broadcast'; # XXX
$PALANG['pBroadcast_error_empty'] = 'Os campos Nome, Asunto e Mensaxe non poden estar baleiros!';
$PALANG['broadcast_mailboxes_only'] = 'Só enviar a buzóns'; # XXX
$PALANG['broadcast_to_domains'] = 'Enviar a dominios:'; # XXX
$PALANG['pStatus_undeliverable'] = 'posiblemente NON SE ENTREGOU';
$PALANG['pStatus_disabled'] = 'Conta desabilitada '; # XXX
$PALANG['pStatus_expired'] = 'Contrasinal vencido '; # XXX
$PALANG['pStatus_vacation'] = 'Ausencia activada '; # XXX
$PALANG['pStatus_custom'] = 'Enviado a ';
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "O contrasinal é demasiado corto - necesitanse %s caracteres";
$PALANG['password_no_characters'] = "O contrasinal debe conter ao menos %s letras (A-Z, a-z)."; # XXX
$PALANG['password_no_digits'] = "O contrasinal debe conter ao menos %s díxito(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "O nome de dominio %s é inválido, non se axusta á expresión regular";
$PALANG['pInvalidDomainDNS'] = "O dominio %s non é válido, e/ou non ten resolución DNS";
$PALANG['pInvalidMailRegex'] = "A dirección de email non é válida, non se axusta á expresión regular (%s)"; # XXX %s added - but it should be in the text, not at the end
$PALANG['pFetchmail_welcome'] = 'Obter mail para:';
$PALANG['pFetchmail_new_entry'] = 'Nova entrada';
$PALANG['fetchmail_already_exists'] = 'Esta tarefa de fetchmail xa existe!'; # XXX
$PALANG['fetchmail_does_not_exist'] = 'Esta tarefa de fetchmail non existe!'; # XXX
$PALANG['pFetchmail_database_save_error'] = 'Non se puido gardar a entrada na base de datos!';
$PALANG['pFetchmail_database_save_success'] = 'Entrada gardada na base de datos.';
$PALANG['pFetchmail_error_invalid_id'] = 'Non se atopou rexistro co ID %s!'; # XXX
$PALANG['pFetchmail_invalid_mailbox'] = '¡Buzón inválido!';
$PALANG['pFetchmail_server_missing'] = 'Por favor introduza o nome do servidor remoto!';
$PALANG['pFetchmail_user_missing'] = 'Por favor introduza o nome do servidor remoto!';
$PALANG['pFetchmail_password_missing'] = 'Por favor introduza o contrasinal remota!';
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Buzón';
$PALANG['pFetchmail_field_src_server'] = 'Servidor';
$PALANG['pFetchmail_field_src_port'] = 'Porto'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Tipo Autenticación';
$PALANG['pFetchmail_field_src_user'] = 'Usuario';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
$PALANG['pFetchmail_field_src_folder'] = 'Cartafol';
$PALANG['pFetchmail_field_poll_time'] = 'Poll'; # XXX
$PALANG['pFetchmail_field_fetchall'] = 'Obter todo';
$PALANG['pFetchmail_field_keep'] = 'Conservar';
$PALANG['pFetchmail_field_protocol'] = 'Protocolo';
$PALANG['pFetchmail_field_usessl'] = 'SSL activado';
$PALANG['pFetchmail_field_sslcertck'] = 'Comprobarción de certificado SSL'; # XXX
$PALANG['pFetchmail_field_sslcertpath'] = 'Ruta a certificados SSL'; # XXX
$PALANG['pFetchmail_field_sslfingerprint'] = 'Pegada SSL (md5)'; # XXX
$PALANG['pFetchmail_field_extra_options'] = 'Opcións extras';
$PALANG['pFetchmail_field_mda'] = 'MDA'; # XXX
$PALANG['pFetchmail_field_date'] = 'Data';
$PALANG['pFetchmail_field_returned_text'] = 'Texto Devolto';
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Buzón local';
$PALANG['pFetchmail_desc_src_server'] = 'Servidor Remoto';
$PALANG['pFetchmail_desc_src_port'] = 'Número de porto remoto, se é necesario un non estándar. (0: usar o porto por defecto)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Principalmente \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Usuario Remoto';
$PALANG['pFetchmail_desc_src_password'] = 'Contrasinal Remoto';
$PALANG['pFetchmail_desc_src_folder'] = 'Cartafol Remoto';
$PALANG['pFetchmail_desc_poll_time'] = 'Obter cada ... minutos';
$PALANG['pFetchmail_desc_fetchall'] = 'Obter as mensaxes lidas e novas';
$PALANG['pFetchmail_desc_keep'] = 'Gardar unha copia das mensaxes no servidor remoto';
$PALANG['pFetchmail_desc_protocol'] = 'Protocolo a usar';
$PALANG['pFetchmail_desc_usessl'] = 'Cifrado SSL';
$PALANG['pFetchmail_desc_extra_options'] = 'Opcións extras para fetchmail';
$PALANG['pFetchmail_desc_mda'] = 'Mail Delivery Agent'; # XXX
$PALANG['pFetchmail_desc_date'] = 'Data do último sondeo/cambio na configuración';
$PALANG['pFetchmail_desc_returned_text'] = 'Mensaxe do último sondeo';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Expiración de contrasinal'; # XXX
$PALANG['password_expiration_desc'] = 'Data na que expirará o contrasinal'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */
?>

@ -138,7 +138,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Alias nije bilo moguče promjeniti! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Stvori novi poštanski ormarić za izbranu domenu.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Adresa e-pošte nije pravilna!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Dostigli ste vaš limit poštanskih ormarića!';
$PALANG['pCreate_mailbox_password_text'] = 'Lozinka za POP3/IMAP';
@ -336,13 +335,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -362,7 +358,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -382,7 +377,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -398,8 +392,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -141,7 +141,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Továbbítás csak az adott email címre.
$PALANG['pEdit_alias_result_error'] = 'Nemsikerült módosítani az Aliast! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Új postafiók létrehozása az adott domainhez.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Érvénytelen EMAIL !';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Elérted a maximális postafiók számot!';
$PALANG['pCreate_mailbox_password_text'] = 'Jelszó a POP3/IMAP -hoz';
@ -349,14 +348,11 @@ $PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'lehet hogy nem kézbesíthető ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Ide kézbesítődik ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "A Jelszó túl rövid - legalább %s karakter szükséges";
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -376,7 +372,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -396,7 +391,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -412,8 +406,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -139,7 +139,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Get ekki breytt alias! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Create a new local mailbox for your domain.'; # XXX
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Netfangið er ekki til!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Þú hefur stofnað þau póstholf sem þú hefur heimild til!';
$PALANG['pCreate_mailbox_password_text'] = 'Lykilorð til að opna POP3/IMAP';
@ -338,13 +337,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -363,7 +359,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -383,7 +378,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -399,8 +393,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -140,7 +140,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Inoltra solo a un altro server.';
$PALANG['pEdit_alias_result_error'] = 'Impossibile modificare alias! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Crea una nuova casella di posta locale per il tuo dominio.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'L\'indirizzo EMAIL non è valido!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Hai raggiunto il limite per creare caselle di posta!';
$PALANG['pCreate_mailbox_password_text'] = 'Password per POP3/IMAP';
@ -236,8 +235,8 @@ $PALANG['subject'] = 'Oggetto'; # XXX check text - should be 'Subject'
$PALANG['pSendmail_subject_text'] = 'Benvenuto';
$PALANG['pSendmail_body'] = 'Corpo';
$PALANG['pSendmail_button'] = 'Spedisci messaggio';
$PALANG['pSendmail_result_error'] = 'Impossibile inviare e-mail a %s';
$PALANG['pSendmail_result_success'] = 'Email inviata a %s';
$PALANG['pSendmail_result_error'] = 'Impossibile creare la casella di posta! (%s)'; # XXX text change - new: Unable to send email to %s!
$PALANG['pSendmail_result_success'] = 'La casella di posta è stata creata! (%s)'; # XXX text change - new: Email sent to %s.
$PALANG['pAdminMenu_list_admin'] = 'Lista degli amministratori';
$PALANG['pAdminMenu_list_domain'] = 'Lista dei domini';
@ -339,13 +338,10 @@ $PALANG['pBroadcast_error_empty'] = 'Nome, oggetto e testo del messaggio non pos
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'presumibilmente NON CONSEGNABILE ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'In consegna a ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Password troppo breve - minimo %s caratteri";
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -364,7 +360,6 @@ $PALANG['pFetchmail_password_missing'] = 'Digita la password per il server remot
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Casella';
$PALANG['pFetchmail_field_src_server'] = 'Server';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Autenticazione';
$PALANG['pFetchmail_field_src_user'] = 'Utente';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -384,7 +379,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Risultato ottenuto';
$PALANG['pFetchmail_desc_id'] = 'Record ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Casella locale';
$PALANG['pFetchmail_desc_src_server'] = 'Server remoto';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Sostanzialmente \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Utente remoto';
$PALANG['pFetchmail_desc_src_password'] = 'Pasword remota';
@ -400,8 +394,6 @@ $PALANG['pFetchmail_desc_date'] = 'Data dell\'ultima modifica o atti
$PALANG['pFetchmail_desc_returned_text'] = 'Risultato dell\'ultima attività';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -141,7 +141,6 @@ $PALANG['pEdit_alias_forward_only'] = '指定された転送アドレスのみ';
$PALANG['pEdit_alias_result_error'] = '別名 %s を更新できませんでした!';
$PALANG['pCreate_mailbox_welcome'] = '新しいメールアドレスの作成';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'メールアドレスが無効です。';
$PALANG['pCreate_mailbox_username_text_error3'] = 'メールアドレスの制限数に達しました。';
$PALANG['pCreate_mailbox_password_text'] = 'POP3/IMAPのパスワード';
@ -347,14 +346,11 @@ $PALANG['broadcast_mailboxes_only'] = 'メールアドレスだけに送信';
$PALANG['broadcast_to_domains'] = '送信先のドメイン:';
$PALANG['pStatus_undeliverable'] = 'おそらく配送不可能 ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = '配送先 ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "パスワードが短すぎます。最低 %s 文字必要です。";
$PALANG['password_no_characters'] = "パスワードには、少なくとも %s 個の英字がなくてはなりません。"; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)."
$PALANG['password_no_characters'] = "パスワードには、少なくとも %s 個の英字がなくてはなりません。";
$PALANG['password_no_digits'] = "パスワードには、少なくとも %s 個の数字がなくてはなりません。";
$PALANG['pInvalidDomainRegex'] = "不正なドメイン名です[%s]。正規表現チェックで失敗";
$PALANG['pInvalidDomainDNS'] = "不正なドメイン[%s]であるか、もしくは DNS に見当たりません";
@ -374,7 +370,6 @@ $PALANG['pFetchmail_password_missing'] = 'リモートパスワードを入力
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'メールアドレス';
$PALANG['pFetchmail_field_src_server'] = 'サーバ';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = '認証タイプ';
$PALANG['pFetchmail_field_src_user'] = 'ユーザ';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -394,7 +389,6 @@ $PALANG['pFetchmail_field_returned_text'] = '戻りテキスト';
$PALANG['pFetchmail_desc_id'] = 'レコード ID';
$PALANG['pFetchmail_desc_mailbox'] = 'ローカル メールボックス';
$PALANG['pFetchmail_desc_src_server'] = 'リモート サーバ';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = '大抵は \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'リモート ユーザ';
$PALANG['pFetchmail_desc_src_password'] = 'リモート パスワード';
@ -410,8 +404,6 @@ $PALANG['pFetchmail_desc_date'] = '最終取得確認/設定変更
$PALANG['pFetchmail_desc_returned_text'] = '新着確認の戻りテキストメッセージ';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -21,7 +21,7 @@
function update_string_list() {
for file in en.lang $filelist ; do
echo "<?php \$CONF['admin_name'] = ''; include('$file'); print join(\"\\n\", array_keys(\$PALANG)) . \"\\n\"; ?>" | php > $file.strings
echo "<?php include('$file'); print join(\"\\n\", array_keys(\$PALANG)) . \"\\n\"; ?>" | php > $file.strings
done
for file in $filelist ; do
@ -74,7 +74,7 @@ function forcepatch() {
for i in `seq 1 5` ; do
for file in $filelist ; do
test "$file" = "en.lang" && { echo "*** skipping en.lang ***"; continue ; } >&2
/bin/bash "$0" "$file" | sed -n '1,3 p ; 5 s/^./-/p ; 5s/^./+/p ; 6p' | recountdiff | patch "$file"
"$0" "$file" | sed -n '1,3 p ; 5 s/^./-/p ; 5s/^./+/p ; 6p' | recountdiff | patch "$file"
done
done
} # end forcepatch

@ -22,7 +22,6 @@ $supported_languages = array(
'fr' => 'Fran&ccedil;ais - French',
'hr' => 'Hrvatski - Croatian',
'hu' => 'Magyar - Hungarian',
'gl' => 'Galego - Galician',
'is' => 'Icelandic',
'it' => 'Italiano - Italian',
'ja' => '&#26085;&#26412;&#35486; - Japanese',

@ -140,7 +140,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Persiųsti nurodytiems el. pašto adresam
$PALANG['pEdit_alias_result_error'] = 'Sinonimo pakeisti nepavyko! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Nauja pašto dėžutė.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Šis el.pašto adresas neteisingas!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Išnaudota srities pašto dėžučių kvota!';
$PALANG['pCreate_mailbox_password_text'] = 'Slaptažodis jungtis prie POP3/IMAP';
@ -344,13 +343,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -369,7 +365,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -389,7 +384,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -405,8 +399,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -139,7 +139,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Не можам да го променам алијасот! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Креирање на ново поштенско сандаче.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'EMAIL не е валиден!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Достигнат е лимитот на поштенски сандачиња!';
$PALANG['pCreate_mailbox_password_text'] = 'Лозинка за POP3/IMAP';
@ -339,13 +338,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -364,7 +360,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -384,7 +379,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -400,8 +394,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -140,7 +140,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Bare videresend til de angitte e-postadre
$PALANG['pEdit_alias_result_error'] = 'Kan ikke endre aliaset! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Opprett en ny e-postkonto.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-postadressen er ikke gyldig!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Du har nådd grensen for antall e-postkontoer under dette domenet!';
$PALANG['pCreate_mailbox_password_text'] = 'Passord for POP3/IMAP';
@ -338,13 +337,10 @@ $PALANG['pBroadcast_error_empty'] = 'Feltene Ditt navn, Emne og Melding kan ikke
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'kan kanskje IKKE LEVERES ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Leverer til ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Passordet er for kort - det må inneholde minst %s tegn";
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Ugyldig domenenavn %s, regexp-validering feilet";
$PALANG['pInvalidDomainDNS'] = "Ugyldig domene %s, og/eller finnes ikke i DNS";
@ -364,7 +360,6 @@ $PALANG['pFetchmail_password_missing'] = 'Vennligst skriv inn det eksterne passo
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'E-postkonto';
$PALANG['pFetchmail_field_src_server'] = 'Server';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Autentiseringstype';
$PALANG['pFetchmail_field_src_user'] = 'Bruker';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -384,7 +379,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returnert tekst';
$PALANG['pFetchmail_desc_id'] = 'Oppførings-ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Lokal e-postkonto';
$PALANG['pFetchmail_desc_src_server'] = 'Ekstern server';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Vanligvis \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Eksternt brukernavn';
$PALANG['pFetchmail_desc_src_password'] = 'Eksternt passord';
@ -400,8 +394,6 @@ $PALANG['pFetchmail_desc_date'] = 'Dato for siste spørring/konfigur
$PALANG['pFetchmail_desc_returned_text'] = 'Tekstmelding fra siste spørring';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -141,7 +141,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Alleen op opgegeven email adres afleveren
$PALANG['pEdit_alias_result_error'] = 'Bewerken van de alias %s is mislukt!';
$PALANG['pCreate_mailbox_welcome'] = 'Maak een nieuw lokale mailbox voor uw domein.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Het e-mail adres is niet geldig.';
$PALANG['pCreate_mailbox_username_text_error3'] = 'U bezit het maximum aantal mailboxen.';
$PALANG['pCreate_mailbox_password_text'] = 'Wachtwoord voor POP3/IMAP';
@ -167,7 +166,7 @@ $PALANG['pEdit_mailbox_quota_text_error'] = 'De quota die opgaf is te hoog.';
$PALANG['pEdit_mailbox_domain_error'] = 'Dit domein is niet van nu: ';
$PALANG['pEdit_mailbox_result_error'] = 'Mislukt om het wachtwoord te wijzigen.';
$PALANG['pPassword_welcome'] = 'Bewerk uw login wachtwoord.';
$PALANG['pPassword_welcome'] = 'Bewerk u login wachtwoord.';
$PALANG['pPassword_admin'] = 'Login';
$PALANG['pPassword_password_current'] = 'Huidig wachtwoord';
$PALANG['pPassword_password_current_text_error'] = 'U heeft uw huidige wachtwoord niet opgegeven.';
@ -340,13 +339,10 @@ $PALANG['pBroadcast_error_empty'] = 'De velden Naam, Onderwerp en Bericht mogen
$PALANG['broadcast_mailboxes_only'] = 'Verstuur alleen aan mailboxen';
$PALANG['broadcast_to_domains'] = 'Verstuur aan de domeinen:';
$PALANG['pStatus_undeliverable'] = 'Misschien niet af te leveren ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Bezorgen op ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Wachtwoord is te kort - moet minimaal %s karakters bevatten";
$PALANG['password_no_characters'] = "Je wachtwoord moet minimaal %s karakter(s) bevatten."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)."
$PALANG['password_no_characters'] = "Je wachtwoord moet minimaal %s karakter(s) bevatten.";
$PALANG['password_no_digits'] = "Je wachtwoord moet minimaal %s getal(len) bevatten.";
$PALANG['pInvalidDomainRegex'] = "Ongeldig domein naam %s";
$PALANG['pInvalidDomainDNS'] = "Ongeldig domein %s";
@ -365,7 +361,6 @@ $PALANG['pFetchmail_password_missing'] = 'Wachtwoord!';
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'mailbox';
$PALANG['pFetchmail_field_src_server'] = 'server';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'authenticatietype';
$PALANG['pFetchmail_field_src_user'] = 'gebruiker';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -385,7 +380,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'teruggegeven tekst';
$PALANG['pFetchmail_desc_id'] = 'record ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Naar welke mailbox sturen we de opgehaalde mail.';
$PALANG['pFetchmail_desc_src_server'] = 'andere server.';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'In de meeste gevallen \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Gebruiker op andere server.';
$PALANG['pFetchmail_desc_src_password'] = 'Wachtwoord op andere server.';
@ -401,8 +395,6 @@ $PALANG['pFetchmail_desc_date'] = 'datum van de laatste berichtencon
$PALANG['pFetchmail_desc_returned_text'] = 'text bericht van de laatste berichtencontrole.';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -138,7 +138,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Kan ikke endre Aliaset! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Opprett en ny epostkonto.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-postadressen er ugyldig!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Du er over grensen for antall e-postkontoer!';
$PALANG['pCreate_mailbox_password_text'] = 'Passord for POP3/IMAP';
@ -337,13 +336,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -363,7 +359,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -383,7 +378,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -399,8 +393,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -141,7 +141,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Prześlij jedynie na podane adresy.';
$PALANG['pEdit_alias_result_error'] = 'Nie można zmodyfikować aliasu! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Utwórz lokalne konto pocztowe dla Twojej domeny.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Adres EMAIL jest niepoprawny!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Twój limit kont pocztowych został osiągniety!';
$PALANG['pCreate_mailbox_password_text'] = 'Hasło do POP3/IMAP';
@ -344,13 +343,10 @@ $PALANG['pBroadcast_error_empty'] = 'Pola Nazwa, Temat i Wiadomość nie powinny
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'może być NIEDOSTARCZALNA ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Dostarczyć do ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = 'Hasło jest za krótkie - musi mieć minimum %s znaków';
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = 'Nieprawidłowa nazwa domeny %s';
$PALANG['pInvalidDomainDNS'] = 'Nieprawidłowa domena %s, nie wykrywana w DNS';
@ -369,7 +365,6 @@ $PALANG['pFetchmail_password_missing'] = 'Podaj hasło zdalnego użytkownika!';
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Konto';
$PALANG['pFetchmail_field_src_server'] = 'Serwer';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Uwierzytelnianie';
$PALANG['pFetchmail_field_src_user'] = 'Użytkownik';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -389,7 +384,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Zwrócony tekst';
$PALANG['pFetchmail_desc_id'] = 'ID rekordu';
$PALANG['pFetchmail_desc_mailbox'] = 'Konto lokalne';
$PALANG['pFetchmail_desc_src_server'] = 'Zdalny serwer';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Najczęściej \'password\''; # Translators, do not translate 'password' here!
$PALANG['pFetchmail_desc_src_user'] = 'Zdalny użytkownik';
$PALANG['pFetchmail_desc_src_password'] = 'Hasło zdalnego użytkownika';
@ -405,8 +399,6 @@ $PALANG['pFetchmail_desc_date'] = 'Data ostatniego sprawdzenia/zmian
$PALANG['pFetchmail_desc_returned_text'] = 'Wiadomość tekstowa z ostatniego sprawdzenia';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -143,7 +143,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Apenas redirecionar as mensagens para os
$PALANG['pEdit_alias_result_error'] = 'Não foi possível editar o alias! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Criação de uma nova conta de email para o domínio.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Email inválido!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Você alcançou o limite de contas de email!';
$PALANG['pCreate_mailbox_password_text'] = 'Senha para POP3/IMAP';
@ -349,14 +348,11 @@ $PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'talvez NÃO-ENTREGÁVEL ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Envia para ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Senha muito curta - requer %s caracteres";
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Nome de domínio inválido %s, falhou checagem por expressão regular";
$PALANG['pInvalidDomainDNS'] = "Domínio inválido %s, e/ou não pôde ser resolvido por DNS";
@ -376,7 +372,6 @@ $PALANG['pFetchmail_password_missing'] = 'Favor fornecer a senha da conta remota
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Conta';
$PALANG['pFetchmail_field_src_server'] = 'Servidor';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Autenticação';
$PALANG['pFetchmail_field_src_user'] = 'Usuário';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -396,7 +391,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Texto retornado';
$PALANG['pFetchmail_desc_id'] = 'ID do registro';
$PALANG['pFetchmail_desc_mailbox'] = 'Conta de email local';
$PALANG['pFetchmail_desc_src_server'] = 'Servidor remoto';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Quase sempre \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Usuário remoto';
$PALANG['pFetchmail_desc_src_password'] = 'Senha remota';
@ -412,8 +406,6 @@ $PALANG['pFetchmail_desc_date'] = 'Data da última checagem/mudança
$PALANG['pFetchmail_desc_returned_text'] = 'Mensagem de texto da última checagem';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -141,7 +141,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Redirectioneaza numai catre adresa de mai
$PALANG['pEdit_alias_result_error'] = 'Modificarea aliasului %s a esuat!';
$PALANG['pCreate_mailbox_welcome'] = 'Creaza o noua casuta de mail.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'EMAIL nu este valid!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Ati atins limita pentru creare de noi casute de mail!';
$PALANG['pCreate_mailbox_password_text'] = 'Parola de la POP3/IMAP';
@ -347,14 +346,11 @@ $PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'probabil UNDELIVERABLE ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Livreaza la ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Parola prea scurta - minim %s caractere";
$PALANG['password_no_characters'] = "Parola trebuie sa contina cel putin %s litere."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)."
$PALANG['password_no_characters'] = "Parola trebuie sa contina cel putin %s litere.";
$PALANG['password_no_digits'] = "Parola trebuie sa contina cel putin %s cifre.";
$PALANG['pInvalidDomainRegex'] = "Nume domeniu incorect %s, verificare regexp esuata";
$PALANG['pInvalidDomainDNS'] = "Nume domeniu incorect %s, si/sau nu se poate rezolva in DNS";
@ -374,7 +370,6 @@ $PALANG['pFetchmail_password_missing'] = 'Introduceti parola la distanta!';
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Casuta de mail';
$PALANG['pFetchmail_field_src_server'] = 'Server';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Tip de autentificare';
$PALANG['pFetchmail_field_src_user'] = 'User';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -394,7 +389,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Text returnat';
$PALANG['pFetchmail_desc_id'] = 'Inregistrare ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Casuta email locala';
$PALANG['pFetchmail_desc_src_server'] = 'Server la distanta';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Utilizator la distanta';
$PALANG['pFetchmail_desc_src_password'] = 'Parola la distanta';
@ -411,8 +405,6 @@ $PALANG['pFetchmail_desc_returned_text'] = 'Mesaj text';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -4,7 +4,6 @@
// Language file Russian
// by Paul
// updated by Pavel Usischev (pusischev @sf)
// updated by Dmitry Samoshin (gotty)
//
@ -16,58 +15,58 @@ $PALANG['exit'] = 'Выйти';
$PALANG['cancel'] = 'Отменить';
$PALANG['save'] = 'Сохранить изменения';
$PALANG['confirm'] = 'Вы уверены, что хотите удалить это?\n';
$PALANG['confirm_delete_admin'] = 'Вы действительно хотите удалить админа %s?';
$PALANG['confirm_delete_alias'] = 'Вы действительно хотите удалить алиас %s?';
$PALANG['confirm_delete_aliasdomain'] = 'Вы действительно хотите удалить алиас домена %s?';
$PALANG['confirm_delete_domain'] = 'Вы действительно хотите удалить все записи домена %s? Это действие нельзя будет отменить!';
$PALANG['confirm_delete_fetchmail'] = 'Вы действительно хотите удалить задание fetchmail %s?';
$PALANG['confirm_delete_mailbox'] = 'Вы действительно хотите удалить почтовый ящик %s?';
$PALANG['confirm_delete_vacation'] = 'Вы действительно хотите удалить сообщение автоответчика для %s?';
$PALANG['no_delete_permissions'] = 'Вы не можете удалить %s!';
$PALANG['confirm_delete_admin'] = 'Do you really want to delete the admin %s?'; # XXX
$PALANG['confirm_delete_alias'] = 'Do you really want to delete the alias %s?'; # XXX
$PALANG['confirm_delete_aliasdomain'] = 'Do you really want to delete the alias domain %s?'; # XXX
$PALANG['confirm_delete_domain'] = 'Вы действительно хотите удалить все настройки для домена? Это действие нельзя будет отменить!\n (%s)'; # XXX text changed to: 'Do you really want to delete all records for the domain %s? This can not be undone'
$PALANG['confirm_delete_fetchmail'] = 'Do you really want to delete the fetchmail job %s?'; # XXX
$PALANG['confirm_delete_mailbox'] = 'Do you really want to delete the mailbox %s?'; # XXX
$PALANG['confirm_delete_vacation'] = 'Do you really want to delete the vacation message for %s?'; # XXX
$PALANG['no_delete_permissions'] = 'You are not allowed to delete %s!'; # XXX
$PALANG['check_update'] = 'Проверить обновление';
$PALANG['invalid_parameter'] = 'Некорректный параметр!';
$PALANG['show'] = 'Показать:';
$PALANG['all'] = 'Все';
$PALANG['created'] = 'Создано';
$PALANG['unknown'] = 'неизвестно';
$PALANG['download_csv'] = 'Скачать этот список в виде CSV файла';
$PALANG['missing_field'] = 'Поле %s отсутствует';
$PALANG['must_be_numeric'] = '%s должно быть числом';
$PALANG['must_be_numeric_bigger_than_null'] = '%s должно быть числом и больше 0';
$PALANG['must_be_boolean'] = '%s должно иметь тип boolean';
$PALANG['invalid_value_given'] = 'Указано некорректное значение для %s';
$PALANG['edit_not_allowed'] = 'Вы не можете редактировать %s';
$PALANG['searchparams'] = 'Параметры поиска:';
$PALANG['pFooter_logged_as'] = 'Логин: %s';
$PALANG['created'] = 'Created'; # XXX
$PALANG['unknown'] = 'unknown'; # XXX
$PALANG['download_csv'] = 'Download this list as CSV file'; # XXX
$PALANG['missing_field'] = 'Field %s is missing'; # XXX
$PALANG['must_be_numeric'] = '%s must be numeric'; # XXX
$PALANG['must_be_numeric_bigger_than_null'] = '%s must be numeric and bigger than 0'; # XXX
$PALANG['must_be_boolean'] = '%s must be boolean'; # XXX
$PALANG['invalid_value_given'] = 'Invalid value given for %s'; # XXX
$PALANG['edit_not_allowed'] = 'You are not allowed to edit %s'; # XXX
$PALANG['searchparams'] = 'Search parameters:'; # XXX
$PALANG['pFooter_logged_as'] = 'Вошли как %s';
$PALANG['pLogin_welcome'] = 'Вход для администраторов почтовых доменов.';
$PALANG['pLogin_username'] = 'Имя (email)';
$PALANG['pLogin_username'] = 'Имя (адрес e-mail)';
$PALANG['password'] = 'Пароль';
$PALANG['pLogin_language'] = 'Язык';
$PALANG['pLogin_button'] = 'Войти';
$PALANG['pLogin_failed'] = 'Ваш адрес email или пароль неверен.';
$PALANG['pLogin_failed'] = 'Ваш адрес e-mail или пароль неверен.';
$PALANG['pLogin_login_users'] = 'Вход для обычных пользователей.';
$PALANG['pMenu_main'] = 'Главная';
$PALANG['pMenu_overview'] = 'Обзор';
$PALANG['add_alias'] = 'Создать алиас';
$PALANG['add_alias_domain'] = 'Создать алиас домена';
$PALANG['add_alias_domain'] = 'Создать домен-алиас';
$PALANG['add_mailbox'] = 'Создать ящик';
$PALANG['pMenu_fetchmail'] = 'Сбор почты';
$PALANG['pMenu_sendmail'] = 'Отправить письмо';
$PALANG['pMenu_sendmail'] = 'Послать письмо';
$PALANG['pMenu_password'] = 'Пароль';
$PALANG['pMenu_viewlog'] = 'Просмотреть журнал';
$PALANG['pMenu_logout'] = 'Выход';
$PALANG['pMain_welcome'] = 'Добро пожаловать в Postfix Admin!';
$PALANG['pMain_overview'] = 'Список ваших почтовых ящиков и алиасов. Вы можете редактировать и удалять их отсюда.';
$PALANG['pMain_overview'] = 'Список ваших почтовых ящиков и алиасов. Вы можете удалять и редактировать их отсюда.';
$PALANG['pMain_create_alias'] = 'Создание нового алиаса в вашем домене.';
$PALANG['pMain_create_mailbox'] = 'Создание нового почтового ящика в вашем домене.';
$PALANG['pMain_sendmail'] = 'Отправка письма на один из созданных вами почтовых ящиков.';
$PALANG['pMain_password'] = 'Смена пароля для вашей учетной записи администратора.';
$PALANG['pMain_sendmail'] = 'Отправить письмо на созданный почтовый ящик.';
$PALANG['pMain_password'] = 'Смена пароля для учетной записи администратора.';
$PALANG['pMain_viewlog'] = 'Просмотр журнала работы с системой.';
$PALANG['pMain_logout'] = 'Выход из системы.';
$PALANG['pMain_logout'] = 'Выход из системы';
$PALANG['pOverview_disabled'] = 'Отключено';
$PALANG['pOverview_unlimited'] = 'Неограничено';
@ -75,12 +74,12 @@ $PALANG['pOverview_title'] = ':: Заданные домены';
$PALANG['pOverview_up_arrow'] = 'Наверх';
$PALANG['pOverview_right_arrow'] = 'Следующая страница';
$PALANG['pOverview_left_arrow'] = 'Предыдущая страница';
$PALANG['pOverview_alias_domain_title'] = ':: Алиасы доменов';
$PALANG['pOverview_alias_domain_title'] = ':: Домены-алиасы';
$PALANG['pOverview_alias_title'] = ':: Алиасы';
$PALANG['pOverview_mailbox_title'] = ':: Ящики';
$PALANG['go'] = 'Выбрать';
$PALANG['pOverview_welcome'] = 'Обзор для ';
$PALANG['pOverview_alias_domain_aliases'] = 'Алиасы доменов';
$PALANG['pOverview_alias_domain_aliases'] = 'Домены-алиасы';
$PALANG['pOverview_alias_address'] = 'От';
$PALANG['active'] = 'Активен';
$PALANG['and_x_more'] = '[и еще %s...]';
@ -90,10 +89,10 @@ $PALANG['pOverview_mailbox_quota'] = 'Квота (МБ)';
$PALANG['pOverview_vacation_edit'] = 'ВКЛЮЧЕН АВТООТВЕТЧИК';
$PALANG['pOverview_vacation_option'] = 'Установить автоответчик';
$PALANG['no_domains_for_this_admin'] = 'У вас нет разрешений ни на один домен.';
$PALANG['no_domains_exist'] = 'Вам нужно создать хотя бы один домен, прежде чем вы сможете использовать обзор.'; # "virtual list" should match $PALANG['pAdminMenu_list_virtual']
$PALANG['no_domains_exist'] = 'Вам нужно создать хотя бы один домен, чтобы использовать обзор.'; # "virtual list" should match $PALANG['pAdminMenu_list_virtual']
$PALANG['domain'] = 'Домен';
$PALANG['pOverview_get_alias_domains'] = 'Алиасы доменов';
$PALANG['pOverview_get_alias_domains'] = 'Домены-алиасы';
$PALANG['mailboxes'] = 'Ящики';
$PALANG['pOverview_get_quota'] = 'Квота ящика (МБ)';
@ -102,109 +101,108 @@ $PALANG['pDelete_delete_success'] = '%s удален.';
$PALANG['pDelete_domain_error'] = 'Этот домен не принадлежит вам ';
$PALANG['pDelete_alias_error'] = 'Невозможно удалить алиас ';
$PALANG['pCreate_alias_domain_welcome'] = 'Отображение адреса одного вашего домена на другой';
$PALANG['pCreate_alias_domain_alias'] = 'Алиас домена';
$PALANG['pCreate_alias_domain_alias_text'] = 'Домен, на который приходит почта.';
$PALANG['pCreate_alias_domain_welcome'] = 'Отображать адреса одного вашего домена на другой.';
$PALANG['pCreate_alias_domain_alias'] = 'Домен-алиас';
$PALANG['pCreate_alias_domain_alias_text'] = 'Домен, в который приходит почта.';
$PALANG['pCreate_alias_domain_target'] = 'Целевой домен';
$PALANG['pCreate_alias_domain_target_text'] = 'Домен, куда должна направляться почта.';
$PALANG['pCreate_alias_domain_error1'] = 'Вам не разрешено создавать выбранную конфигурацию.';
$PALANG['pCreate_alias_domain_error2'] = 'Выбранная конфигурация некорректна, пожалуйста, выберите другую!';
$PALANG['alias_domain_already_exists'] = 'Указанный домен уже является алиасом домена!';
$PALANG['alias_domain_does_not_exist'] = 'Указанный домен не является алиасом домена!';
$PALANG['alias_domain_create_failed'] = 'Не удалось создать алиас домена %s!';
$PALANG['alias_domain_change_failed'] = 'Не удалось изменить алиас домена %s!';
$PALANG['pCreate_alias_domain_error4'] = 'Все домены уже задействованы в алиасах доменов.';
$PALANG['pCreate_alias_domain_success'] = 'Алиас домена %s успешно создан.';
$PALANG['alias_domain_changed'] = 'Алиас домена %s успешно изменен.';
$PALANG['alias_domain_to_itsself'] = 'Домен не может быть алиасом для самого себя!';
$PALANG['delete_domain_aliasdomain_target'] = 'Домен %s является целевым для одного или нескольких алиасов доменов и не может быть удален! (Сначала удалите алиасы доменов.)';
$PALANG['alias_domain_already_exists'] = 'This domain is already an alias domain!'; # XXX
$PALANG['alias_domain_does_not_exist'] = 'This domain isn\'t an alias domain!'; # XXX
$PALANG['alias_domain_create_failed'] = 'Не удалось добавить запись в базу данных. (%s)'; # XXX Text changed to: Creating the alias domain %s failed!
$PALANG['alias_domain_change_failed'] = 'Changing the alias domain %s failed!'; # XXX
$PALANG['pCreate_alias_domain_error4'] = 'Все домены уже задействованы в доменах-алиасах.';
$PALANG['pCreate_alias_domain_success'] = 'Домен-алиас добавлен в таблицу доменов-алиасов! (%s)'; # XXX Text changed to: The alias domain %s has been created.
$PALANG['alias_domain_changed'] = 'The alias domain %s has been changed.'; # XXX
$PALANG['alias_domain_to_itsself'] = 'A domain can\'t be an alias domain to itsself!'; # XXX
$PALANG['delete_domain_aliasdomain_target'] = 'The domain %s is the target for one or more alias domains and can\'t be deleted! (Delete the alias domains first.)'; # XXX
$PALANG['pCreate_alias_address_text_error1'] = 'Неверное имя алиаса!';
$PALANG['alias_does_not_exist'] = 'Указанный алиас не существует!';
$PALANG['email_address_already_exists'] = 'Указанный почтовый адрес уже существует, пожалуйста, выберите другой!';
$PALANG['alias_does_not_exist'] = 'This alias does not exist!'; # XXX
$PALANG['email_address_already_exists'] = 'Этот почтовый адрес уже существует, пожалуйста, выберите другой.'; # XXX check text - should be 'This email address already exists, please choose a different one\!'
$PALANG['pCreate_alias_address_text_error3'] = 'Вы достигли лимита по созданным алиасам!';
$PALANG['pCreate_alias_goto_text'] = 'Куда должна доставляться почта.';
$PALANG['pCreate_alias_goto_text_error'] = 'Неверное поле Кому!';
$PALANG['pCreate_alias_result_error'] = 'Не удалось создать алиас %s!';
$PALANG['pCreate_alias_result_success'] = 'Алиас %s успешно создан!';
$PALANG['alias_updated'] = 'Алиас %s успешно обновлен!';
$PALANG['pCreate_alias_result_error'] = 'Невозможно добавить алиас в список! (%s)'; # XXX Text changed to: Creating the alias %s failed!
$PALANG['pCreate_alias_result_success'] = 'Алиас был успешно создан!'; # XXX text change: 'The alias %s has been created!'
$PALANG['alias_updated'] = 'The alias %s has been updated!'; # XXX
$PALANG['pCreate_alias_catchall_text'] = 'Для создания catch-all почтового ящика используйте "*" в качестве имени алиаса.'; # XXX don't propagate usage of *@target-domain.com for domain-aliasing any longer
$PALANG['mailbox_alias_cant_be_deleted'] = 'Указанный алиас ссылается на почтовый ящик и не может быть удален!';
$PALANG['protected_alias_cant_be_deleted'] = 'Алиас %s защищен и может быть удален только суперадмином';
$PALANG['mailbox_alias_cant_be_deleted'] = 'This alias belongs to a mailbox and can\'t be deleted!'; # XXX
$PALANG['protected_alias_cant_be_deleted'] = 'The alias %s is protected and can only be deleted by a superadmin'; # XXX
$PALANG['pEdit_alias_welcome'] = 'Редактирование настроек пересылки';
$PALANG['pEdit_alias_help'] = 'Можно указать несколько целей, по одной записи на строку.';
$PALANG['pEdit_alias_help'] = 'Можно указать несколько целей, одна запись на строку.';
$PALANG['alias'] = 'Алиас';
$PALANG['to'] = 'Кому';
$PALANG['pEdit_alias_goto_text_error1'] = 'Вы ничего не ввели в поле Кому';
$PALANG['pEdit_alias_goto_text_error2'] = 'Вы ввели некорректный почтовый адрес: ';
$PALANG['pEdit_alias_domain_result_error'] = 'Невозможно изменить алиас домена!';
$PALANG['pEdit_alias_goto_text_error2'] = 'Вы ввели неверный адрес: ';
$PALANG['pEdit_alias_domain_result_error'] = 'Невозможно изменить домен-алиас!';
$PALANG['pEdit_alias_forward_and_store'] = 'Доставлять в локальный почтовый ящик.';
$PALANG['pEdit_alias_forward_only'] = 'Только пересылать на указанные адреса.';
$PALANG['pEdit_alias_result_error'] = 'Не удалось изменить алиас %s!';
$PALANG['pEdit_alias_result_error'] = 'Невозможно изменить алиас! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Создание нового почтового ящика для вашего домена';
$PALANG['pCreate_mailbox_local_part_error'] = 'Не задано значение до знака @.';
$PALANG['pCreate_mailbox_welcome'] = 'Создание нового почтового ящика для вашего домена.';
$PALANG['pCreate_mailbox_username_text_error1'] = 'Неверное имя!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Вы достигли лимита по созданию почтовых ящиков!';
$PALANG['pCreate_mailbox_password_text'] = 'Пароль для POP3/IMAP';
$PALANG['pCreate_mailbox_name_text'] = 'Полное имя';
$PALANG['pCreate_mailbox_phone'] = 'Мобильный телефон';
$PALANG['pCreate_mailbox_phone_desc'] = 'Используется для отправки SMS, если вы забыли пароль';
$PALANG['pCreate_mailbox_email'] = 'Другой email';
$PALANG['pCreate_mailbox_email_desc'] = 'Используется, если вы забыли пароль';
$PALANG['pCreate_mailbox_phone'] = 'Mobile phone'; # XXX
$PALANG['pCreate_mailbox_phone_desc'] = "Used to send a SMS if the password is forgotten"; # XXX
$PALANG['pCreate_mailbox_email'] = 'Other e-mail'; # XXX
$PALANG['pCreate_mailbox_email_desc'] = "Used if the password is forgotten"; # XXX
$PALANG['pCreate_mailbox_mail'] = 'Отправить приветственное письмо';
$PALANG['pCreate_mailbox_result_error'] = 'Не удалось создать почтовый ящик %s!';
$PALANG['pCreate_mailbox_result_success'] = 'Почтовый ящик %s успешно добавлен в список существующих ящиков!';
$PALANG['pCreate_mailbox_result_succes_nosubfolders'] = 'Почтовый ящик %s успешно добавлен в список существующих ящиков, но в нем не удалось создать некоторые стандартные папки.';
$PALANG['mailbox_updated'] = "Почтовый ящик %s успешно обновлен.";
$PALANG['mailbox_update_failed'] = "Не удалось обновить почтовый ящик %s!";
$PALANG['pCreate_mailbox_result_error'] = 'Невозможно добавить ящик в список существующих ящиков! (%s)'; # XXX Text changed to: Creating the mailbox %s failed!
$PALANG['pCreate_mailbox_result_success'] = 'Почтовый ящик был успешно создан! (%s)'; # XXX Text changed to: The mailbox %s has been added to the mailbox table!
$PALANG['pCreate_mailbox_result_succes_nosubfolders'] = 'Почтовый ящик был успешно создан, но в нем не удалось создать (некоторые) стандартные папки (%s)'; # XXX Text changed to: The mailbox %s has been added to the mailbox table, but none (or only some) of the predefined sub-folders could be created.
$PALANG['mailbox_updated'] = "The mailbox %s has been updated."; # XXX
$PALANG['mailbox_update_failed'] = "Updating the mailbox %s failed!"; # XXX
$PALANG['pEdit_mailbox_welcome'] = 'Редактирование почтового ящика вашего домена.';
$PALANG['pEdit_mailbox_welcome'] = 'Редактирование ящика для вашего домена.';
$PALANG['pEdit_mailbox_username'] = 'Название';
$PALANG['pEdit_mailbox_password_text_error'] = 'Введенные вами пароли не совпадают!';
$PALANG['pEdit_mailbox_quota'] = 'Квота';
$PALANG['pEdit_mailbox_quota_text'] = 'МБ';
$PALANG['mb_max'] = 'МБ (максимум: %s)';
$PALANG['mb_max'] = 'MB (max: %s)'; # XXX
$PALANG['pEdit_mailbox_quota_text_error'] = 'Квота, выставленная вами, слишком велика!';
$PALANG['pEdit_mailbox_domain_error'] = 'Указанный домен не принадлежит вам: ';
$PALANG['pEdit_mailbox_domain_error'] = 'Этот домен не принадлежит вам: ';
$PALANG['pEdit_mailbox_result_error'] = 'Невозможно изменить пароль!';
$PALANG['pPassword_welcome'] = 'Изменение вашего пароля';
$PALANG['pPassword_admin'] = 'Логин';
$PALANG['pPassword_welcome'] = 'Изменение вашего пароля.';
$PALANG['pPassword_admin'] = 'Имя для входа';
$PALANG['pPassword_password_current'] = 'Текущий пароль';
$PALANG['pPassword_password_current_text_error'] = 'Вы не указали ваш текущий пароль!';
$PALANG['pPassword_password'] = 'Новый пароль';
$PALANG['pPassword_password2'] = 'Новый пароль (еще раз)';
$PALANG['pPassword_password_text_error'] = 'Введенные вами пароли не совпадают либо пусты!';
$PALANG['change_password'] = 'Изменить пароль';
$PALANG['pPassword_result_error'] = 'Не удалось изменить пароль для %s!';
$PALANG['pPassword_result_success'] = 'Пароль для %s успешно изменен.';
$PALANG['pPassword_recovery_title'] = 'Следуйте инструкциям для сброса вашего пароля.';
$PALANG['pPassword_recovery_button'] = 'Прислать мне код';
$PALANG['pPassword_recovery_email_body'] = "Здравствуйте!\n\nИспользуйте следующую ссылку для изменения вашего пароля от электронной почты:\n%s\n\nС уважением,\n\n" . $CONF['admin_name'];
$PALANG['pPassword_recovery_sms_body'] = "Здравствуйте!\nКод для изменения вашего пароля: %s\n" . $CONF['admin_name'];
$PALANG['pPassword_recovery_processed'] = "Мы обработали ваш запрос. Если вы ввели корректное имя пользователя, вы получите письмо/SMS с кодовым словом.";
$PALANG['pPassword_password_code'] = 'Код отправлен по почте/SMS';
$PALANG['pPassword_code_text_error'] = 'Неверный код';
$PALANG['pPassword_result_error'] = 'Невозможно изменить ваш пароль! (%s)'; # XXX Text changed to: Changing the password for %s failed!
$PALANG['pPassword_result_success'] = 'Ваш пароль был изменен! (%s)'; # XXX Text changed to: The password for %s has been changed.
$PALANG['pPassword_recovery_title'] = 'Follow the instructions to reset your password.'; # XXX
$PALANG['pPassword_recovery_button'] = 'Send me the code'; # XXX
$PALANG['pPassword_recovery_email_body'] = "Hello,\n\nUse the following link to change your email password :\n%s\n\nRegards,\n\n" . $CONF['admin_name']; # XXX
$PALANG['pPassword_recovery_sms_body'] = "Hello,\nThe code to change your password is: %s\n" . $CONF['admin_name']; # XXX
$PALANG['pPassword_recovery_processed'] = "We processed your request. If you entered a valid username, you'll receive an email/SMS with a password code."; # XXX
$PALANG['pPassword_password_code'] = 'Code sent by email/SMS'; # XXX
$PALANG['pPassword_code_text_error'] = 'Invalid code'; # XXX
$PALANG['pEdit_vacation_set'] = 'Поменять / задать сообщение об отсутствии';
$PALANG['pEdit_vacation_remove'] = 'Убрать сообщение об отсутствии';
$PALANG['pVacation_result_error'] = 'Не удалось обновить настройки автоответчика для %s!';
$PALANG['pVacation_result_error'] = 'Невозможно обновить настройки автоответчика! (%s)'; # XXX Text changed to: Updating the auto response settings for %s failed
$PALANG['pVacation_result_removed'] = 'Автоответчик для %s отключен!';
$PALANG['pVacation_result_added'] = 'Автоответчик для %s включен!';
$PALANG['pVacation_reply_type'] = 'Выбор ответа';
$PALANG['pVacation_reply_delay_time'] = 'Интервал времени';
$PALANG['pVacation_reply_delay_time_text'] = 'Время в секундах';
$PALANG['pVacation_until_before_today'] = 'Дата [Активен по] установлена до Сегодня';
$PALANG['pVacation_until_before_from'] = 'Дата [Активен по] установлена до [Активен с]';
$PALANG['reply_once'] = 'Отвечать один раз';
$PALANG['reply_every_mail'] = 'Отвечать на каждое письмо';
$PALANG['reply_once_per_day'] = 'Отвечать один раз в день';
$PALANG['reply_once_per_week'] = 'Отвечать один раз в неделю';
$PALANG['pViewlog_welcome'] = 'Просмотр %s последних действий для ';
$PALANG['pVacation_reply_type'] = 'Choice of reply'; # XXX
$PALANG['pVacation_reply_delay_time'] = 'Interval time'; # XXX
$PALANG['pVacation_reply_delay_time_text'] = 'Time in seconds'; # XXX
$PALANG['pVacation_until_before_today'] = 'The Date of [Active until] is set before Today'; # XXX
$PALANG['pVacation_until_before_from'] = 'The Date of [Active until] is set before [Active from]'; # XXX
$PALANG['reply_once'] = 'Reply once'; # XXX
$PALANG['reply_every_mail'] = 'Reply on every mail'; # XXX
$PALANG['reply_once_per_day'] = 'Reply once a day'; # XXX
$PALANG['reply_once_per_week'] = 'Reply once per week'; # XXX
$PALANG['pViewlog_welcome'] = 'Просмотреть %s последних действий для ';
$PALANG['pViewlog_timestamp'] = 'Время создания/модификации';
$PALANG['pViewlog_action'] = 'Действие';
$PALANG['pViewlog_data'] = 'Данные';
@ -217,34 +215,34 @@ $PALANG['pViewlog_action_delete_mailbox'] = 'удаление ящика';
$PALANG['pViewlog_action_edit_mailbox'] = 'редактирование ящика';
$PALANG['pViewlog_action_edit_mailbox_state'] = 'изменение активности ящика';
$PALANG['pViewlog_action_create_alias'] = 'создание алиаса';
$PALANG['pViewlog_action_create_alias_domain'] = 'создание алиаса домена';
$PALANG['pViewlog_action_edit_alias_domain'] = 'редактирование алиаса домена';
$PALANG['pViewlog_action_create_alias_domain'] = 'создание домена-алиаса';
$PALANG['pViewlog_action_edit_alias_domain'] = 'edit alias domain'; # XXX
$PALANG['pViewlog_action_delete_alias'] = 'удаление алиаса';
$PALANG['pViewlog_action_delete_alias_domain'] = 'удаление алиаса домена';
$PALANG['pViewlog_action_delete_alias_domain'] = 'удаление домена-алиаса';
$PALANG['pViewlog_action_edit_alias'] = 'редактирование алиаса';
$PALANG['pViewlog_action_edit_alias_state'] = 'изменение активности алиаса';
$PALANG['pViewlog_action_edit_alias_domain_state'] = 'изменение активности алиаса домена';
$PALANG['pViewlog_action_edit_alias_domain_state'] = 'изменение активности домена-алиаса';
$PALANG['pViewlog_action_edit_password'] = 'изменение пароля';
$PALANG['pViewlog_action_create_admin'] = 'создание админа';
$PALANG['pViewlog_action_edit_admin'] = 'редактирование админа';
$PALANG['pViewlog_action_delete_admin'] = 'удаление админа';
$PALANG['pViewlog_action_edit_vacation'] = 'редактирование автоответчика';
$PALANG['pViewlog_action_create_fetchmail'] = 'создание задания fetchmail';
$PALANG['pViewlog_action_edit_fetchmail'] = 'редактирование задания fetchmail';
$PALANG['pViewlog_action_delete_fetchmail'] = 'удаление задания fetchmail';
$PALANG['pViewlog_action_create_admin'] = 'create admin'; # XXX
$PALANG['pViewlog_action_edit_admin'] = 'edit admin'; # XXX
$PALANG['pViewlog_action_delete_admin'] = 'delete admin'; # XXX
$PALANG['pViewlog_action_edit_vacation'] = 'edit vacation'; # XXX
$PALANG['pViewlog_action_create_fetchmail'] = 'create fetchmail job'; # XXX
$PALANG['pViewlog_action_edit_fetchmail'] = 'edit fetchmail job'; # XXX
$PALANG['pViewlog_action_delete_fetchmail'] = 'delete fetchmail job'; # XXX
$PALANG['pViewlog_result_error'] = 'Невозможно найти журнал!';
$PALANG['pSendmail_welcome'] = 'Отправка письма';
$PALANG['pSendmail_welcome'] = 'Послать письмо.';
$PALANG['from'] = 'От';
$PALANG['pSendmail_to'] = 'Кому';
$PALANG['pSendmail_to_text_error'] = 'Поле Кому пустое либо содержит некорректный адрес!';
$PALANG['subject'] = 'Тема';
$PALANG['pSendmail_subject_text'] = 'Добро пожаловать!';
$PALANG['pSendmail_body'] = 'Текст';
$PALANG['pSendmail_button'] = 'Отправить сообщение';
$PALANG['pSendmail_result_error'] = 'Не удалось отправить сообщение для %s!';
$PALANG['pSendmail_result_success'] = 'Сообщение для %s отправлено.';
$PALANG['pSendmail_button'] = 'Послать сообщение';
$PALANG['pSendmail_result_error'] = 'Невозможно отправить сообщение! (%s)'; # XXX text change - new: Unable to send email to %s!
$PALANG['pSendmail_result_success'] = 'Сообщение отправлено! (%s)'; # XXX text change - new: Email sent to %s.
$PALANG['pAdminMenu_list_admin'] = 'Список админов';
$PALANG['pAdminMenu_list_domain'] = 'Список доменов';
@ -265,22 +263,22 @@ $PALANG['last_modified'] = 'Последнее изменение';
$PALANG['pAdminCreate_domain_welcome'] = 'Добавление нового домена';
$PALANG['pAdminCreate_domain_domain_text_error'] = 'Домен уже существует!';
$PALANG['domain_does_not_exist'] = 'Указанный домен не существует!';
$PALANG['domain_does_not_exist'] = 'Этот домен не существует!';
$PALANG['pAdminCreate_domain_domain_text_error2'] = 'Некорректный домен!';
$PALANG['pAdminCreate_domain_defaultaliases'] = 'Добавить стандартные алиасы для домена';
$PALANG['pAdminCreate_domain_button'] = 'Добавить домен';
$PALANG['pAdminCreate_domain_result_error'] = 'Не удалось добавить домен %s!';
$PALANG['pAdminCreate_domain_result_success'] = 'Домен %s успешно добавлен.';
$PALANG['domain_updated'] = 'Домен %s успешно обновлен.';
$PALANG['pAdminCreate_domain_result_error'] = 'Невозможно добавить домен! (%s)'; # XXX Text changed to: Adding the domain %s failed!
$PALANG['pAdminCreate_domain_result_success'] = 'Домен был добавлен! (%s)'; # XXX Text changed to: The domain %s has been added.
$PALANG['domain_updated'] = 'The domain %s has been updated.'; # XXX
$PALANG['pAdminDelete_admin_error'] = 'Невозможно удалить администратора!';
$PALANG['domain_postdel_failed'] = 'Не удалось корректно выполнить скрипт после удаления домена, подробности смотрите в журнале ошибок!';
$PALANG['domain_postcreate_failed'] = 'Не удалось корректно выполнить скрипт после создания домена, подробности смотрите в журнале ошибок!';
$PALANG['mailbox_postdel_failed'] = 'Не удалось корректно выполнить скрипт после удаления почтового ящика, подробности смотрите в журнале ошибок!';
$PALANG['mailbox_postedit_failed'] = 'Не удалось корректно выполнить скрипт после изменения почтового ящика, подробности смотрите в журнале ошибок!';
$PALANG['mailbox_postcreate_failed'] = 'Не удалось корректно выполнить скрипт после создания почтового ящика, подробности смотрите в журнале ошибок!';
$PALANG['pAdminDelete_alias_domain_error'] = 'Невозможно удалить алиас домена!';
$PALANG['domain_conflict_vacation_domain'] = 'Вы не можете использовать домен автоответчика в качестве почтового домена!';
$PALANG['domain_postdel_failed'] = 'Невозможно удалить домен!'; # XXX Text changed to: The domain postdeletion script failed, check the error log for details!
$PALANG['domain_postcreate_failed'] = 'The domain postcreate script failed, check the error log for details!'; # XXX
$PALANG['mailbox_postdel_failed'] = 'The mailbox postdeletion script failed, check the error log for details!'; # XXX
$PALANG['mailbox_postedit_failed'] = 'The mailbox postedit script failed, check the error log for details!'; # XXX
$PALANG['mailbox_postcreate_failed'] = 'The mailbox postcreate script failed, check the error log for details!'; # XXX
$PALANG['pAdminDelete_alias_domain_error'] = 'Невозможно удалить домен-алиас!';
$PALANG['domain_conflict_vacation_domain'] = 'You can\'t use the vacation domain as mail domain!'; # XXX
$PALANG['pAdminEdit_domain_welcome'] = 'Редактирование домена';
$PALANG['pAdminEdit_domain_aliases_text'] = '-1 = отключить | 0 = неограниченное';
@ -290,40 +288,40 @@ $PALANG['pAdminEdit_domain_quota'] = 'Квота домена';
$PALANG['transport'] = 'Транспорт';
$PALANG['pAdminEdit_domain_transport_text'] = 'Укажите транспорт';
$PALANG['pAdminEdit_domain_backupmx'] = 'Почтовый сервер является резервным MX';
$PALANG['pAdminEdit_domain_result_error'] = 'Не удалось изменить домен %s!';
$PALANG['pAdminEdit_domain_result_error'] = 'Невозможно изменить домен! (%s)'; # XXX Text changed to: Modifying the domain %s failed!
$PALANG['pAdminCreate_admin_welcome'] = 'Добавление нового администратора домена';
$PALANG['email_address'] = 'Почтовый адрес';
$PALANG['pAdminCreate_admin_username_text_error1'] = 'Некорректный адрес администратора!';
$PALANG['admin_already_exists'] = 'Администратор уже существует!';
$PALANG['admin_does_not_exist'] = 'Администратор не существует!';
$PALANG['admin_already_exists'] = 'Администратор уже существует либо некорректное имя'; # XXX Text changed to: The admin already exists!
$PALANG['admin_does_not_exist'] = 'The admin does not exist!'; # XXX
$PALANG['pAdminCreate_admin_button'] = 'Добавить администратора';
$PALANG['pAdminCreate_admin_result_error'] = 'Не удалось добавить администратора %s!';
$PALANG['pAdminCreate_admin_result_success'] = 'Администратор %s успешно добавлен!';
$PALANG['pAdminCreate_admin_result_error'] = 'Невозможно добавить администратора! (%s)'; # XXX Text changed to: Adding the admin %s failed!
$PALANG['pAdminCreate_admin_result_success'] = 'Администратор был добавлен! (%s)'; # XXX Text changed to: The admin %s has been added.
$PALANG['pAdminEdit_admin_welcome'] = 'Редактирование настроек администратора домена';
$PALANG['admin'] = 'Админ';
$PALANG['pAdminEdit_admin_welcome'] = 'Редактирование администратора домена';
$PALANG['admin'] = 'Администратор'; # XXX check text - should be 'Admin'
$PALANG['password_again'] = 'Пароль (еще раз)';
$PALANG['super_admin'] = 'Суперадмин';
$PALANG['super_admin_desc'] = 'Суперадмины имеют доступ ко всем доменам, могут управлять доменами и учетными записями администраторов.';
$PALANG['pAdminEdit_admin_result_error'] = 'Не удалось изменить настройки администратора %s!';
$PALANG['pAdminEdit_admin_result_success'] = 'Настройки администратора %s успешно изменены!';
$PALANG['super_admin'] = 'Супер админ';
$PALANG['super_admin_desc'] = 'Super admins have access to all domains, can manage domains and admin accounts.'; # XXX
$PALANG['pAdminEdit_admin_result_error'] = 'Невозможно изменить администратора! (%s)'; # XXX Text changed to: Modifying the admin %s failed!
$PALANG['pAdminEdit_admin_result_success'] = 'Администратор был изменен! (%s)'; # XXX Text changed to: The admin %s has been modified.
$PALANG['pUsersLogin_welcome'] = 'Вход пользователей для изменения пароля и алиасов.';
$PALANG['pUsersLogin_username_incorrect'] = 'Введено неправильное имя. Проверьте, что вы ввели свой адрес электронной почты!';
$PALANG['pUsersLogin_password_incorrect'] = 'Введен неверный пароль!';
$PALANG['pUsersLogin_password_recover'] = 'Я забыл свой пароль';
$PALANG['pUsersLogin_password_recover'] = 'I forgot my password'; # XXX
$PALANG['pUsersMenu_vacation'] = 'Автоответчик';
$PALANG['pUsersMenu_edit_alias'] = 'Изменить пересылку почты';
$PALANG['pUsersMain_vacation'] = 'Настроить сообщение "вне офиса" либо автоответчик для вашей почты.';
$PALANG['pUsersMain_vacationSet'] = 'Автоответчик ВКЛЮЧЕН, нажмите \'Автоответчик\' для редактирования/удаления';
$PALANG['pUsersMain_vacationSet'] = 'Автоответчик ВКЛЮЧЕН, щелкните \'Автоответчик\', чтобы его редактировать/убрать';
$PALANG['pUsersMain_edit_alias'] = 'Изменить перенаправление почты.';
$PALANG['pUsersMain_password'] = 'Изменить текущий пароль.';
$PALANG['pUsersVacation_welcome'] = 'Автоответчик.';
$PALANG['pUsersVacation_welcome_text'] = 'Автоответчик для %s включен!';
$PALANG['pUsersVacation_welcome_text'] = 'У вас уже есть настроенный автоответчик! (%s)'; # XXX Text changed to: 'Auto response for %s is active!'
$PALANG['pUsersVacation_subject_text'] = 'Вне офиса';
$PALANG['message'] = 'Сообщение';
$PALANG['pUsersVacation_body_text'] = <<<EOM
@ -343,53 +341,49 @@ $PALANG['pReturn_to'] = 'Вернуться к';
$PALANG['pBroadcast_title'] = 'Отправка широковещательного сообщения';
$PALANG['pBroadcast_name'] = 'Ваше имя';
$PALANG['pBroadcast_success'] = 'Ваше широковещательное сообщение успешно отправлено.';
$PALANG['pBroadcast_success'] = 'Ваше широковещательное сообщение было отправлено.';
$PALANG['pAdminMenu_broadcast_message'] = 'Широковещательное сообщение';
$PALANG['pBroadcast_error_empty'] = 'Поля Имя, Тема и Сообщение не должны быть пустыми!';
$PALANG['broadcast_mailboxes_only'] = 'Отправить только на почтовые ящики';
$PALANG['broadcast_to_domains'] = 'Отправить на домены:';
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'возможно НЕ ДОСТАВЛЕНО ';
$PALANG['pStatus_disabled'] = 'Учетная запись отключена ';
$PALANG['pStatus_expired'] = 'Срок действия пароля истек ';
$PALANG['pStatus_vacation'] = 'Автоответчик включен ';
$PALANG['pStatus_custom'] = 'Доставляется для ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Пароль слишком короткий: требуется %s символов";
$PALANG['password_too_short'] = "Пароль слишком короткий - требуется %s символов";
$PALANG['password_no_characters'] = "Ваш пароль должен содержать не менее %s символов.";
$PALANG['password_no_digits'] = "Ваш пароль должен содержать не менее %s цифр(ы).";
$PALANG['pInvalidDomainRegex'] = "Некорректное имя домена %s, не соответствует регулярному выражению";
$PALANG['pInvalidDomainDNS'] = "Некорректный домен %s, и/или не обнаруживается в DNS";
$PALANG['pInvalidMailRegex'] = "Некорректный email %s, не соответствует регулярному выражению";
$PALANG['pInvalidMailRegex'] = "Некорректный адрес e-mail, не соответствует регулярному выражению (%s)"; # XXX %s added - but it should be in the text, not at the end
$PALANG['pFetchmail_welcome'] = 'Собирать почту для:';
$PALANG['pFetchmail_new_entry'] = 'Новая запись';
$PALANG['fetchmail_already_exists'] = 'Указанное задание fetchmail уже существует!';
$PALANG['fetchmail_does_not_exist'] = 'Указанное задание fetchmail не существует!';
$PALANG['pFetchmail_database_save_error'] = 'Не удалось сохранить запись в базе данных!';
$PALANG['fetchmail_already_exists'] = 'This fetchmail job already exists!'; # XXX
$PALANG['fetchmail_does_not_exist'] = 'This fetchmail job does not exist!'; # XXX
$PALANG['pFetchmail_database_save_error'] = 'Не удалось сохранить эту запись в базе данных!';
$PALANG['pFetchmail_database_save_success'] = 'Запись сохранена в базе данных.';
$PALANG['pFetchmail_error_invalid_id'] = 'Не найдена запись с номером %s!';
$PALANG['pFetchmail_invalid_mailbox'] = 'Некорректный почтовый ящик!';
$PALANG['pFetchmail_server_missing'] = 'Пожалуйста, введите имя удаленного сервера!';
$PALANG['pFetchmail_user_missing'] = 'Пожалуйста, введите имя удаленного пользователя!';
$PALANG['pFetchmail_password_missing'] = 'Пожалуйста, введите пароль удаленного пользователя!';
$PALANG['pFetchmail_server_missing'] = 'Пожалуйста введите имя удаленного сервера!';
$PALANG['pFetchmail_user_missing'] = 'Пожалуйста введите имя удаленного пользователя!';
$PALANG['pFetchmail_password_missing'] = 'Пожалуйста введите пароль удаленного пользователя!';
$PALANG['pFetchmail_field_id'] = 'Номер';
$PALANG['pFetchmail_field_mailbox'] = 'Ящик';
$PALANG['pFetchmail_field_src_server'] = 'Сервер';
$PALANG['pFetchmail_field_src_port'] = 'Порт';
$PALANG['pFetchmail_field_src_auth'] = 'Тип аутентификации';
$PALANG['pFetchmail_field_src_user'] = 'Пользователь';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
$PALANG['pFetchmail_field_src_folder'] = 'Папка';
$PALANG['pFetchmail_field_poll_time'] = 'Опрашивать';
$PALANG['pFetchmail_field_fetchall'] = 'Забирать все';
$PALANG['pFetchmail_field_fetchall'] = 'Скачивать все';
$PALANG['pFetchmail_field_keep'] = 'Не удалять';
$PALANG['pFetchmail_field_protocol'] = 'Протокол';
$PALANG['pFetchmail_field_usessl'] = 'Включить SSL';
$PALANG['pFetchmail_field_sslcertck'] = 'Проверка SSL сертификата';
$PALANG['pFetchmail_field_sslcertpath'] = 'Путь к SSL сертификатам';
$PALANG['pFetchmail_field_sslfingerprint'] = 'SSL отпечаток (md5)';
$PALANG['pFetchmail_field_sslcertck'] = 'SSL certificate check'; # XXX
$PALANG['pFetchmail_field_sslcertpath'] = 'SSL path to certificates'; # XXX
$PALANG['pFetchmail_field_sslfingerprint'] = 'SSL fingerprint (md5)'; # XXX
$PALANG['pFetchmail_field_extra_options'] = 'Дополнительные параметры';
$PALANG['pFetchmail_field_mda'] = 'MDA';
$PALANG['pFetchmail_field_date'] = 'Дата';
@ -397,24 +391,21 @@ $PALANG['pFetchmail_field_returned_text'] = 'Текст отчета';
$PALANG['pFetchmail_desc_id'] = 'Номер записи';
$PALANG['pFetchmail_desc_mailbox'] = 'Локальный ящик';
$PALANG['pFetchmail_desc_src_server'] = 'Удаленный сервер';
$PALANG['pFetchmail_desc_src_port'] = 'Номер удаленного порта, если требуется нестандартный удаленный порт. (0: использовать порт по умолчанию)';
$PALANG['pFetchmail_desc_src_auth'] = 'Обычно \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Удаленный пользователь';
$PALANG['pFetchmail_desc_src_password'] = 'Удаленный пароль';
$PALANG['pFetchmail_desc_src_folder'] = 'Удаленная папка';
$PALANG['pFetchmail_desc_poll_time'] = 'Опрашивать каждые ... минут';
$PALANG['pFetchmail_desc_fetchall'] = 'Забирать как старые (просмотренные), так и новые сообщения';
$PALANG['pFetchmail_desc_keep'] = 'Не удалять полученные сообщения с удаленного сервера';
$PALANG['pFetchmail_desc_protocol'] = 'Используемый протокол';
$PALANG['pFetchmail_desc_fetchall'] = 'Скачивать и старые (виденные), и новые сообщения';
$PALANG['pFetchmail_desc_keep'] = 'Не удалять скачанные сообщения с удаленного сервера';
$PALANG['pFetchmail_desc_protocol'] = 'Какой протокол использовать';
$PALANG['pFetchmail_desc_usessl'] = 'Шифрование SSL';
$PALANG['pFetchmail_desc_extra_options'] = 'Дополнительные параметры fetchmail';
$PALANG['pFetchmail_desc_mda'] = 'Агент доставки почты (MDA)';
$PALANG['pFetchmail_desc_mda'] = 'Агент доставки почты (Mail Delivery Agent)';
$PALANG['pFetchmail_desc_date'] = 'Дата последнего опроса/изменения конфигурации';
$PALANG['pFetchmail_desc_returned_text'] = 'Текст отчета о последнем опросе';
$PALANG['dateformat_pgsql'] = 'dd.mm.YYYY'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format
$PALANG['dateformat_mysql'] = '%d.%m.%Y'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format
$PALANG['password_expiration'] = 'Пароль истекает';
$PALANG['password_expiration_desc'] = 'Дата истечения срока действия пароля';
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -140,7 +140,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Len presmerovať na zadané emailové adr
$PALANG['pEdit_alias_result_error'] = 'Nepodarilo se upraviť alias %s!';
$PALANG['pCreate_mailbox_welcome'] = 'Vytvoriť novú schránku v doméne';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'Adresa nie je platná!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Dosiahli ste limit, nemôžete vytvárať ďalšie schránky!';
$PALANG['pCreate_mailbox_password_text'] = 'Heslo pre POP3/IMAP/SMTP';
@ -339,13 +338,10 @@ $PALANG['pBroadcast_error_empty'] = 'Polia Vaše meno, Predmet a Obsah nemôžu
$PALANG['broadcast_mailboxes_only'] = 'Posielať len do schránok';
$PALANG['broadcast_to_domains'] = 'Posielať na domény:';
$PALANG['pStatus_undeliverable'] = 'možno NEDORUČITEĽNÉ ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Doručuje sa na ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "Heslo je príliš krátke - musí mať aspoň %s znakov";
$PALANG['password_no_characters'] = "Heslo musí obsahovať aspoň %s písmen."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)."
$PALANG['password_no_characters'] = "Heslo musí obsahovať aspoň %s písmen.";
$PALANG['password_no_digits'] = "Heslo musí obsahovať aspoň %s číslic.";
$PALANG['pInvalidDomainRegex'] = "Neplatný názov domény %s";
$PALANG['pInvalidDomainDNS'] = "Neplatná doména %s alebo neexistuje jej DNS záznam";
@ -364,7 +360,6 @@ $PALANG['pFetchmail_password_missing'] = 'Zadajte heslo vzdialeného používate
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'Schránka';
$PALANG['pFetchmail_field_src_server'] = 'Server';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Autentifikácia';
$PALANG['pFetchmail_field_src_user'] = 'Meno';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -384,7 +379,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Výsledok';
$PALANG['pFetchmail_desc_id'] = 'ID záznamu';
$PALANG['pFetchmail_desc_mailbox'] = 'Lokálna schránka';
$PALANG['pFetchmail_desc_src_server'] = 'Vzdialený server';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Väčšinou \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Vzdialené meno používateľa';
$PALANG['pFetchmail_desc_src_password'] = 'Vzdialené heslo';
@ -400,8 +394,6 @@ $PALANG['pFetchmail_desc_date'] = 'Dátum poslednej zmeny konfigurá
$PALANG['pFetchmail_desc_returned_text'] = 'Správa z posledného sťahovania';
$PALANG['dateformat_pgsql'] = 'dd.mm.YYYY'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format
$PALANG['dateformat_mysql'] = '%d.%m.%Y'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -139,7 +139,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.';
$PALANG['pEdit_alias_result_error'] = 'Aliasa ni bilo mogoče spremeniti! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Ustvari nov predal za izbrano domeno.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-poštni naslov ni pravilen!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Maksimalno število predalov je preseženo!';
$PALANG['pCreate_mailbox_password_text'] = 'Geslo za POP3/IMAP';
@ -338,13 +337,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s letters (A-Z, a-z)."; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
@ -363,7 +359,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -383,7 +378,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -399,8 +393,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -142,7 +142,6 @@ $PALANG['pEdit_alias_forward_only'] = 'Vidarebefordra endast till angivna e-post
$PALANG['pEdit_alias_result_error'] = 'Misslyckades att ändra på alias %s!';
$PALANG['pCreate_mailbox_welcome'] = 'Skapa en ny lokal brevlåda i din domän.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-postadressen är inte korrekt!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Du har redan skapat max tillåtet antal brevlådor!';
$PALANG['pCreate_mailbox_password_text'] = 'Lösenord för POP3/IMAP';
@ -348,14 +347,11 @@ $PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'kan eventuellt ej levereras ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = 'Levereras till ';
$PALANG['pStatus_popimap'] = 'POP/IMAP ';
$PALANG['password_too_short'] = "För kort lösenord - ett lösenord på %s tecken krävs";
$PALANG['password_no_characters'] = "Lösenordet måste innehålla minst %s tecken."; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)."
$PALANG['password_no_characters'] = "Lösenordet måste innehålla minst %s tecken.";
$PALANG['password_no_digits'] = "Lösenordet måste innehålla minst %s siffra/siffror.";
$PALANG['pInvalidDomainRegex'] = "Regexp-kollen misslyckas på domänen %s";
$PALANG['pInvalidDomainDNS'] = "Domänen %s finns inte i DNS";
@ -375,7 +371,6 @@ $PALANG['pFetchmail_password_missing'] = 'Var snäll och fyll i lösenordet till
$PALANG['pFetchmail_field_id'] = 'ID';
$PALANG['pFetchmail_field_mailbox'] = 'E-postkonto';
$PALANG['pFetchmail_field_src_server'] = 'Värddator';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Autentiseringstyp';
$PALANG['pFetchmail_field_src_user'] = 'Användarnamn';
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -395,7 +390,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returtext';
$PALANG['pFetchmail_desc_id'] = 'Händelse-ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Lokal brevlåda';
$PALANG['pFetchmail_desc_src_server'] = 'Värddator';
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Oftast \'password\'';
$PALANG['pFetchmail_desc_src_user'] = 'Användarnamn';
$PALANG['pFetchmail_desc_src_password'] = 'Lösenord';
@ -412,8 +406,6 @@ $PALANG['pFetchmail_desc_returned_text'] = 'Textmeddelande från senaste kont
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -3,240 +3,239 @@
//
// Language file Türkçe
// by Onuryalazi
// by Özgür Kazancci (Özgür Kazanççı): Turkish characters fixed&Lots of typo(s) corrected and non-Turkish new lines translated
//
$PALANG['YES'] = 'EVET';
$PALANG['NO'] = 'HAYIR';
$PALANG['edit'] = 'düzenle';
$PALANG['del'] = 'sil';
$PALANG['exit'] = 'Çıkış';
$PALANG['cancel'] = 'İptal';
$PALANG['save'] = 'Değişiklikleri kaydet';
$PALANG['confirm'] = 'Bunu silmek istediğinizden emin misiniz?\n';
$PALANG['confirm_delete_admin'] = 'Şu yöneticiyi silmek istediğinizden emin misiniz: %s?';
$PALANG['confirm_delete_alias'] = 'Şu yönlendirmeyi silmek istediğinizden emin misiniz: %s?';
$PALANG['confirm_delete_aliasdomain'] = 'Şu yönlendirme domainini silmek istediğinizden emin misiniz: %s?';
$PALANG['confirm_delete_domain'] = 'Bu domain için tüm kayıtları silmek istediğinizden emin misiniz? Bu işlem geri alınamaz!\n (%s)'; # XXX text changed to: 'Do you really want to delete all records for the domain %s? This can not be undone'
$PALANG['confirm_delete_fetchmail'] = 'Bu e-posta yakalama işlerini silmek istediğinizden emin misiniz: %s?';
$PALANG['confirm_delete_mailbox'] = 'Bu e-posta kutusunu silmek istediğinizden emin misiniz: %s?';
$PALANG['confirm_delete_vacation'] = 'Bu hesap için otomatik tatil mesajlarını silmek istediğinizden emin misiniz: %s?';
$PALANG['no_delete_permissions'] = 'Silmeye yetkiniz yok: %s!';
$PALANG['check_update'] = 'Güncelleştirmeleri denetleyin';
$PALANG['invalid_parameter'] = 'Geçersiz parametre!';
$PALANG['show'] = 'Göster:';
$PALANG['all'] = 'Tümü';
$PALANG['created'] = 'Oluşturuldu';
$PALANG['unknown'] = 'bilinmeyen';
$PALANG['download_csv'] = 'Bu listeyi CSV dosyası olarak indirin';
$PALANG['missing_field'] = 'Girilmesi gereken alan %s boş';
$PALANG['must_be_numeric'] = '%s rakamlardan oluşmalı';
$PALANG['must_be_numeric_bigger_than_null'] = '%s rakamlardan oluşmalı ve sıfırdan büyük olmalı';
$PALANG['must_be_boolean'] = '%s girilen değer boolean olmalı';
$PALANG['invalid_value_given'] = '%s için girilen değer yanlış';
$PALANG['edit_not_allowed'] = 'Düzenlemeye yetkiniz yok: %s';
$PALANG['searchparams'] = 'Arama parametreleri:';
$PALANG['pFooter_logged_as'] = 'Giriş yapılan kullanıcı: %s';
$PALANG['exit'] = 'Exit'; # XXX
$PALANG['cancel'] = 'Cancel'; # XXX
$PALANG['save'] = 'Save changes'; # XXX
$PALANG['confirm'] = 'Bunu silmek istediðinizden emin misiniz?\n';
$PALANG['confirm_delete_admin'] = 'Do you really want to delete the admin %s?'; # XXX
$PALANG['confirm_delete_alias'] = 'Do you really want to delete the alias %s?'; # XXX
$PALANG['confirm_delete_aliasdomain'] = 'Do you really want to delete the alias domain %s?'; # XXX
$PALANG['confirm_delete_domain'] = 'Bu domain için tüm kayýtlarý silmek istediðinizden emin misiniz? Bu iþlem geri alýnamaz!\n (%s)'; # XXX text changed to: 'Do you really want to delete all records for the domain %s? This can not be undone'
$PALANG['confirm_delete_fetchmail'] = 'Do you really want to delete the fetchmail job %s?'; # XXX
$PALANG['confirm_delete_mailbox'] = 'Do you really want to delete the mailbox %s?'; # XXX
$PALANG['confirm_delete_vacation'] = 'Do you really want to delete the vacation message for %s?'; # XXX
$PALANG['no_delete_permissions'] = 'You are not allowed to delete %s!'; # XXX
$PALANG['check_update'] = 'Check for update'; # XXX
$PALANG['invalid_parameter'] = 'Invalid parameter!'; # XXX
$PALANG['show'] = 'Show:'; # XXX
$PALANG['all'] = 'All'; # XXX
$PALANG['created'] = 'Created'; # XXX
$PALANG['unknown'] = 'unknown'; # XXX
$PALANG['download_csv'] = 'Download this list as CSV file'; # XXX
$PALANG['missing_field'] = 'Field %s is missing'; # XXX
$PALANG['must_be_numeric'] = '%s must be numeric'; # XXX
$PALANG['must_be_numeric_bigger_than_null'] = '%s must be numeric and bigger than 0'; # XXX
$PALANG['must_be_boolean'] = '%s must be boolean'; # XXX
$PALANG['invalid_value_given'] = 'Invalid value given for %s'; # XXX
$PALANG['edit_not_allowed'] = 'You are not allowed to edit %s'; # XXX
$PALANG['searchparams'] = 'Search parameters:'; # XXX
$PALANG['pFooter_logged_as'] = 'Logged in as %s'; # XXX
$PALANG['pLogin_welcome'] = 'E-Posta Yöneticileri, buradan domainlerinizi yönetmek için giriş yapabilirsiniz.';
$PALANG['pLogin_username'] = 'Kullanıcı adı (e-posta)'; # # XXX check translation - should be "Login (email)"
$PALANG['password'] = 'Şifre'; # XXX compare with pUsersLogin_password - should be "Password"
$PALANG['pLogin_language'] = 'Dil';
$PALANG['pLogin_button'] = 'Giriş'; # XXX compare with pUsersLogin_button - should be "Login"
$PALANG['pLogin_failed'] = 'E-posta adresiniz veya şifreniz yanlış.';
$PALANG['pLogin_login_users'] = 'Kullanıcı işlemlerine girmek için burayı kullanınız.';
$PALANG['pLogin_welcome'] = 'Posta Yöneticileri buradan domainlerinizi yönetmek için giriþ yapabilirsiniz.';
$PALANG['pLogin_username'] = 'Kullanýcý adý (eposta)'; # # XXX check translation - should be "Login (email)"
$PALANG['password'] = 'Þifre'; # XXX compare with pUsersLogin_password - should be "Password"
$PALANG['pLogin_language'] = 'Language'; # XXX
$PALANG['pLogin_button'] = 'Giriþ'; # XXX compare with pUsersLogin_button - should be "Login"
$PALANG['pLogin_failed'] = 'Your email address or password are not correct.'; # XXX
$PALANG['pLogin_login_users'] = 'Kullanýcý iþlemlerine girmek için burayý kullanýnýz.';
$PALANG['pMenu_main'] = 'Ana';
$PALANG['pMenu_main'] = 'Main'; # XXX
$PALANG['pMenu_overview'] = 'Genel Bilgiler';
$PALANG['add_alias'] = 'Alias Ekle';
$PALANG['add_alias_domain'] = 'Alias Domain Kaydı Ekle';
$PALANG['add_mailbox'] = 'E-posta kutusu ekle';
$PALANG['pMenu_fetchmail'] = 'E-posta Yakala';
$PALANG['add_alias_domain'] = 'Add Alias Domain'; # XXX
$PALANG['add_mailbox'] = 'Posta kutusu ekle';
$PALANG['pMenu_fetchmail'] = 'Fetch Email'; # XXX
$PALANG['pMenu_sendmail'] = 'E-posta Gönder';
$PALANG['pMenu_password'] = 'Şifre';
$PALANG['pMenu_viewlog'] = 'Logları İncele';
$PALANG['pMenu_logout'] = 'Çıkış';
$PALANG['pMenu_password'] = 'Þifre';
$PALANG['pMenu_viewlog'] = 'Log Ýncele';
$PALANG['pMenu_logout'] = 'Çýkýþ';
$PALANG['pMain_welcome'] = 'Postfix Admin\'e Hoş Geldiniz!';
$PALANG['pMain_overview'] = 'E-posta kutularınızın ve aliaslarınızın listesi. Buradan silip düzenleyebilirsiniz.';
$PALANG['pMain_create_alias'] = 'Domaininiz için yeni bir alias yaratın.'; # XXX check text - should be 'Create a new alias for your domain.'
$PALANG['pMain_create_mailbox'] = 'Domaininiz için yeni bir e-posta kutusu yaratın.';
$PALANG['pMain_sendmail'] = 'Yeni yaratmış olduğunuz e-posta kutularından birine e-posta gönderin.';
$PALANG['pMain_password'] = 'Yönetici hesabınızın şifresini değiştirin.';
$PALANG['pMain_viewlog'] = 'log dosyalarını inceleyin.';
$PALANG['pMain_logout'] = 'Sistemden çıkın.';
$PALANG['pMain_welcome'] = 'Postfix Admin\'e hoþ geldiniz!';
$PALANG['pMain_overview'] = 'posta kutularýnýzýn ve aliaslarýnýzýn listesi. buradan silip düzenleyebilirsiniz.';
$PALANG['pMain_create_alias'] = 'Domaininiz icin yeni bir alias yaratýn.'; # XXX check text - should be 'Create a new alias for your domain.'
$PALANG['pMain_create_mailbox'] = 'Domaininiz için yeni bir posta kutusu yaratýn.';
$PALANG['pMain_sendmail'] = 'Yeni yaratmýþ olduðunuz posta kutularýndan birine posta gönderin.';
$PALANG['pMain_password'] = 'Yönetici hesabýnýzýn þifresini deðiþtirin.';
$PALANG['pMain_viewlog'] = 'log dosyalarýný inceleyin.';
$PALANG['pMain_logout'] = 'Sistemden çýkýn.';
$PALANG['pOverview_disabled'] = 'Kapalı';
$PALANG['pOverview_unlimited'] = 'Sınırsız';
$PALANG['pOverview_title'] = ':: Tanımlı Domainler';
$PALANG['pOverview_up_arrow'] = 'En Üste Git';
$PALANG['pOverview_right_arrow'] = 'Sonraki Sayfa';
$PALANG['pOverview_left_arrow'] = 'Önceki Sayfa';
$PALANG['pOverview_alias_domain_title'] = ':: Domain Aliasları';
$PALANG['pOverview_disabled'] = 'Disabled'; # XXX
$PALANG['pOverview_unlimited'] = 'Unlimited'; # XXX
$PALANG['pOverview_title'] = ':: Defined Domains'; # XXX
$PALANG['pOverview_up_arrow'] = 'Go Top'; # XXX
$PALANG['pOverview_right_arrow'] = 'Next Page'; # XXX
$PALANG['pOverview_left_arrow'] = 'Previous Page'; # XXX
$PALANG['pOverview_alias_domain_title'] = ':: Domain Aliases'; # XXX
$PALANG['pOverview_alias_title'] = ':: Alias'; # XXX
$PALANG['pOverview_mailbox_title'] = ':: E-posta Kutuları';
$PALANG['pOverview_mailbox_title'] = ':: Mailboxes'; # XXX
$PALANG['go'] = 'Git';
$PALANG['pOverview_welcome'] = 'Genel Bilgiler: ';
$PALANG['pOverview_alias_domain_aliases'] = 'Alias Domainleri';
$PALANG['pOverview_alias_domain_aliases'] = 'Alias Domains'; # XXX
$PALANG['pOverview_alias_address'] = 'Kimden';
$PALANG['active'] = 'Aktif';
$PALANG['and_x_more'] = '[ve %s daha fazla...]';
$PALANG['pOverview_mailbox_username'] = 'E-posta';
$PALANG['name'] = 'İsim';
$PALANG['pOverview_mailbox_quota'] = 'Kota (MB)';
$PALANG['pOverview_vacation_edit'] = 'TATİL MODU AÇIK';
$PALANG['pOverview_vacation_option'] = 'Tatil Modu Ayarla';
$PALANG['no_domains_for_this_admin'] = 'Herhangi bir domain için yetkiniz yok.';
$PALANG['no_domains_exist'] = 'Sanal liste kullanabilmeniz için en az bir domain oluşturmalısınız.'; # "virtual list" should match $PALANG['pAdminMenu_list_virtual']
$PALANG['and_x_more'] = '[and %s more...]'; # XXX
$PALANG['pOverview_mailbox_username'] = 'Eposta';
$PALANG['name'] = 'Ýsim';
$PALANG['pOverview_mailbox_quota'] = 'kota (MB)';
$PALANG['pOverview_vacation_edit'] = 'VACATION IS ON'; # XXX
$PALANG['pOverview_vacation_option'] = 'Set Vacation'; # XXX
$PALANG['no_domains_for_this_admin'] = 'You don\'t have permissions for any domains.'; # XXX
$PALANG['no_domains_exist'] = 'You have to create at least one domain before you can use virtual list.'; # "virtual list" should match $PALANG['pAdminMenu_list_virtual'] # XXX
$PALANG['domain'] = 'Domain';
$PALANG['pOverview_get_alias_domains'] = 'Domain Aliasları';
$PALANG['mailboxes'] = 'E-Posta Kutuları'; # XXX check / compare with pAdminCreate_domain_mailboxes - should be "Mailboxes"
$PALANG['pOverview_get_quota'] = 'E-Posta Kutusu Kotası (MB)';
$PALANG['pOverview_get_alias_domains'] = 'Domain Aliases'; # XXX
$PALANG['mailboxes'] = 'Postakutularý'; # XXX check / compare with pAdminCreate_domain_mailboxes - should be "Mailboxes"
$PALANG['pOverview_get_quota'] = 'Posta kutusu Kotasý (MB)';
$PALANG['pDelete_delete_error'] = 'Kayıt silinemiyor ';
$PALANG['pDelete_delete_success'] = '%s silindi.';
$PALANG['pDelete_domain_error'] = 'Bu domain size ait değil ';
$PALANG['pDelete_alias_error'] = 'Alias kaydı silinemedi ';
$PALANG['pCreate_alias_domain_welcome'] = 'Bir domaininizin, bir diğerine yansıyan adresleri.';
$PALANG['pCreate_alias_domain_alias'] = 'Domain Aliasları';
$PALANG['pCreate_alias_domain_alias_text'] = 'Gelen e-postaların domain adresi.';
$PALANG['pCreate_alias_domain_target'] = 'Hedef Domain';
$PALANG['pCreate_alias_domain_target_text'] = 'E-postaların gideceği domain adresi.';
$PALANG['pCreate_alias_domain_error1'] = 'Seçtiğiniz konfigürasyonu oluşturma yetkiniz yok.';
$PALANG['pCreate_alias_domain_error2'] = 'Seçtiğiniz konfigürasyon geçersiz, lütfen bir başka seçim yapınız!';
$PALANG['alias_domain_already_exists'] = 'Bu domain, zaten bir alias domain!';
$PALANG['alias_domain_does_not_exist'] = 'Bu domain bir alias domain değil!';
$PALANG['alias_domain_create_failed'] = 'Belirtilen alias domain %s oluşturulamadı!';
$PALANG['alias_domain_change_failed'] = 'Alias domain %s değişiklikleri yapılamadı!';
$PALANG['pCreate_alias_domain_error4'] = 'Tüm domainler zaten aliaslı şekilde.';
$PALANG['pCreate_alias_domain_success'] = 'Alias domain %s oluşturuldu.';
$PALANG['alias_domain_changed'] = 'Alias domain %s değiştirildi.';
$PALANG['alias_domain_to_itsself'] = 'Bir domain, kendi alias domaini olamaz!';
$PALANG['delete_domain_aliasdomain_target'] = 'Domaininiz %s bir veya birden fazla alias domaini olarak kayıtlı, ve silinemez. (Öncelikle alias domainleri siliniz.)';
$PALANG['pDelete_delete_error'] = 'Kayýt silinemiyor ';
$PALANG['pDelete_delete_success'] = '%s deleted.'; # XXX
$PALANG['pDelete_domain_error'] = 'Bu domain size ait deðil ';
$PALANG['pDelete_alias_error'] = 'Unable to delete alias '; # XXX
$PALANG['pCreate_alias_domain_welcome'] = 'Mirror addresses of one of your domains to another.'; # XXX
$PALANG['pCreate_alias_domain_alias'] = 'Alias Domain'; # XXX
$PALANG['pCreate_alias_domain_alias_text'] = 'The domain that mails come in for.'; # XXX
$PALANG['pCreate_alias_domain_target'] = 'Target Domain'; # XXX
$PALANG['pCreate_alias_domain_target_text'] = 'The domain where mails should go to.'; # XXX
$PALANG['pCreate_alias_domain_error1'] = 'You are not allowed to create the chosen configuration.'; # XXX
$PALANG['pCreate_alias_domain_error2'] = 'The chosen configuration is invalid, please choose a different one!'; # XXX
$PALANG['alias_domain_already_exists'] = 'This domain is already an alias domain!'; # XXX
$PALANG['alias_domain_does_not_exist'] = 'This domain isn\'t an alias domain!'; # XXX
$PALANG['alias_domain_create_failed'] = 'Creating the alias domain %s failed!'; # XXX
$PALANG['alias_domain_change_failed'] = 'Changing the alias domain %s failed!'; # XXX
$PALANG['pCreate_alias_domain_error4'] = 'All domains are already aliased.'; # XXX
$PALANG['pCreate_alias_domain_success'] = 'The alias domain %s has been created.'; # XXX
$PALANG['alias_domain_changed'] = 'The alias domain %s has been changed.'; # XXX
$PALANG['alias_domain_to_itsself'] = 'A domain can\'t be an alias domain to itsself!'; # XXX
$PALANG['delete_domain_aliasdomain_target'] = 'The domain %s is the target for one or more alias domains and can\'t be deleted! (Delete the alias domains first.)'; # XXX
$PALANG['pCreate_alias_address_text_error1'] = 'ALIAS uygun değil!';
$PALANG['alias_does_not_exist'] = 'Bu alias mevcut değil!';
$PALANG['email_address_already_exists'] = 'Bu e-posta zaten kullanılıyor, lütfen başka bir tane seçin!'; # XXX check text - should be 'This email address already exists, please choose a different one\!'
$PALANG['pCreate_alias_address_text_error3'] = 'Alias limitine ulaştınız!';
$PALANG['pCreate_alias_goto_text'] = 'E-postanın gitmesi gereken yer.';
$PALANG['pCreate_alias_goto_text_error'] = 'Kime alanı uygun değil!';
$PALANG['pCreate_alias_result_error'] = 'Belirtilen alias oluşturulamadı! (%s)'; # XXX Text changed to: Creating the alias %s failed!
$PALANG['pCreate_alias_result_success'] = '%s aliasınız oluşturuldu!'; # XXX text change: 'The alias %s has been created!'
$PALANG['alias_updated'] = '%s aliasınız güncellendi!';
$PALANG['pCreate_alias_catchall_text'] = 'Tümünü-yakala oluşturmak için alias olarak "*" kullanın. Domain yönlendirme domaini için kime kısmında "*@domain.tld" kullanın.'; # XXX check/beautify - was split in two lines before
$PALANG['mailbox_alias_cant_be_deleted'] = 'Bu alias, sistemde kayıtlı bir e-posta hesabına ait ve silinemez!';
$PALANG['protected_alias_cant_be_deleted'] = '%s isimli alias korumalı olarak ayarlı ve ancak bir süper yönetici tarafından silinebilir';
$PALANG['pCreate_alias_address_text_error1'] = 'ALIAS uygun deðil!';
$PALANG['alias_does_not_exist'] = 'This alias does not exist!'; # XXX
$PALANG['email_address_already_exists'] = 'Bu e-posta zaten kullanýlýyor, lütfen baþka bir tane seçin!'; # XXX check text - should be 'This email address already exists, please choose a different one\!'
$PALANG['pCreate_alias_address_text_error3'] = 'Alias limitine ulaþtýnýz!';
$PALANG['pCreate_alias_goto_text'] = 'E-postanýn gitmesi gereken yer.';
$PALANG['pCreate_alias_goto_text_error'] = 'Kime alaný uygun deðil!';
$PALANG['pCreate_alias_result_error'] = 'Alias\'ý alias tabþlosuna eklenemedi! (%s)'; # XXX Text changed to: Creating the alias %s failed!
$PALANG['pCreate_alias_result_success'] = 'Alias tabloya eklendi!'; # XXX text change: 'The alias %s has been created!'
$PALANG['alias_updated'] = 'The alias %s has been updated!'; # XXX
$PALANG['pCreate_alias_catchall_text'] = 'Hepsini-yakala yaratmak için alias olarak "*" kullanýn. Domain yönlendirme domaini için kime kýsmýnda "*@domain.tld" kullanýn.'; # XXX check/beautify - was split in two lines before
$PALANG['mailbox_alias_cant_be_deleted'] = 'This alias belongs to a mailbox and can\'t be deleted!'; # XXX
$PALANG['protected_alias_cant_be_deleted'] = 'The alias %s is protected and can only be deleted by a superadmin'; # XXX
$PALANG['pEdit_alias_welcome'] = 'Yönlendirme ayarlarını düzenleyin. '; # XXX Text change to: 'Edit forwarding settings'
$PALANG['pEdit_alias_help'] = 'Her bir satıra bir giriş şeklinde, çoklu hedefler kabul edilir.'; # XXX # XXX Text change to: 'Accepts multiple targets, one entry per line.'
$PALANG['pEdit_alias_welcome'] = 'domaniniz için bir domain\'i düzenleyin. '; # XXX Text change to: 'Edit forwarding settings'
$PALANG['pEdit_alias_help'] = 'Satýr baþýna bir giriþ.'; # XXX # XXX Text change to: 'Accepts multiple targets, one entry per line.'
$PALANG['alias'] = 'Alias';
$PALANG['to'] = 'Kime'; # XXX check text - should be 'To'
$PALANG['pEdit_alias_goto_text_error1'] = 'Kime kısmına hiçbir şey girmediniz.';
$PALANG['pEdit_alias_goto_text_error2'] = 'Girdiğiniz e-posta uygun değil: ';
$PALANG['pEdit_alias_domain_result_error'] = 'Alias domain düzenlenemedi!';
$PALANG['pEdit_alias_forward_and_store'] = 'Yerel bir e-posta hesabına ulaştır.';
$PALANG['pEdit_alias_forward_only'] = 'Sadece belirtilen e-posta adreslerine yönlendirin.';
$PALANG['pEdit_alias_goto_text_error1'] = 'Kime kýsmýna hiçbirþey girmediniz.';
$PALANG['pEdit_alias_goto_text_error2'] = 'Girdiðiniz e-posta uygun deðil: ';
$PALANG['pEdit_alias_domain_result_error'] = 'Unable to modify the alias domain!'; # XXX
$PALANG['pEdit_alias_forward_and_store'] = 'Deliver to the local mailbox.'; # XXX
$PALANG['pEdit_alias_forward_only'] = 'Forward to given email addresses only.'; # XXX
$PALANG['pEdit_alias_result_error'] = 'Alias düzenlenemiyor! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = 'Domaininiz için yeni bir lokal e-posta yaratın.';
$PALANG['pCreate_mailbox_local_part_error'] = '@ işaretinden önce değer belirtilmeli.';
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-posta uygun değil!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'E-posta kutusu yaratma limitinize eriştiniz!';
$PALANG['pCreate_mailbox_password_text'] = 'POP3/IMAP için şifre';
$PALANG['pCreate_mailbox_welcome'] = 'Domaininiz için yeni bir lokal e-posta yaratýn.';
$PALANG['pCreate_mailbox_username_text_error1'] = 'E-POSTA uygun deðil!';
$PALANG['pCreate_mailbox_username_text_error3'] = 'Posta kutusu yaratma limitinize eriþtiniz!';
$PALANG['pCreate_mailbox_password_text'] = 'POP3/IMAP için þifre';
$PALANG['pCreate_mailbox_name_text'] = 'Tam isim';
$PALANG['pCreate_mailbox_phone'] = 'Cep telefonu';
$PALANG['pCreate_mailbox_phone_desc'] = "Şifrenizi unuttuğunuz durumlarda SMS gönderilmesi için";
$PALANG['pCreate_mailbox_email'] = 'Diğer e-posta';
$PALANG['pCreate_mailbox_email_desc'] = "Şifrenizi unuttuğunuzda kullanılması için";
$PALANG['pCreate_mailbox_mail'] = 'Hoş Geldin e-posta iletisi gönder'; # XXX Text change to 'Send Welcome mail'
$PALANG['pCreate_mailbox_result_error'] = 'E-posta hesabı oluşturulamadı: %s'; # XXX Text changed to: Creating the mailbox %s failed!
$PALANG['pCreate_mailbox_result_success'] = 'E-posta hesabı, e-posta tablolarına eklendi! (%s)'; # XXX Text changed to: The mailbox %s has been added to the mailbox table!
$PALANG['pCreate_mailbox_result_succes_nosubfolders'] = 'E-posta hesabı %s e-posta tablolar listesine kaydedildi, fakat hiçbir (veya bir takım) ön tanımlı alt-klasörler oluşturulamadı.';
$PALANG['mailbox_updated'] = "E-posta hesabı %s güncelleştirildi.";
$PALANG['mailbox_update_failed'] = "E-posta hesabının güncelleştirilmesi başarısız: %s";
$PALANG['pCreate_mailbox_phone'] = 'Mobile phone'; # XXX
$PALANG['pCreate_mailbox_phone_desc'] = "Used to send a SMS if the password is forgotten"; # XXX
$PALANG['pCreate_mailbox_email'] = 'Other e-mail'; # XXX
$PALANG['pCreate_mailbox_email_desc'] = "Used if the password is forgotten"; # XXX
$PALANG['pCreate_mailbox_mail'] = 'Posta kutusu yarat'; # XXX Text change to 'Send Welcome mail'
$PALANG['pCreate_mailbox_result_error'] = 'Posta kutusu posta kutusu tablosuna eklenemiyor! (%s)'; # XXX Text changed to: Creating the mailbox %s failed!
$PALANG['pCreate_mailbox_result_success'] = 'Posta kutusu tabloya eklendi! (%s)'; # XXX Text changed to: The mailbox %s has been added to the mailbox table!
$PALANG['pCreate_mailbox_result_succes_nosubfolders'] = 'The mailbox %s has been added to the mailbox table, but none (or only some) of the predefined sub-folders could be created.'; # XXX
$PALANG['mailbox_updated'] = "The mailbox %s has been updated."; # XXX
$PALANG['mailbox_update_failed'] = "Updating the mailbox %s failed!"; # XXX
$PALANG['pEdit_mailbox_welcome'] = 'Domaininize ait bir e-posta kutusunu düzenleyin.';
$PALANG['pEdit_mailbox_username'] = 'Kullanıcı adı'; # XXX check / compare with pCreate_mailbox_username - should be "Username"
$PALANG['pEdit_mailbox_password_text_error'] = 'Verdiğiniz şifreler birbirini tutmuyor!';
$PALANG['pEdit_mailbox_quota'] = 'Kota';
$PALANG['pEdit_mailbox_welcome'] = 'Domaninizdeki bir posta kutusunu düzenleyin.';
$PALANG['pEdit_mailbox_username'] = 'kullanýcý adý'; # XXX check / compare with pCreate_mailbox_username - should be "Username"
$PALANG['pEdit_mailbox_password_text_error'] = 'Verdiðiniz þifreler birbirini tutmuyor!';
$PALANG['pEdit_mailbox_quota'] = 'kota';
$PALANG['pEdit_mailbox_quota_text'] = 'MB';
$PALANG['mb_max'] = 'MB (maks: %s)';
$PALANG['pEdit_mailbox_quota_text_error'] = 'Verdiğiniz kota çok yüksek!';
$PALANG['pEdit_mailbox_domain_error'] = 'Bu domain dizin değil: ';
$PALANG['pEdit_mailbox_result_error'] = 'Şifre değiştirilemedi!';
$PALANG['mb_max'] = 'MB (max: %s)'; # XXX
$PALANG['pEdit_mailbox_quota_text_error'] = 'Verdiðiniz kota çok yüksek!';
$PALANG['pEdit_mailbox_domain_error'] = 'Bu domain dizin deðil: ';
$PALANG['pEdit_mailbox_result_error'] = 'Þifre deðiþtirilemedi!';
$PALANG['pPassword_welcome'] = 'Giriş şifrenizi değiştirin.';
$PALANG['pPassword_admin'] = 'Giriş';
$PALANG['pPassword_password_current'] = 'Mevcut şifre';
$PALANG['pPassword_password_current_text_error'] = 'Şu anki şifrenizi girmediniz!';
$PALANG['pPassword_password'] = 'Yeni şifre';
$PALANG['pPassword_password2'] = 'Yeni şifre (tekrar)';
$PALANG['pPassword_password_text_error'] = 'Girdiğiniz şifreler birbirini tutmuyor! Veya boş!'; # XXX check/beautify - was split in two lines before
$PALANG['change_password'] = 'Şifreyi değiştir'; # XXX check text - should be 'Change Password'
$PALANG['pPassword_result_error'] = 'Şifreniz değiştirilemedi! (%s)'; # XXX Text changed to: Changing the password for %s failed!
$PALANG['pPassword_result_success'] = 'Şifreniz değiştirildi! (%s)'; # XXX Text changed to: The password for %s has been changed.
$PALANG['pPassword_recovery_title'] = 'Şifrenizi sıfırlamak için yönergeleri izleyin.';
$PALANG['pPassword_recovery_button'] = 'Bana kodu gönder';
$PALANG['pPassword_recovery_email_body'] = "Merhaba,\n\nE-posta hesabınızın şifresini değiştirmek için şu linki kullanın: \n%s\n\nSaygılarımızla,\n\n" . $CONF['admin_name'];
$PALANG['pPassword_recovery_sms_body'] = "Merhaba,\nŞifrenizi değiştirebilmeniz için gerekli kod: %s\n" . $CONF['admin_name'];
$PALANG['pPassword_recovery_processed'] = "Talebiniz gerçekleştirildi. Şayet geçerli bir kullanıcı adı girdiyseniz, şifre kodunuzu e-posta veya SMS ile alacaksınız.";
$PALANG['pPassword_password_code'] = 'Kod tarafınıza e-posta veya SMS yoluyla gönderildi';
$PALANG['pPassword_code_text_error'] = 'Geçersiz kod';
$PALANG['pEdit_vacation_set'] = 'Meşgul mesajı oluştur / değiştir';
$PALANG['pEdit_vacation_remove'] = 'Meşgul mesajını kaldır';
$PALANG['pVacation_result_error'] = 'Otomatik yanıt ayarları düzenlenemedi: %s';
$PALANG['pVacation_result_removed'] = 'Otomatik yanıt sistemi kapatılmış: %s';
$PALANG['pVacation_result_added'] = 'Otomatik yanıt sistemi aktifleştirildi: %s';
$PALANG['pVacation_reply_type'] = 'Yanıt biçimi';
$PALANG['pVacation_reply_delay_time'] = 'Zaman aralığı';
$PALANG['pVacation_reply_delay_time_text'] = 'Saniye bazında zaman';
$PALANG['pVacation_until_before_today'] = '[Aktiflik Süresi] tarihi, bugünden daha erken bir güne kayıtlı';
$PALANG['pVacation_until_before_from'] = '[Aktif Olma Süresi] tarihi, [İtibariyle Aktif] tarihinden öncesi bir tarihe kayıtlı';
$PALANG['reply_once'] = 'Bir kez yanıtla';
$PALANG['reply_every_mail'] = 'Her e-posta iletisinde yanıtla';
$PALANG['reply_once_per_day'] = 'Günde bir kez yanıtla';
$PALANG['reply_once_per_week'] = 'Haftada bir kez yanıtla';
$PALANG['pPassword_welcome'] = 'Giriþ þifrenizi deðiþtirin.';
$PALANG['pPassword_admin'] = 'Giriþ';
$PALANG['pPassword_password_current'] = 'þuanki þifre';
$PALANG['pPassword_password_current_text_error'] = 'Þuanki þifrenizi vermediniz!';
$PALANG['pPassword_password'] = 'Yeni Þifre';
$PALANG['pPassword_password2'] = 'Yeni þifre (tekrar)';
$PALANG['pPassword_password_text_error'] = 'Verdiðiniz þifreler birbirini tutmuyor! Ya da boþ!'; # XXX check/beautify - was split in two lines before
$PALANG['change_password'] = 'Þifreyi deðiþtir'; # XXX check text - should be 'Change Password'
$PALANG['pPassword_result_error'] = 'Þifreniz deðiþtirilemedi! (%s)'; # XXX Text changed to: Changing the password for %s failed!
$PALANG['pPassword_result_success'] = 'þifreniz deðiþtirildi! (%s)'; # XXX Text changed to: The password for %s has been changed.
$PALANG['pPassword_recovery_title'] = 'Follow the instructions to reset your password.'; # XXX
$PALANG['pPassword_recovery_button'] = 'Send me the code'; # XXX
$PALANG['pPassword_recovery_email_body'] = "Hello,\n\nUse the following link to change your email password :\n%s\n\nRegards,\n\n" . $CONF['admin_name']; # XXX
$PALANG['pPassword_recovery_sms_body'] = "Hello,\nThe code to change your password is: %s\n" . $CONF['admin_name']; # XXX
$PALANG['pPassword_recovery_processed'] = "We processed your request. If you entered a valid username, you'll receive an email/SMS with a password code."; # XXX
$PALANG['pPassword_password_code'] = 'Code sent by email/SMS'; # XXX
$PALANG['pPassword_code_text_error'] = 'Invalid code'; # XXX
$PALANG['pEdit_vacation_set'] = 'Change / Set away message'; # XXX
$PALANG['pEdit_vacation_remove'] = 'Remove away message'; # XXX
$PALANG['pVacation_result_error'] = 'Updating the auto response settings for %s failed'; # XXX
$PALANG['pVacation_result_removed'] = 'Auto response for %s has been disabled!'; # XXX
$PALANG['pVacation_result_added'] = 'Auto response for %s has been enabled!'; # XXX
$PALANG['pVacation_reply_type'] = 'Choice of reply'; # XXX
$PALANG['pVacation_reply_delay_time'] = 'Interval time'; # XXX
$PALANG['pVacation_reply_delay_time_text'] = 'Time in seconds'; # XXX
$PALANG['pVacation_until_before_today'] = 'The Date of [Active until] is set before Today'; # XXX
$PALANG['pVacation_until_before_from'] = 'The Date of [Active until] is set before [Active from]'; # XXX
$PALANG['reply_once'] = 'Reply once'; # XXX
$PALANG['reply_every_mail'] = 'Reply on every mail'; # XXX
$PALANG['reply_once_per_day'] = 'Reply once a day'; # XXX
$PALANG['reply_once_per_week'] = 'Reply once per week'; # XXX
$PALANG['pViewlog_welcome'] = 'Son %s hareketi:';
$PALANG['pViewlog_timestamp'] = 'Timestamp'; # XXX
$PALANG['pViewlog_action'] = 'Hareket';
$PALANG['pViewlog_welcome'] = 'Son %s hareket:';
$PALANG['pViewlog_timestamp'] = 'Timestamp';
$PALANG['pViewlog_action'] = 'Aksiyon';
$PALANG['pViewlog_data'] = 'Veri';
$PALANG['pViewlog_action_create_domain'] = 'domain oluştur';
$PALANG['pViewlog_action_delete_domain'] = 'domain sil';
$PALANG['pViewlog_action_edit_domain'] = 'domain düzenle';
$PALANG['pViewlog_action_create_mailbox'] = 'e-posta kutusu oluştur';
$PALANG['pViewlog_action_delete_mailbox'] = 'e-posta kutusu sil';
$PALANG['pViewlog_action_edit_mailbox'] = 'e-posta kutusu düzenle';
$PALANG['pViewlog_action_edit_mailbox_state'] = 'e-posta kutusunu aktifleştir';
$PALANG['pViewlog_action_create_alias'] = 'alias oluştur';
$PALANG['pViewlog_action_create_alias_domain'] = 'domain aliası oluştur';
$PALANG['pViewlog_action_edit_alias_domain'] = 'domain aliası düzenle';
$PALANG['pViewlog_action_delete_alias'] = 'alias sil';
$PALANG['pViewlog_action_delete_alias_domain'] = 'domain aliası sil';
$PALANG['pViewlog_action_edit_alias'] = 'alias düzenle';
$PALANG['pViewlog_action_edit_alias_state'] = 'aliası aktifleştir';
$PALANG['pViewlog_action_edit_alias_domain_state'] = 'domain aliası aktifleştir';
$PALANG['pViewlog_action_edit_password'] = 'şifreyi değiştir';
$PALANG['pViewlog_action_create_admin'] = 'yönetici oluştur';
$PALANG['pViewlog_action_edit_admin'] = 'yönetici düzenle';
$PALANG['pViewlog_action_delete_admin'] = 'yönetici sil';
$PALANG['pViewlog_action_edit_vacation'] = 'tatil düzenle';
$PALANG['pViewlog_action_create_fetchmail'] = 'tümünü-yakala oluştur';
$PALANG['pViewlog_action_edit_fetchmail'] = 'tümünü-yakala iş düzenle';
$PALANG['pViewlog_action_delete_fetchmail'] = 'tümünü-yakala sil';
$PALANG['pViewlog_action_create_domain'] = 'create domain'; # XXX
$PALANG['pViewlog_action_delete_domain'] = 'delete domain'; # XXX
$PALANG['pViewlog_action_edit_domain'] = 'edit domain'; # XXX
$PALANG['pViewlog_action_create_mailbox'] = 'create mailbox'; # XXX
$PALANG['pViewlog_action_delete_mailbox'] = 'delete mailbox'; # XXX
$PALANG['pViewlog_action_edit_mailbox'] = 'edit mailbox'; # XXX
$PALANG['pViewlog_action_edit_mailbox_state'] = 'edit mailbox active'; # XXX
$PALANG['pViewlog_action_create_alias'] = 'create alias'; # XXX
$PALANG['pViewlog_action_create_alias_domain'] = 'create alias domain'; # XXX
$PALANG['pViewlog_action_edit_alias_domain'] = 'edit alias domain'; # XXX
$PALANG['pViewlog_action_delete_alias'] = 'delete alias'; # XXX
$PALANG['pViewlog_action_delete_alias_domain'] = 'delete alias domain'; # XXX
$PALANG['pViewlog_action_edit_alias'] = 'edit alias'; # XXX
$PALANG['pViewlog_action_edit_alias_state'] = 'edit alias active'; # XXX
$PALANG['pViewlog_action_edit_alias_domain_state'] = 'edit alias domain active'; # XXX
$PALANG['pViewlog_action_edit_password'] = 'change password'; # XXX
$PALANG['pViewlog_action_create_admin'] = 'create admin'; # XXX
$PALANG['pViewlog_action_edit_admin'] = 'edit admin'; # XXX
$PALANG['pViewlog_action_delete_admin'] = 'delete admin'; # XXX
$PALANG['pViewlog_action_edit_vacation'] = 'edit vacation'; # XXX
$PALANG['pViewlog_action_create_fetchmail'] = 'create fetchmail job'; # XXX
$PALANG['pViewlog_action_edit_fetchmail'] = 'edit fetchmail job'; # XXX
$PALANG['pViewlog_action_delete_fetchmail'] = 'delete fetchmail job'; # XXX
$PALANG['pViewlog_result_error'] = 'Loglar bulunamıyor!';
$PALANG['pViewlog_result_error'] = 'Loglar bulunamýyor!';
$PALANG['pSendmail_welcome'] = 'E-posta gönder.';
$PALANG['pSendmail_welcome'] = 'Eposta gönder.';
$PALANG['from'] = 'kimden';
$PALANG['pSendmail_to'] = 'Kime';
$PALANG['pSendmail_to_text_error'] = 'Kime doğru bir e-posta değil!';
$PALANG['pSendmail_to_text_error'] = 'Kime doðru bir e-posta deðil!';
$PALANG['subject'] = 'konu';
$PALANG['pSendmail_subject_text'] = 'Hoş geldiniz';
$PALANG['pSendmail_subject_text'] = 'Hoþ geldiniz';
$PALANG['pSendmail_body'] = 'Metin';
$PALANG['pSendmail_button'] = 'Mesaj Gönder';
$PALANG['pSendmail_result_error'] = 'E-posta gönderilemedi: (%s)'; # XXX text change - new: Unable to send email to %s!
$PALANG['pSendmail_result_success'] = 'E-posta gönderildi: (%s)'; # XXX text change - new: Email sent to %s.
$PALANG['pSendmail_result_error'] = 'Posta kutusu yaratýlamadý! (%s)'; # XXX text change - new: Unable to send email to %s!
$PALANG['pSendmail_result_success'] = 'Posta kutusu yaratýldý! (%s)'; # XXX text change - new: Email sent to %s.
$PALANG['pAdminMenu_list_admin'] = 'Yönetici Listesi';
$PALANG['pAdminMenu_list_domain'] = 'Domain Listesi';
@ -248,159 +247,152 @@ $PALANG['pAdminMenu_create_domain'] = 'Yeni Domain';
$PALANG['pAdminList_admin_count'] = 'Domainler';
$PALANG['description'] = 'Açıklama';
$PALANG['description'] = 'Açýklama';
$PALANG['aliases'] = 'Aliaslar'; # XXX check text - should be 'Aliases'
$PALANG['pAdminList_domain_quota'] = 'Domain kotası (MB)';
$PALANG['pAdminList_domain_backupmx'] = 'Yedek Backup MX';
$PALANG['pAdminList_domain_quota'] = 'Domain quota (MB)'; # XXX
$PALANG['pAdminList_domain_backupmx'] = 'Backup MX';
$PALANG['last_modified'] = 'Son Düzenleme';
$PALANG['pAdminCreate_domain_welcome'] = 'Yeni domain ekle';
$PALANG['pAdminCreate_domain_domain_text_error'] = 'Bu domain halen mevcut!';
$PALANG['domain_does_not_exist'] = 'Bu domain mevcut değil!';
$PALANG['pAdminCreate_domain_domain_text_error2'] = 'Domain geçersiz!';
$PALANG['pAdminCreate_domain_defaultaliases'] = 'Öntanımlı e-posta aliası ekle';
$PALANG['pAdminCreate_domain_domain_text_error'] = 'Bu Domain halen bulunmakta!';
$PALANG['domain_does_not_exist'] = 'This domain does not exist!'; # XXX
$PALANG['pAdminCreate_domain_domain_text_error2'] = 'The domain is invalid!'; # XXX
$PALANG['pAdminCreate_domain_defaultaliases'] = 'Öntanýmlý posta aliasý ekle';
$PALANG['pAdminCreate_domain_button'] = 'Domain ekle';
$PALANG['pAdminCreate_domain_result_error'] = 'Domain eklenemedi! (%s)'; # XXX Text changed to: Adding the domain %s failed!
$PALANG['pAdminCreate_domain_result_success'] = 'Domain eklendi! (%s)'; # XXX Text changed to: The domain %s has been added.
$PALANG['domain_updated'] = 'Domain güncelleştirildi: %s';
$PALANG['pAdminDelete_admin_error'] = 'Yönetici silinemedi!';
$PALANG['domain_postdel_failed'] = 'Bu domaine ait silme-sonrası skript çalıştırılamadı, lütfen detaylar için kayıtları, logları inceleyin!';
$PALANG['domain_postcreate_failed'] = 'Bu domaine ait oluşturma-sonrası skript çalıştırılamadı, lütfen detaylar için kayıtları, logları inceleyin!';
$PALANG['mailbox_postdel_failed'] = 'E-posta hesabı silme-sonrası skript çalıştırılamadı, lütfen detaylar için kayıtları, logları inceleyin!';
$PALANG['mailbox_postedit_failed'] = 'E-posta düzenleme-sonrası skript çalıştırılamadı, lütfen detaylar için kayıtları, logları inceleyin!';
$PALANG['mailbox_postcreate_failed'] = 'E-posta oluşturma-sonrası skript çalıştırılamadı, lütfen detaylar için kayıtları, logları inceleyin!';
$PALANG['pAdminDelete_alias_domain_error'] = 'Domain aliasları silinemedi!';
$PALANG['domain_conflict_vacation_domain'] = 'Tatil domain adresini e-posta domaini olarak kullanamazsınız!';
$PALANG['domain_updated'] = 'The domain %s has been updated.'; # XXX
$PALANG['pAdminDelete_admin_error'] = 'Unable to delete admin!'; # XXX
$PALANG['domain_postdel_failed'] = 'The domain postdeletion script failed, check the error log for details!'; # XXX
$PALANG['domain_postcreate_failed'] = 'The domain postcreate script failed, check the error log for details!'; # XXX
$PALANG['mailbox_postdel_failed'] = 'The mailbox postdeletion script failed, check the error log for details!'; # XXX
$PALANG['mailbox_postedit_failed'] = 'The mailbox postedit script failed, check the error log for details!'; # XXX
$PALANG['mailbox_postcreate_failed'] = 'The mailbox postcreate script failed, check the error log for details!'; # XXX
$PALANG['pAdminDelete_alias_domain_error'] = 'Unable to remove domain alias!'; # XXX
$PALANG['domain_conflict_vacation_domain'] = 'You can\'t use the vacation domain as mail domain!'; # XXX
$PALANG['pAdminEdit_domain_welcome'] = 'Domain düzenle';
$PALANG['pAdminEdit_domain_aliases_text'] = '-1 = iptal | 0 = limitsiz'; # XXX check - "limisiz" or "limi_t_siz"?
$PALANG['pAdminEdit_domain_maxquota'] = 'Maks Kota';
$PALANG['pAdminEdit_domain_maxquota'] = 'Max Kota';
$PALANG['pAdminEdit_domain_maxquota_text'] = 'MB | -1 = iptal | 0 = limitsiz';
$PALANG['pAdminEdit_domain_quota'] = 'Domain Kota';
$PALANG['pAdminEdit_domain_quota'] = 'Domain Quota'; # XXX
$PALANG['transport'] = 'Transport'; # XXX
$PALANG['pAdminEdit_domain_transport_text'] = 'Transport tanımlama';
$PALANG['pAdminEdit_domain_backupmx'] = 'Mail sunucusu bir yedek backup MX kaydıdır';
$PALANG['pAdminEdit_domain_transport_text'] = 'Define transport'; # XXX
$PALANG['pAdminEdit_domain_backupmx'] = 'Mail server is backup MX'; # XXX
$PALANG['pAdminEdit_domain_result_error'] = 'Domain düzenlenemedi! (%s)'; # XXX Text changed to: Modifying the domain %s failed!
$PALANG['pAdminCreate_admin_welcome'] = 'Yöneticiye yeni bir domain ekle';
$PALANG['email_address'] = 'E-posta adresi';
$PALANG['pAdminCreate_admin_username_text_error1'] = 'Yönetici uygun bir e-posta adresi değil!';
$PALANG['admin_already_exists'] = 'Yönetici zaten mevcut veya uygun değil'; # XXX Text changed to: The admin already exists!
$PALANG['admin_does_not_exist'] = 'Yönetici mevcut değil!';
$PALANG['email_address'] = 'Eposta adresi';
$PALANG['pAdminCreate_admin_username_text_error1'] = 'Yönetici uygun bir eposta adresi deðil!';
$PALANG['admin_already_exists'] = 'Yönetici halen bulunmakta ya da uygun deðil'; # XXX Text changed to: The admin already exists!
$PALANG['admin_does_not_exist'] = 'The admin does not exist!'; # XXX
$PALANG['pAdminCreate_admin_button'] = 'Yönetici ekle';
$PALANG['pAdminCreate_admin_result_error'] = 'Yönetici eklenemiyor! (%s)'; # XXX Text changed to: Adding the admin %s failed!
$PALANG['pAdminCreate_admin_result_success'] = 'Yönetici eklendi! (%s)'; # XXX Text changed to: The admin %s has been added.
$PALANG['pAdminEdit_admin_welcome'] = 'Domain yöneticisi düzenle';
$PALANG['admin'] = 'Yönetici';
$PALANG['password_again'] = 'Şifre (tekrar)';
$PALANG['super_admin'] = 'Süper admin';
$PALANG['super_admin_desc'] = 'Süper admin yöneticiler, tüm domainler üzerinde yetkilidirler, tüm domainleri ve yönetici admin hesaplarını düzenleyebilirler.';
$PALANG['password_again'] = 'Þifre (tekrar)';
$PALANG['super_admin'] = 'Super admin'; # XXX
$PALANG['super_admin_desc'] = 'Super admins have access to all domains, can manage domains and admin accounts.'; # XXX
$PALANG['pAdminEdit_admin_result_error'] = 'Yönetici düzenlenemedi! (%s)'; # XXX Text changed to: Modifying the admin %s failed!
$PALANG['pAdminEdit_admin_result_success'] = 'Yönetici düzenlendi! (%s)'; # XXX Text changed to: The admin %s has been modified.
$PALANG['pUsersLogin_welcome'] = 'E-posta kutusu sahipleri, şifre değiştirmek için giriş yapın.';
$PALANG['pUsersLogin_username_incorrect'] = 'Kullanıcı adınız doğru değil. E-posta adresiniz ile giriş yaptığınızdan emin olunuz!';
$PALANG['pUsersLogin_password_incorrect'] = 'Şifreniz doğru değil!';
$PALANG['pUsersLogin_password_recover'] = 'Şifremi unuttum';
$PALANG['pUsersLogin_welcome'] = 'Posta kutusu sahipleri, þifre ddeðiþtirmek için giriþ yapýn.';
$PALANG['pUsersLogin_username_incorrect'] = 'Kullanýcý adýnýz doðru deðil. E-posta adresiniz ile giriþ yaptýðýnýzdan emin olunuz!';
$PALANG['pUsersLogin_password_incorrect'] = 'Þifreniz doðru deðil!';
$PALANG['pUsersLogin_password_recover'] = 'I forgot my password'; # XXX
$PALANG['pUsersMenu_vacation'] = 'Otomatik cevaplama';
$PALANG['pUsersMenu_edit_alias'] = 'Yönlendirme değiştir';
$PALANG['pUsersMenu_edit_alias'] = 'Yönlendirmen deðiþtir';
$PALANG['pUsersMain_vacation'] = 'Posta kutunuz için "ofis dışı" mesajı veya otomatik cevaplama ekleyin.';
$PALANG['pUsersMain_vacationSet'] = 'Otomatik cevaplama AKTİF durumda. \'Otomatik Cevaplama\' linkine tıklayarak düzenleyin veya kaldırın.';
$PALANG['pUsersMain_edit_alias'] = 'E-posta yönlendirmenizi değiştirin.';
$PALANG['pUsersMain_password'] = 'Şifrenizi değiştirin.';
$PALANG['pUsersMain_vacation'] = 'Posta kutunuz için "ofis dýþý" mesajý veya otomatik cevaplama ekleyin.';
$PALANG['pUsersMain_vacationSet'] = $PALANG['pUsersMenu_vacation'] . ' is ON, click \'' . $PALANG['pUsersMenu_vacation'] . '\' to ' . $PALANG['edit'] . '/remove'; # XXX
$PALANG['pUsersMain_edit_alias'] = 'Eposta yönlendirmenizi deðiþtirin.';
$PALANG['pUsersMain_password'] = 'þifrenizi deðiþtirin.';
$PALANG['pUsersVacation_welcome'] = 'Otomatik Cevaplama.';
$PALANG['pUsersVacation_welcome_text'] = 'Zaten bir otomatik cevaplamanız bulunmakta! (%s)'; # XXX Text changed to: 'Auto response for %s is active!'
$PALANG['pUsersVacation_subject_text'] = 'Ofis dışında';
$PALANG['pUsersVacation_welcome_text'] = 'Zaten bir otomatik cevaplamanýz bulunmakta! (%s)'; # XXX Text changed to: 'Auto response for %s is active!'
$PALANG['pUsersVacation_subject_text'] = 'Ofis dýþýnda';
$PALANG['message'] = 'Metin'; # XXX text changed to 'Message'
$PALANG['pUsersVacation_body_text'] = <<<EOM
<date> ile <date> tarihleri arası burada bulunmayacağım.
Acil durumlarda lütfen <contact person> adresli yetkiliye başvurunuz.
<date> tarihinden den <date> ine burada bulunmayacaðým.
Acil durumlarda lütfen <contact person> a baþvurunuz.
EOM;
$PALANG['pUsersVacation_activefrom'] = 'Aktif olma tarih başlangıç';
$PALANG['pUsersVacation_activeuntil'] = 'Aktif olma tarih bitiş';
$PALANG['pUsersVacation_activefrom'] = 'Active from'; # XXX
$PALANG['pUsersVacation_activeuntil'] = 'Active until'; # XXX
$PALANG['pEdit_dbLog_editactive'] = 'Aktiflik durumunu değiştir';
$PALANG['pEdit_dbLog_editactive'] = 'change active state'; # XXX
$PALANG['pSearch'] = 'ara';
$PALANG['pSearch_welcome'] = 'Aranan: ';
$PALANG['pReturn_to'] = 'Geri dön';
$PALANG['pBroadcast_title'] = 'Toplu sistem mesajı gönder';
$PALANG['pBroadcast_name'] = 'İsminiz';
$PALANG['pBroadcast_success'] = 'Toplu sistem mesajınız gönderildi.';
$PALANG['pAdminMenu_broadcast_message'] = 'Sistem mesajı';
$PALANG['pBroadcast_error_empty'] = 'İsim, Konu ve Mesaj gibi alanlar boş bırakılmamalı!';
$PALANG['broadcast_mailboxes_only'] = 'Sadece belirtilen e-posta hesaplarına gönder';
$PALANG['broadcast_to_domains'] = 'Domainlere gönder:';
$PALANG['pStatus_undeliverable'] = 'GÖNDERİLEMEMİŞ veya gönderilemeyen olabilir ';
$PALANG['pStatus_disabled'] = 'Hesap pasif ';
$PALANG['pStatus_expired'] = 'Şifrenin süresi doldu ';
$PALANG['pStatus_vacation'] = 'Tatil modu aktif ';
$PALANG['pStatus_custom'] = 'İletilen ';
$PALANG['pSearch'] = 'search'; # XXX
$PALANG['pSearch_welcome'] = 'Searching for: '; # XXX
$PALANG['pReturn_to'] = 'Return to'; # XXX
$PALANG['pBroadcast_title'] = 'Send broadcast message'; # XXX
$PALANG['pBroadcast_name'] = 'Your name'; # XXX
$PALANG['pBroadcast_success'] = 'Your broadcast message was sent.'; # XXX
$PALANG['pAdminMenu_broadcast_message'] = 'Broadcast message'; # XXX
$PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message shouldn\'t be empty!'; # XXX
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = 'maybe UNDELIVERABLE '; # XXX
$PALANG['pStatus_custom'] = 'Delivers to '; # XXX
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "Şifre çok kısa - en az %s karakter gerekli";
$PALANG['password_no_characters'] = "Şifreniz en az %s karakter içermeli (A-Z, a-z).";
$PALANG['password_no_digits'] = "Şifreniz en az %s rakam içermeli.";
$PALANG['pInvalidDomainRegex'] = "Geçersiz domain ismi: %s, kontrol edilemedi";
$PALANG['pInvalidDomainDNS'] = "Geçersiz domain: %s, ve/veya DNS tarafından çözümlenemedi";
$PALANG['pInvalidMailRegex'] = "Geçersiz e-posta adresi: %s, kontrol edilemedi";
$PALANG['pFetchmail_welcome'] = 'Adrese gelen mailleri yakala:';
$PALANG['pFetchmail_new_entry'] = 'Yeni girdi';
$PALANG['fetchmail_already_exists'] = 'Bu e-posta yakalama işi zaten mevcut!';
$PALANG['fetchmail_does_not_exist'] = 'Bu e-posta yakalama işi mevcut değil!';
$PALANG['pFetchmail_database_save_error'] = 'Bu girdi, veritabanına kaydedilemedi!';
$PALANG['pFetchmail_database_save_success'] = 'Girdiler veritabanına kaydedildi.';
$PALANG['pFetchmail_error_invalid_id'] = '%s isimli herhangi bir girdi bulunamadı!';
$PALANG['pFetchmail_invalid_mailbox'] = 'Geçersiz e-posta!';
$PALANG['pFetchmail_server_missing'] = 'Lütfen uzaktaki sunucunun adını giriniz!';
$PALANG['pFetchmail_user_missing'] = 'Lütfen uzaktaki sunucunun kullanıcı adını giriniz!';
$PALANG['pFetchmail_password_missing'] = 'Lütfen uzaktaki sunucunun şifresini giriniz!';
$PALANG['password_too_short'] = "Password is too short - requires %s characters"; # XXX
$PALANG['password_no_characters'] = "Your password must contain at least %s character(s)."; # XXX
$PALANG['password_no_digits'] = "Your password must contain at least %s digit(s)."; # XXX
$PALANG['pInvalidDomainRegex'] = "Invalid domain name %s, fails regexp check"; # XXX
$PALANG['pInvalidDomainDNS'] = "Invalid domain %s, and/or not discoverable in DNS"; # XXX
$PALANG['pInvalidMailRegex'] = "Invalid email address %s, fails regexp check"; # XXX
$PALANG['pFetchmail_welcome'] = 'Fetch mail for:'; # XXX
$PALANG['pFetchmail_new_entry'] = 'New entry'; # XXX
$PALANG['fetchmail_already_exists'] = 'This fetchmail job already exists!'; # XXX
$PALANG['fetchmail_does_not_exist'] = 'This fetchmail job does not exist!'; # XXX
$PALANG['pFetchmail_database_save_error'] = 'Could not save this entry in the database!'; # XXX
$PALANG['pFetchmail_database_save_success'] = 'Entry saved in database.'; # XXX
$PALANG['pFetchmail_error_invalid_id'] = 'No entry with ID %s found!'; # XXX
$PALANG['pFetchmail_invalid_mailbox'] = 'Invalid mailbox!'; # XXX
$PALANG['pFetchmail_server_missing'] = 'Please enter the remote server name!'; # XXX
$PALANG['pFetchmail_user_missing'] = 'Please enter the remote username!'; # XXX
$PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; # XXX
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'E-posta Kutusu';
$PALANG['pFetchmail_field_src_server'] = 'Sunucu';
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Giriş Biçimi';
$PALANG['pFetchmail_field_src_user'] = 'Kullanıcı';
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
$PALANG['pFetchmail_field_src_folder'] = 'Klasör';
$PALANG['pFetchmail_field_src_folder'] = 'Folder'; # XXX
$PALANG['pFetchmail_field_poll_time'] = 'Poll'; # XXX
$PALANG['pFetchmail_field_fetchall'] = 'Yakala ';
$PALANG['pFetchmail_field_keep'] = 'Tut';
$PALANG['pFetchmail_field_protocol'] = 'Protokol';
$PALANG['pFetchmail_field_usessl'] = 'SSL etkin';
$PALANG['pFetchmail_field_sslcertck'] = 'SSL sertifika kontrol';
$PALANG['pFetchmail_field_sslcertpath'] = 'SSL sertifikası yolu';
$PALANG['pFetchmail_field_fetchall'] = 'Fetch All'; # XXX
$PALANG['pFetchmail_field_keep'] = 'Keep'; # XXX
$PALANG['pFetchmail_field_protocol'] = 'Protocol'; # XXX
$PALANG['pFetchmail_field_usessl'] = 'SSL active'; # XXX
$PALANG['pFetchmail_field_sslcertck'] = 'SSL certificate check'; # XXX
$PALANG['pFetchmail_field_sslcertpath'] = 'SSL path to certificates'; # XXX
$PALANG['pFetchmail_field_sslfingerprint'] = 'SSL fingerprint (md5)'; # XXX
$PALANG['pFetchmail_field_extra_options'] = 'Ekstra Seçenekler';
$PALANG['pFetchmail_field_mda'] = 'PDA';
$PALANG['pFetchmail_field_date'] = 'Tarih';
$PALANG['pFetchmail_field_returned_text'] = 'Geri Dönen Metin';
$PALANG['pFetchmail_desc_id'] = 'Kayıt ID';
$PALANG['pFetchmail_desc_mailbox'] = 'Yerel e-posta kutusu';
$PALANG['pFetchmail_desc_src_server'] = 'Uzak Sunucu';
$PALANG['pFetchmail_desc_src_port'] = 'Uzak port numarası - şayet standart olmayan bir port kullanılıyorsa. (0: varsayılan standardı kullan)';
$PALANG['pFetchmail_desc_src_auth'] = 'Çoğunlukla \'password\''; # Translators: Please do NOT translate 'password' here
$PALANG['pFetchmail_desc_src_user'] = 'Uzak Kullanıcı';
$PALANG['pFetchmail_desc_src_password'] = 'Uzak Şifre';
$PALANG['pFetchmail_desc_src_folder'] = 'Uzak Klasör';
$PALANG['pFetchmail_desc_poll_time'] = 'Her .... dakikada bi poll';
$PALANG['pFetchmail_desc_fetchall'] = 'Hem eski (okunan) hem de yeni iletileri çek';
$PALANG['pFetchmail_desc_keep'] = 'Eski iletileri uzaktaki mail sunucusunda saklı tut';
$PALANG['pFetchmail_desc_protocol'] = 'Kullanılacak protokol';
$PALANG['pFetchmail_desc_usessl'] = 'SSL şifreleme';
$PALANG['pFetchmail_desc_extra_options'] = 'Ekstra ileti-yakalama Seçenekleri';
$PALANG['pFetchmail_desc_mda'] = 'Posta Dağıtım Aracısı';
$PALANG['pFetchmail_desc_date'] = 'Son poll/konfigürasyon değişikliği tarihi';
$PALANG['pFetchmail_desc_returned_text'] = 'Son poll işleminden gelen metin iletisi';
$PALANG['dateformat_pgsql'] = 'dd-mm-YYYY'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format
$PALANG['dateformat_mysql'] = '%d-%m-%Y'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format
$PALANG['password_expiration'] = 'Şifrenin geçerlilik süresi dolma';
$PALANG['password_expiration_desc'] = 'Şifrenin geçerlilik süresinin doluş tarihi';
$PALANG['pFetchmail_field_extra_options'] = 'Extra Options'; # XXX
$PALANG['pFetchmail_field_mda'] = 'MDA'; # XXX
$PALANG['pFetchmail_field_date'] = 'Date'; # XXX
$PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
$PALANG['pFetchmail_desc_src_folder'] = 'Remote Folder'; # XXX
$PALANG['pFetchmail_desc_poll_time'] = 'Poll every ... minutes'; # XXX
$PALANG['pFetchmail_desc_fetchall'] = 'Retrieve both old (seen) and new messages'; # XXX
$PALANG['pFetchmail_desc_keep'] = 'Keep retrieved messages on the remote mailserver'; # XXX
$PALANG['pFetchmail_desc_protocol'] = 'Protocol to use'; # XXX
$PALANG['pFetchmail_desc_usessl'] = 'SSL encryption'; # XXX
$PALANG['pFetchmail_desc_extra_options'] = 'Extra fetchmail Options'; # XXX
$PALANG['pFetchmail_desc_mda'] = 'Mail Delivery Agent'; # XXX
$PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuration change'; # XXX
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -140,7 +140,6 @@ $PALANG['pEdit_alias_forward_only'] = '只轉寄到以上電郵地址';
$PALANG['pEdit_alias_result_error'] = '不能修改該別名! (%s)'; # XXX Text changed to: Modifying the alias %s failed!
$PALANG['pCreate_mailbox_welcome'] = '在你的網域中新建一個本地郵箱.';
$PALANG['pCreate_mailbox_local_part_error'] = 'Should be the bit before the @ sign.'; # XXX
$PALANG['pCreate_mailbox_username_text_error1'] = '郵件非法!';
$PALANG['pCreate_mailbox_username_text_error3'] = '郵箱地址已經達到上限!';
$PALANG['pCreate_mailbox_password_text'] = 'POP3/IMAP 密碼';
@ -340,13 +339,10 @@ $PALANG['pBroadcast_error_empty'] = 'The fields Name, Subject and Message should
$PALANG['broadcast_mailboxes_only'] = 'Only send to mailboxes'; # XXX
$PALANG['broadcast_to_domains'] = 'Send to domains:'; # XXX
$PALANG['pStatus_undeliverable'] = '可能無法送遞 ';
$PALANG['pStatus_disabled'] = 'Account disabled '; # XXX
$PALANG['pStatus_expired'] = 'Password expired '; # XXX
$PALANG['pStatus_vacation'] = 'Vacation enabled '; # XXX
$PALANG['pStatus_custom'] = '送遞至 ';
$PALANG['pStatus_popimap'] = 'POP/IMAP '; # XXX
$PALANG['password_too_short'] = "密碼太短 - 需要 %s 個字附";
$PALANG['password_no_characters'] = "你的密碼最少要有 %s 字母。"; # XXX text changed to "Your password must contain at least %s letters (A-Z, a-z)."
$PALANG['password_no_characters'] = "你的密碼最少要有 %s 字母。";
$PALANG['password_no_digits'] = "你的密碼最少要有 %s 數字。";
$PALANG['pInvalidDomainRegex'] = "網域名 %s 不正確,未能通過 regexp 檢查";
$PALANG['pInvalidDomainDNS'] = "網域名 %s 不正確或在DNS找不到";
@ -365,7 +361,6 @@ $PALANG['pFetchmail_password_missing'] = 'Please enter the remote password!'; #
$PALANG['pFetchmail_field_id'] = 'ID'; # XXX
$PALANG['pFetchmail_field_mailbox'] = 'Mailbox'; # XXX
$PALANG['pFetchmail_field_src_server'] = 'Server'; # XXX
$PALANG['pFetchmail_field_src_port'] = 'Port'; # XXX
$PALANG['pFetchmail_field_src_auth'] = 'Auth Type'; # XXX
$PALANG['pFetchmail_field_src_user'] = 'User'; # XXX
$PALANG['pFetchmail_field_src_password'] = $PALANG['password']; # needed until fetchmail is migrated into FetchmailHandler
@ -385,7 +380,6 @@ $PALANG['pFetchmail_field_returned_text'] = 'Returned Text'; # XXX
$PALANG['pFetchmail_desc_id'] = 'Record ID'; # XXX
$PALANG['pFetchmail_desc_mailbox'] = 'Local mailbox'; # XXX
$PALANG['pFetchmail_desc_src_server'] = 'Remote Server'; # XXX
$PALANG['pFetchmail_desc_src_port'] = 'Remote port number, if a non-standard remote port is needed. (0: use default)'; # XXX
$PALANG['pFetchmail_desc_src_auth'] = 'Mostly \'password\''; # Translators: Please do NOT translate 'password' here # XXX
$PALANG['pFetchmail_desc_src_user'] = 'Remote User'; # XXX
$PALANG['pFetchmail_desc_src_password'] = 'Remote Password'; # XXX
@ -401,8 +395,6 @@ $PALANG['pFetchmail_desc_date'] = 'Date of last polling/configuratio
$PALANG['pFetchmail_desc_returned_text'] = 'Text message from last polling'; # XXX
$PALANG['dateformat_pgsql'] = 'YYYY-mm-dd'; # translators: rearrange to your local date format, but make sure it's a valid PostgreSQL date format # XXX
$PALANG['dateformat_mysql'] = '%Y-%m-%d'; # translators: rearrange to your local date format, but make sure it's a valid MySQL date format # XXX
$PALANG['password_expiration'] = 'Pass expires'; # XXX
$PALANG['password_expiration_desc'] = 'Date when password will expire'; # XXX
$PALANG['please_keep_this_as_last_entry'] = ''; # needed for language-check.sh
/* vim: set expandtab ft=php softtabstop=3 tabstop=3 shiftwidth=3: */

@ -1,89 +0,0 @@
<?php
/**
* Turn on sanitisation of all data by default so it's not possible for XSS flaws to occur in PFA
*/
class PFASmarty {
/**
* @var Smarty
*/
protected $template;
/**
* @param string $template_theme
*/
public function __construct($template_theme = 'default') {
$this->template = new Smarty();
//$this->template->debugging = true;
if($template_theme == 'default') {
$this->template->setTemplateDir(dirname(__FILE__) . '/../templates');
}
else {
$this->template->setTemplateDir(dirname(__FILE__) . '/../templates/'. $template_theme);
}
// if it's not present or writeable, smarty should just not cache.
$templates_c = dirname(__FILE__) . '/../templates_c';
if (is_dir($templates_c) && is_writeable($templates_c)) {
$this->template->setCompileDir($templates_c);
} else {
# unfortunately there's no sane way to just disable compiling of templates
clearstatcache(); // just incase someone just fixed it; on their next refresh it should work.
error_log("ERROR: directory $templates_c doesn't exist or isn't writeable for the webserver");
die("ERROR: the templates_c directory doesn't exist or isn't writeable for the webserver");
}
$this->template->setConfigDir(dirname(__FILE__) . '/../configs');
}
/**
* @param string $key
* @param mixed $value
* @param bool $sanitise
*/
public function assign($key, $value, $sanitise = true) {
$this->template->assign("RAW_$key", $value);
if ($sanitise == false) {
return $this->template->assign($key, $value);
}
$clean = $this->sanitise($value);
/* we won't run the key through sanitise() here... some might argue we should */
return $this->template->assign($key, $clean);
}
/**
* @return void
* @param string $template
*/
public function display($template) {
header("Expires: Sun, 16 Mar 2003 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-Type: text/html; charset=UTF-8");
$this->template->display($template);
unset($_SESSION['flash']); # cleanup flash messages
}
/**
* Recursive cleaning of data, using htmlentities - this assumes we only ever output to HTML and we're outputting in UTF-8 charset
*
* @param mixed $data - array or primitive type; objects not supported.
* @return mixed $data
* */
public function sanitise($data) {
if (!is_array($data)) {
return htmlentities($data, ENT_QUOTES, 'UTF-8', false);
}
$clean = array();
foreach ($data as $key => $value) {
/* as this is a nested data structure it's more likely we'll output the key too (at least in my opinion, so we'll sanitise it too */
$clean[$this->sanitise($key)] = $this->sanitise($value);
}
return $clean;
}
}

@ -1,17 +0,0 @@
<?php
/**
* This file should only be loaded if you're :
* a. running PHP < 7.0, and
* b. have the php_crypt password hash configured, and
* c. have not loaded paragonie's random_compat library.
*
*/
if(function_exists('random_int')) {
return;
}
function random_int($a, $b) { // someone might not be using php_crypt or ask for password generation, in which case random_int() won't be called
die(__FILE__ . " Postfixadmin security: Please install https://github.com/paragonie/random_compat OR enable the 'Phar' extension.");
}

@ -1,43 +1,104 @@
<?php
if (!isset($CONF) || !isset($PALANG)) {
die("environment not setup correctly");
}
require_once(dirname(__FILE__) . '/smarty/libs/Autoloader.php');
Smarty_Autoloader::register();
require_once(dirname(__FILE__) . '/PFASmarty.php');
/**
* Turn on sanitisation of all data by default so it's not possible for XSS flaws to occur in PFA
*/
class PFASmarty {
protected $template = null;
public function __construct() {
$this->template = new Smarty();
Smarty_Autoloader::register();
//$this->template->debugging = true;
$this->template->setTemplateDir(dirname(__FILE__) . '/../templates');
// if it's not present or writeable, smarty should just not cache.
$templates_c = dirname(__FILE__) . '/../templates_c';
if (is_dir($templates_c) && is_writeable($templates_c)) {
$this->template->setCompileDir($templates_c);
} else {
# unfortunately there's no sane way to just disable compiling of templates
clearstatcache(); // just incase someone just fixed it; on their next refresh it should work.
error_log("ERROR: directory $templates_c doesn't exist or isn't writeable for the webserver");
die("ERROR: the templates_c directory doesn't exist or isn't writeable for the webserver");
}
if (isset($CONF['theme']) && is_dir(dirname(__FILE__) . "/../templates/" . $CONF['theme'])) {
$smarty = new PFASmarty($CONF['theme']);
} else {
$smarty = new PFASmarty();
$this->template->setConfigDir(dirname(__FILE__) . '/../configs');
}
public function assign($key, $value, $sanitise = true) {
$this->template->assign("RAW_$key", $value);
if ($sanitise == false) {
return $this->template->assign($key, $value);
}
$clean = $this->sanitise($value);
/* we won't run the key through sanitise() here... some might argue we should */
return $this->template->assign($key, $clean);
}
public function display($template) {
header("Expires: Sun, 16 Mar 2003 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-Type: text/html; charset=UTF-8");
$this->template->display($template);
unset($_SESSION['flash']); # cleanup flash messages
}
/**
* Recursive cleaning of data, using htmlentities - this assumes we only ever output to HTML and we're outputting in UTF-8 charset
*
* @param mixed $data - array or primitive type; objects not supported.
* @return mixed $data
* */
public function sanitise($data) {
if (!is_array($data)) {
return htmlentities($data, ENT_QUOTES, 'UTF-8', false);
}
if (is_array($data)) {
$clean = array();
foreach ($data as $key => $value) {
/* as this is a nested data structure it's more likely we'll output the key too (at least in my opinion, so we'll sanitise it too */
$clean[$this->sanitise($key)] = $this->sanitise($value);
}
return $clean;
}
}
}
$smarty = new PFASmarty();
if (!isset($rel_path)) {
$rel_path = '';
} # users/* sets this to '../'
$CONF['theme_css'] = $rel_path . htmlentities($CONF['theme_css']);
$CONF['theme_css'] = $rel_path . htmlentities($CONF['theme_css']);
if (!empty($CONF['theme_custom_css'])) {
$CONF['theme_custom_css'] = $rel_path . htmlentities($CONF['theme_custom_css']);
$CONF['theme_custom_css'] = $rel_path . htmlentities($CONF['theme_custom_css']);
}
$CONF['theme_favicon'] = $rel_path . htmlentities($CONF['theme_favicon']);
$CONF['theme_logo'] = $rel_path . htmlentities($CONF['theme_logo']);
$smarty->assign('CONF', $CONF);
$smarty->assign('PALANG', $PALANG);
$smarty->assign('url_domain', '');
//*** footer.tpl
if (!isset($version)) {
$version = 'dev/unknown';
}
$smarty->assign('version', $version);
//*** menu.tpl
$smarty->assign('boolconf_alias_domain', Config::bool('alias_domain'));
$smarty->assign('authentication_has_role', array('global_admin' => authentication_has_role('global-admin'), 'admin' => authentication_has_role('admin'), 'user' => authentication_has_role('user')));
function eval_size($aSize) {
if ($aSize == 0) {
$ret_val = Config::Lang('pOverview_unlimited');
} elseif ($aSize < 0) {
$ret_val = Config::Lang('pOverview_disabled');
} else {
$ret_val = $aSize;
}
return $ret_val;
}
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */

@ -90,7 +90,7 @@ class Smarty_Autoloader
*/
public static function autoload($class)
{
if ($class[ 0 ] !== 'S' && strpos($class, 'Smarty') !== 0) {
if ($class[ 0 ] !== 'S' || strpos($class, 'Smarty') !== 0) {
return;
}
$_class = strtolower($class);

@ -27,7 +27,7 @@
* @author Uwe Tews <uwe dot tews at gmail dot com>
* @author Rodney Rehm
* @package Smarty
* @version 3.1.33
* @version 3.1.34-dev
*/
/**
* set SMARTY_DIR to absolute path to Smarty library files.
@ -112,7 +112,7 @@ class Smarty extends Smarty_Internal_TemplateBase
/**
* smarty version
*/
const SMARTY_VERSION = '3.1.33';
const SMARTY_VERSION = '3.1.34-dev-7';
/**
* define variable scopes
*/

@ -41,9 +41,9 @@ function smarty_modifier_date_format($string, $format = null, $default_date = ''
}
$is_loaded = true;
}
if ($string !== '' && $string !== '0000-00-00' && $string !== '0000-00-00 00:00:00') {
if (!empty($string) && $string !== '0000-00-00' && $string !== '0000-00-00 00:00:00') {
$timestamp = smarty_make_timestamp($string);
} elseif ($default_date !== '') {
} elseif (!empty($default_date)) {
$timestamp = smarty_make_timestamp($default_date);
} else {
return;

@ -83,7 +83,7 @@ class Smarty_Internal_Compile_Assign extends Smarty_Internal_CompileBase
if (isset($parameter[ 'smarty_internal_index' ])) {
$output =
"<?php \$_tmp_array = isset(\$_smarty_tpl->tpl_vars[{$_var}]) ? \$_smarty_tpl->tpl_vars[{$_var}]->value : array();\n";
$output .= "if (!is_array(\$_tmp_array) || \$_tmp_array instanceof ArrayAccess) {\n";
$output .= "if (!(is_array(\$_tmp_array) || \$_tmp_array instanceof ArrayAccess)) {\n";
$output .= "settype(\$_tmp_array, 'array');\n";
$output .= "}\n";
$output .= "\$_tmp_array{$parameter['smarty_internal_index']} = {$_attr['value']};\n";

@ -219,8 +219,9 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_Compile_Private_Fo
if (isset($itemAttr[ 'index' ])) {
$output .= "{$itemVar}->index = -1;\n";
}
$output .= "if (\$_from !== null) {\n";
$output .= "foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n";
$output .= "{$itemVar}->do_else = true;\n";
$output .= "if (\$_from !== null) foreach (\$_from as {$keyTerm}{$itemVar}->value) {\n";
$output .= "{$itemVar}->do_else = false;\n";
if (isset($attributes[ 'key' ]) && isset($itemAttr[ 'key' ])) {
$output .= "\$_smarty_tpl->tpl_vars['{$key}']->value = {$itemVar}->key;\n";
}
@ -296,7 +297,7 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase
if ($restore === 2) {
$output .= "{$itemVar} = {$local}saved;\n";
}
$output .= "}\n} else {\n?>";
$output .= "}\nif ({$itemVar}->do_else) {\n?>";
return $output;
}
}
@ -332,9 +333,6 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase
if ($restore === 2) {
$output .= "{$itemVar} = {$local}saved;\n";
}
if ($restore > 0) {
$output .= "}\n";
}
$output .= "}\n";
/* @var Smarty_Internal_Compile_Foreach $foreachCompiler */
$foreachCompiler = $compiler->getTagCompiler('foreach');

@ -151,6 +151,7 @@ class Smarty_Internal_Compile_Insert extends Smarty_Internal_CompileBase
$_output .= "echo {$_function}({$_params},\$_smarty_tpl);?>";
}
}
$compiler->template->compiled->has_nocache_code = true;
return $_output;
}
}

@ -47,7 +47,7 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
new Smarty_Internal_ParseTree_Tag(
$compiler->parser,
$compiler->processNocacheCode(
"<?php echo '{$output}';?>",
"<?php echo '{$output}';?>\n",
true
)
)
@ -77,7 +77,7 @@ class Smarty_Internal_Compile_Private_Php extends Smarty_Internal_CompileBase
new Smarty_Internal_ParseTree_Tag(
$compiler->parser,
$compiler->processNocacheCode(
"<?php echo '{$output}';?>",
"<?php echo '{$output}';?>\n",
true
)
)

@ -48,6 +48,8 @@ class Smarty_Internal_Method_RegisterPlugin
throw new SmartyException("Plugin tag '{$name}' already registered");
} elseif (!is_callable($callback)) {
throw new SmartyException("Plugin '{$name}' not callable");
} elseif ($cacheable && $cache_attr) {
throw new SmartyException("Cannot set caching attributes for plugin '{$name}' when it is cacheable.");
} else {
$smarty->registered_plugins[ $type ][ $name ] = array($callback, (bool)$cacheable, (array)$cache_attr);
}

@ -85,45 +85,85 @@ class Smarty_Internal_ParseTree_Template extends Smarty_Internal_ParseTree
public function to_smarty_php(Smarty_Internal_Templateparser $parser)
{
$code = '';
for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) {
if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text) {
$subtree = $this->subtrees[ $key ]->to_smarty_php($parser);
while ($key + 1 < $cnt && ($this->subtrees[ $key + 1 ] instanceof Smarty_Internal_ParseTree_Text ||
$this->subtrees[ $key + 1 ]->data === '')) {
$key++;
if ($this->subtrees[ $key ]->data === '') {
continue;
}
$subtree .= $this->subtrees[ $key ]->to_smarty_php($parser);
}
if ($subtree === '') {
continue;
}
$code .= preg_replace(
'/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/',
"<?php echo '\$1'; ?>\n",
$subtree
);
continue;
}
if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) {
$subtree = $this->subtrees[ $key ]->to_smarty_php($parser);
while ($key + 1 < $cnt && ($this->subtrees[ $key + 1 ] instanceof Smarty_Internal_ParseTree_Tag ||
$this->subtrees[ $key + 1 ]->data === '')) {
$key++;
if ($this->subtrees[ $key ]->data === '') {
continue;
}
$subtree = $parser->compiler->appendCode($subtree, $this->subtrees[ $key ]->to_smarty_php($parser));
}
if ($subtree === '') {
continue;
}
$code .= $subtree;
continue;
}
$code .= $this->subtrees[ $key ]->to_smarty_php($parser);
foreach ($this->getChunkedSubtrees() as $chunk) {
$text = '';
switch ($chunk['mode']) {
case 'textstripped':
foreach ($chunk['subtrees'] as $subtree) {
$text .= $subtree->to_smarty_php($parser);
}
$code .= preg_replace(
'/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/',
"<?php echo '\$1'; ?>\n",
$parser->compiler->processText($text)
);
break;
case 'text':
foreach ($chunk['subtrees'] as $subtree) {
$text .= $subtree->to_smarty_php($parser);
}
$code .= preg_replace(
'/((<%)|(%>)|(<\?php)|(<\?)|(\?>)|(<\/?script))/',
"<?php echo '\$1'; ?>\n",
$text
);
break;
case 'tag':
foreach ($chunk['subtrees'] as $subtree) {
$text = $parser->compiler->appendCode($text, $subtree->to_smarty_php($parser));
}
$code .= $text;
break;
default:
foreach ($chunk['subtrees'] as $subtree) {
$text = $subtree->to_smarty_php($parser);
}
$code .= $text;
}
}
return $code;
}
private function getChunkedSubtrees() {
$chunks = [];
$currentMode = null;
$currentChunk = [];
for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key++) {
if ($this->subtrees[ $key ]->data === '' && in_array($currentMode, ['textstripped', 'text', 'tag'])) {
continue;
}
if ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text
&& $this->subtrees[ $key ]->isToBeStripped()) {
$newMode = 'textstripped';
} elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Text) {
$newMode = 'text';
} elseif ($this->subtrees[ $key ] instanceof Smarty_Internal_ParseTree_Tag) {
$newMode = 'tag';
} else {
$newMode = 'other';
}
if ($newMode == $currentMode) {
$currentChunk[] = $this->subtrees[ $key ];
} else {
$chunks[] = [
'mode' => $currentMode,
'subtrees' => $currentChunk
];
$currentMode = $newMode;
$currentChunk = [$this->subtrees[ $key ]];
}
}
if ($currentMode && $currentChunk) {
$chunks[] = [
'mode' => $currentMode,
'subtrees' => $currentChunk
];
}
return $chunks;
}
}

@ -16,14 +16,31 @@
*/
class Smarty_Internal_ParseTree_Text extends Smarty_Internal_ParseTree
{
/**
* Create template text buffer
*
* @param string $data text
*/
public function __construct($data)
/**
* Wether this section should be stripped on output to smarty php
* @var bool
*/
private $toBeStripped = false;
/**
* Create template text buffer
*
* @param string $data text
* @param bool $toBeStripped wether this section should be stripped on output to smarty php
*/
public function __construct($data, $toBeStripped = false)
{
$this->data = $data;
$this->toBeStripped = $toBeStripped;
}
/**
* Wether this section should be stripped on output to smarty php
* @return bool
*/
public function isToBeStripped() {
return $this->toBeStripped;
}
/**

@ -150,7 +150,7 @@ class Smarty_Internal_Runtime_Inheritance
return;
}
// make sure we got child block of child template of current block
while ($block->child && $block->tplIndex <= $block->child->tplIndex) {
while ($block->child && $block->child->child && $block->tplIndex <= $block->child->tplIndex) {
$block->child = $block->child->child;
}
$this->process($tpl, $block);

@ -265,7 +265,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data
*
* @param string $type plugin type
* @param string $name name of template tag
* @param callback $callback PHP callback to register
* @param callable $callback PHP callback to register
* @param bool $cacheable if true (default) this function is cache able
* @param mixed $cache_attr caching attributes if any
*
@ -301,7 +301,7 @@ abstract class Smarty_Internal_TemplateBase extends Smarty_Internal_Data
* @link http://www.smarty.net/docs/en/api.register.filter.tpl
*
* @param string $type filter type
* @param callback $callback
* @param callable $callback
* @param string|null $name optional filter name
*
* @return \Smarty|\Smarty_Internal_Template

@ -621,22 +621,18 @@ abstract class Smarty_Internal_TemplateCompilerBase
|| strcasecmp($name, 'array') === 0 || is_callable($name)
) {
$func_name = strtolower($name);
$par = implode(',', $parameter);
$parHasFuction = strpos($par, '(') !== false;
if ($func_name === 'isset') {
if (count($parameter) === 0) {
$this->trigger_template_error('Illegal number of parameter in "isset()"');
}
if ($parHasFuction) {
$pa = array();
foreach ($parameter as $p) {
$pa[] = (strpos($p, '(') === false) ? ('isset(' . $p . ')') : ('(' . $p . ' !== null )');
}
return '(' . implode(' && ', $pa) . ')';
} else {
$isset_par = str_replace("')->value", "',null,true,false)->value", $par);
}
return $name . '(' . $isset_par . ')';
$pa = array();
foreach ($parameter as $p) {
$pa[] = $this->syntaxMatchesVariable($p) ? 'isset(' . $p . ')' : '(' . $p . ' !== null )';
}
return '(' . implode(' && ', $pa) . ')';
} elseif (in_array(
$func_name,
array(
@ -653,7 +649,7 @@ abstract class Smarty_Internal_TemplateCompilerBase
$this->trigger_template_error("Illegal number of parameter in '{$func_name()}'");
}
if ($func_name === 'empty') {
if ($parHasFuction && version_compare(PHP_VERSION, '5.5.0', '<')) {
if (!$this->syntaxMatchesVariable($parameter[0]) && version_compare(PHP_VERSION, '5.5.0', '<')) {
return '(' . $parameter[ 0 ] . ' === false )';
} else {
return $func_name . '(' .
@ -671,74 +667,82 @@ abstract class Smarty_Internal_TemplateCompilerBase
}
}
/**
* Determines whether the passed string represents a valid (PHP) variable.
* This is important, because `isset()` only works on variables and `empty()` can only be passed
* a variable prior to php5.5
* @param $string
* @return bool
*/
private function syntaxMatchesVariable($string) {
static $regex_pattern = '/^\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*((->)[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*|\[.*]*\])*$/';
return 1 === preg_match($regex_pattern, trim($string));
}
/**
* This method is called from parser to process a text content section
* This method is called from parser to process a text content section if strip is enabled
* - remove text from inheritance child templates as they may generate output
* - strip text if strip is enabled
*
* @param string $text
*
* @return null|\Smarty_Internal_ParseTree_Text
* @return string
*/
public function processText($text)
{
if ((string)$text != '') {
$store = array();
$_store = 0;
if ($this->parser->strip) {
if (strpos($text, '<') !== false) {
// capture html elements not to be messed with
$_offset = 0;
if (preg_match_all(
'#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is',
$text,
$matches,
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
)
) {
foreach ($matches as $match) {
$store[] = $match[ 0 ][ 0 ];
$_length = strlen($match[ 0 ][ 0 ]);
$replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
$text = substr_replace($text, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
$_offset += $_length - strlen($replace);
$_store++;
}
}
$expressions = array(// replace multiple spaces between tags by a single space
'#(:SMARTY@!@|>)[\040\011]+(?=@!@SMARTY:|<)#s' => '\1 \2',
// remove newline between tags
'#(:SMARTY@!@|>)[\040\011]*[\n]\s*(?=@!@SMARTY:|<)#s' => '\1\2',
// remove multiple spaces between attributes (but not in attribute values!)
'#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
'#>[\040\011]+$#Ss' => '> ',
'#>[\040\011]*[\n]\s*$#Ss' => '>',
$this->stripRegEx => '',
);
$text = preg_replace(array_keys($expressions), array_values($expressions), $text);
$_offset = 0;
if (preg_match_all(
'#@!@SMARTY:([0-9]+):SMARTY@!@#is',
$text,
$matches,
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
)
) {
foreach ($matches as $match) {
$_length = strlen($match[ 0 ][ 0 ]);
$replace = $store[ $match[ 1 ][ 0 ] ];
$text = substr_replace($text, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
$_offset += strlen($replace) - $_length;
$_store++;
}
}
} else {
$text = preg_replace($this->stripRegEx, '', $text);
}
if (strpos($text, '<') === false) {
return preg_replace($this->stripRegEx, '', $text);
}
$store = array();
$_store = 0;
// capture html elements not to be messed with
$_offset = 0;
if (preg_match_all(
'#(<script[^>]*>.*?</script[^>]*>)|(<textarea[^>]*>.*?</textarea[^>]*>)|(<pre[^>]*>.*?</pre[^>]*>)#is',
$text,
$matches,
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
)
) {
foreach ($matches as $match) {
$store[] = $match[ 0 ][ 0 ];
$_length = strlen($match[ 0 ][ 0 ]);
$replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
$text = substr_replace($text, $replace, $match[ 0 ][ 1 ] - $_offset, $_length);
$_offset += $_length - strlen($replace);
$_store++;
}
}
$expressions = array(// replace multiple spaces between tags by a single space
'#(:SMARTY@!@|>)[\040\011]+(?=@!@SMARTY:|<)#s' => '\1 \2',
// remove newline between tags
'#(:SMARTY@!@|>)[\040\011]*[\n]\s*(?=@!@SMARTY:|<)#s' => '\1\2',
// remove multiple spaces between attributes (but not in attribute values!)
'#(([a-z0-9]\s*=\s*("[^"]*?")|(\'[^\']*?\'))|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \5',
'#>[\040\011]+$#Ss' => '> ',
'#>[\040\011]*[\n]\s*$#Ss' => '>',
$this->stripRegEx => '',
);
$text = preg_replace(array_keys($expressions), array_values($expressions), $text);
$_offset = 0;
if (preg_match_all(
'#@!@SMARTY:([0-9]+):SMARTY@!@#is',
$text,
$matches,
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
)
) {
foreach ($matches as $match) {
$_length = strlen($match[ 0 ][ 0 ]);
$replace = $store[ $match[ 1 ][ 0 ] ];
$text = substr_replace($text, $replace, $match[ 0 ][ 1 ] + $_offset, $_length);
$_offset += strlen($replace) - $_length;
$_store++;
}
return new Smarty_Internal_ParseTree_Text($text);
}
return null;
return $text;
}
/**

@ -215,9 +215,23 @@ class Smarty_Internal_Templatelexer
*/
private $yy_global_pattern5 = null;
private $_yy_state = 1;
/**
* preg token pattern for text
*
* @var null
*/
private $yy_global_text = null;
/**
* preg token pattern for literal
*
* @var null
*/
private $yy_global_literal = null;
private $_yy_stack = array();
private $_yy_state = 1;
private $_yy_stack = array();
/**
* constructor
@ -319,7 +333,7 @@ class Smarty_Internal_Templatelexer
{
if (!isset($this->yy_global_pattern1)) {
$this->yy_global_pattern1 =
$this->replace("/\G([{][}])|\G((SMARTYldel)SMARTYal[*])|\G((SMARTYldel)SMARTYalphp([ ].*?)?SMARTYrdel|(SMARTYldel)SMARTYal[\/]phpSMARTYrdel)|\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([<][?]((php\\s+|=)|\\s+)|[<][%]|[<][?]xml\\s+|[<]script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*[>]|[?][>]|[%][>])|\G((.*?)(?=((SMARTYldel)SMARTYal|[<][?]((php\\s+|=)|\\s+)|[<][%]|[<][?]xml\\s+|[<]script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*[>]|[?][>]|[%][>]SMARTYliteral))|[\s\S]+)/isS");
$this->replace("/\G([{][}])|\G((SMARTYldel)SMARTYal[*])|\G((SMARTYldel)SMARTYalphp([ ].*?)?SMARTYrdel|(SMARTYldel)SMARTYal[\/]phpSMARTYrdel)|\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([<][?]((php\\s+|=)|\\s+)|[<][%]|[<][?]xml\\s+|[<]script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*[>]|[?][>]|[%][>])|\G([\S\s])/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
@ -336,11 +350,8 @@ class Smarty_Internal_Templatelexer
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
' an empty string. Input "' . substr(
$this->data,
$this->counter,
5
) . '... state TEXT');
' an empty string. Input "' . substr($this->data,
$this->counter, 5) . '... state TEXT');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@ -365,7 +376,7 @@ class Smarty_Internal_Templatelexer
continue;
}
} else {
throw new Exception('Unexpected input at line' . $this->line .
throw new Exception('Unexpected input at line ' . $this->line .
': ' . $this->data[ $this->counter ]);
}
break;
@ -379,6 +390,7 @@ class Smarty_Internal_Templatelexer
public function yy_r1_2()
{
$to = $this->dataLength;
preg_match("/[*]{$this->compiler->getRdelPreg()}[\n]?/", $this->data, $match, PREG_OFFSET_CAPTURE,
$this->counter);
if (isset($match[ 0 ][ 1 ])) {
@ -425,6 +437,16 @@ class Smarty_Internal_Templatelexer
public function yy_r1_19()
{
if (!isset($this->yy_global_text)) {
$this->yy_global_text =
$this->replace('/(SMARTYldel)SMARTYal|[<][?]((php\s+|=)|\s+)|[<][%]|[<][?]xml\s+|[<]script\s+language\s*=\s*["\']?\s*php\s*["\']?\s*[>]|[?][>]|[%][>]SMARTYliteral/isS');
}
$to = $this->dataLength;
preg_match($this->yy_global_text, $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
if (isset($match[ 0 ][ 1 ])) {
$to = $match[ 0 ][ 1 ];
}
$this->value = substr($this->data, $this->counter, $to - $this->counter);
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
@ -449,11 +471,8 @@ class Smarty_Internal_Templatelexer
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
' an empty string. Input "' . substr(
$this->data,
$this->counter,
5
) . '... state TAG');
' an empty string. Input "' . substr($this->data,
$this->counter, 5) . '... state TAG');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@ -478,7 +497,7 @@ class Smarty_Internal_Templatelexer
continue;
}
} else {
throw new Exception('Unexpected input at line' . $this->line .
throw new Exception('Unexpected input at line ' . $this->line .
': ' . $this->data[ $this->counter ]);
}
break;
@ -573,7 +592,7 @@ class Smarty_Internal_Templatelexer
{
if (!isset($this->yy_global_pattern3)) {
$this->yy_global_pattern3 =
$this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS");
$this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
@ -590,11 +609,8 @@ class Smarty_Internal_Templatelexer
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
' an empty string. Input "' . substr(
$this->data,
$this->counter,
5
) . '... state TAGBODY');
' an empty string. Input "' . substr($this->data,
$this->counter, 5) . '... state TAGBODY');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@ -619,7 +635,7 @@ class Smarty_Internal_Templatelexer
continue;
}
} else {
throw new Exception('Unexpected input at line' . $this->line .
throw new Exception('Unexpected input at line ' . $this->line .
': ' . $this->data[ $this->counter ]);
}
break;
@ -772,10 +788,15 @@ class Smarty_Internal_Templatelexer
public function yy_r3_42()
{
$this->token = Smarty_Internal_Templateparser::TP_HATCH;
$this->token = Smarty_Internal_Templateparser::TP_ARRAYOPEN;
}
public function yy_r3_43()
{
$this->token = Smarty_Internal_Templateparser::TP_HATCH;
}
public function yy_r3_44()
{
// resolve conflicts with shorttag and right_delimiter starting with '='
if (substr($this->data, $this->counter + strlen($this->value) - 1, $this->compiler->getRdelLength()) ===
@ -788,73 +809,73 @@ class Smarty_Internal_Templatelexer
}
}
public function yy_r3_44()
public function yy_r3_45()
{
$this->token = Smarty_Internal_Templateparser::TP_NAMESPACE;
}
public function yy_r3_47()
public function yy_r3_48()
{
$this->token = Smarty_Internal_Templateparser::TP_ID;
}
public function yy_r3_48()
public function yy_r3_49()
{
$this->token = Smarty_Internal_Templateparser::TP_INTEGER;
}
public function yy_r3_49()
public function yy_r3_50()
{
$this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
$this->yypopstate();
}
public function yy_r3_50()
public function yy_r3_51()
{
$this->token = Smarty_Internal_Templateparser::TP_VERT;
}
public function yy_r3_51()
public function yy_r3_52()
{
$this->token = Smarty_Internal_Templateparser::TP_DOT;
}
public function yy_r3_52()
public function yy_r3_53()
{
$this->token = Smarty_Internal_Templateparser::TP_COMMA;
}
public function yy_r3_53()
public function yy_r3_54()
{
$this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
}
public function yy_r3_54()
public function yy_r3_55()
{
$this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
}
public function yy_r3_55()
public function yy_r3_56()
{
$this->token = Smarty_Internal_Templateparser::TP_COLON;
}
public function yy_r3_56()
public function yy_r3_57()
{
$this->token = Smarty_Internal_Templateparser::TP_QMARK;
}
public function yy_r3_57()
public function yy_r3_58()
{
$this->token = Smarty_Internal_Templateparser::TP_HEX;
}
public function yy_r3_58()
public function yy_r3_59()
{
$this->token = Smarty_Internal_Templateparser::TP_SPACE;
} // end function
public function yy_r3_59()
public function yy_r3_60()
{
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
@ -863,7 +884,7 @@ class Smarty_Internal_Templatelexer
{
if (!isset($this->yy_global_pattern4)) {
$this->yy_global_pattern4 =
$this->replace("/\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((.*?)(?=(SMARTYldel)SMARTYal[\/]?literalSMARTYrdel))/isS");
$this->replace("/\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G([\S\s])/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
@ -880,11 +901,8 @@ class Smarty_Internal_Templatelexer
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
' an empty string. Input "' . substr(
$this->data,
$this->counter,
5
) . '... state LITERAL');
' an empty string. Input "' . substr($this->data,
$this->counter, 5) . '... state LITERAL');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@ -909,7 +927,7 @@ class Smarty_Internal_Templatelexer
continue;
}
} else {
throw new Exception('Unexpected input at line' . $this->line .
throw new Exception('Unexpected input at line ' . $this->line .
': ' . $this->data[ $this->counter ]);
}
break;
@ -935,6 +953,17 @@ class Smarty_Internal_Templatelexer
public function yy_r4_5()
{
if (!isset($this->yy_global_literal)) {
$this->yy_global_literal = $this->replace('/(SMARTYldel)SMARTYal[\/]?literalSMARTYrdel/isS');
}
$to = $this->dataLength;
preg_match($this->yy_global_literal, $this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
if (isset($match[ 0 ][ 1 ])) {
$to = $match[ 0 ][ 1 ];
} else {
$this->compiler->trigger_template_error("missing or misspelled literal closing tag");
}
$this->value = substr($this->data, $this->counter, $to - $this->counter);
$this->token = Smarty_Internal_Templateparser::TP_LITERAL;
} // end function
@ -942,7 +971,7 @@ class Smarty_Internal_Templatelexer
{
if (!isset($this->yy_global_pattern5)) {
$this->yy_global_pattern5 =
$this->replace("/\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=((SMARTYldel)SMARTYal|\\$|`\\$|\"SMARTYliteral)))/isS");
$this->replace("/\G((SMARTYldel)SMARTYautoliteral\\s+SMARTYliteral)|\G((SMARTYldel)SMARTYalliteral\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/]literal\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal[\/])|\G((SMARTYldel)SMARTYal[0-9]*[a-zA-Z_]\\w*)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G([`][$])|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=((SMARTYldel)SMARTYal|\\$|`\\$|\"SMARTYliteral)))|\G([\S\s])/isS");
}
if (!isset($this->dataLength)) {
$this->dataLength = strlen($this->data);
@ -959,11 +988,8 @@ class Smarty_Internal_Templatelexer
}
if (empty($yymatches)) {
throw new Exception('Error: lexing failed because a rule matched' .
' an empty string. Input "' . substr(
$this->data,
$this->counter,
5
) . '... state DOUBLEQUOTEDSTRING');
' an empty string. Input "' . substr($this->data,
$this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
}
next($yymatches); // skip global match
$this->token = key($yymatches); // token number
@ -988,7 +1014,7 @@ class Smarty_Internal_Templatelexer
continue;
}
} else {
throw new Exception('Unexpected input at line' . $this->line .
throw new Exception('Unexpected input at line ' . $this->line .
': ' . $this->data[ $this->counter ]);
}
break;
@ -1057,4 +1083,13 @@ class Smarty_Internal_Templatelexer
{
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
public function yy_r5_22()
{
$to = $this->dataLength;
$this->value = substr($this->data, $this->counter, $to - $this->counter);
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
}
}

@ -1,5 +1,5 @@
$Id$
Smarty version: 3.1.33
( https://github.com/smarty-php/smarty/archive/v3.1.33.tar.gz )
Smarty version: 3.1.35
( https://github.com/smarty-php/smarty/archive/v3.1.35.tar.gz )

@ -34,7 +34,7 @@ class AdminHandler extends PFAHandler {
$domains_grouped = 'group_concat(domain)';
}
$passwordReset = (int) Config::bool('forgotten_admin_password_reset');
$passwordReset = Config::read('forgotten_admin_password_reset');
$reset_by_sms = 0;
if ($passwordReset && Config::read('sms_send_function')) {
@ -44,10 +44,10 @@ class AdminHandler extends PFAHandler {
$this->struct=array(
# field name allow display in... type $PALANG label $PALANG description default / options / ...
# editing? form list
'username' => pacol($this->new, 1, 1, 'text', 'admin' , 'email_address' , '', array(),
'username' => pacol($this->new, 1, 1, 'text', 'admin' , 'email_address' , '', '',
array('linkto' => 'list.php?table=domain&username=%s') ),
'password' => pacol(1, 1, 0, 'pass', 'password' , '' ),
'password2' => pacol(1, 1, 0, 'pass', 'password_again' , '' , '', array(),
'password2' => pacol(1, 1, 0, 'pass', 'password_again' , '' , '', '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ 'password as password2'
@ -69,7 +69,7 @@ class AdminHandler extends PFAHandler {
/*extrafrom set in domain_count*/
),
'domain_count' => pacol(0, 0, 1, 'vnum', 'pAdminList_admin_count', '' , '', array(),
'domain_count' => pacol(0, 0, 1, 'vnum', 'pAdminList_admin_count', '' , '', '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ 'coalesce(__domain_count,0) as domain_count',
@ -154,8 +154,8 @@ class AdminHandler extends PFAHandler {
'domain' => 'ALL',
);
$where = db_where_clause(array('username' => $this->id, 'domain' => 'ALL'), $this->struct);
$result = db_query_one("SELECT username from " . table_by_key('domain_admins') . " " . $where);
if (empty($result)) {
$result = db_query("SELECT username from " . table_by_key('domain_admins') . " " . $where);
if ($result['rows'] == 0) {
db_insert('domain_admins', $values, array('created'));
# TODO: check for errors
}

@ -9,11 +9,11 @@ class AdminpasswordHandler extends PFAHandler {
protected $skip_empty_pass = false;
protected function no_domain_field() {
return true;
# PFAHandler die()s if domain field is not set. Disable this behaviour for AdminHandler.
}
protected function validate_new_id() {
return true;
# unused in AdminpasswordHandler, but must be defined
}
# init $this->struct, $this->db_table and $this->id_field
@ -24,10 +24,10 @@ class AdminpasswordHandler extends PFAHandler {
# field name allow display in... type $PALANG label $PALANG description default / options / ...
# editing? form list
'username' => pacol(0, 1, 1, 'text', 'admin' , '' ),
'oldpass' => pacol(1, 1, 0, 'pass', 'pPassword_password_current' , '', '', array(),
'oldpass' => pacol(1, 1, 0, 'pass', 'pPassword_password_current' , '', '', '',
/*not_in_db*/ 1 ),
'password' => pacol(1, 1, 0, 'pass', 'pPassword_password' , '' ),
'password2' => pacol(1, 1, 0, 'pass', 'pPassword_password2' , '' , '', array(),
'password2' => pacol(1, 1, 0, 'pass', 'pPassword_password2' , '' , '', '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ 'password as password2'

@ -3,6 +3,8 @@
/**
* Handlers User level alias actions - e.g. add alias, get aliases, update etc.
* @property $username name of alias
* @property $return return of methods
*/
class AliasHandler extends PFAHandler {
protected $db_table = 'alias';
@ -24,11 +26,11 @@ class AliasHandler extends PFAHandler {
$this->struct=array(
# field name allow display in... type $PALANG label $PALANG description default / ...
# editing? form list
'status' => pacol(0, 0, 0, 'html', '' , '' , '', array(),
'status' => pacol(0, 0, 0, 'html', '' , '' , '', '',
array('not_in_db' => 1) ),
'address' => pacol($this->new, 1, 1, 'mail', 'alias' , 'pCreate_alias_catchall_text' ),
'localpart' => pacol($this->new, 0, 0, 'text', 'alias' , 'pCreate_alias_catchall_text' , '',
/*options*/ array(),
/*options*/ '',
/*not_in_db*/ 1 ),
'domain' => pacol($this->new, 0, 1, 'enum', '' , '' , '',
/*options*/ $this->allowed_domains ),
@ -36,24 +38,24 @@ class AliasHandler extends PFAHandler {
'is_mailbox' => pacol(0, 0, 1, 'int', '' , '' , 0 ,
# technically 'is_mailbox' is bool, but the automatic bool conversion breaks the query. Flagging it as int avoids this problem.
# Maybe having a vbool type (without the automatic conversion) would be cleaner - we'll see if we need it.
/*options*/ array(),
/*options*/ '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ 'coalesce(__is_mailbox,0) as is_mailbox' ),
/*extrafrom set via set_is_mailbox_extrafrom() */
'__mailbox_username' => pacol( 0, 0, 1, 'vtxt', '' , '' , 0), # filled via is_mailbox
'goto_mailbox' => pacol($mbgoto, $mbgoto,$mbgoto,'bool', 'pEdit_alias_forward_and_store' , '' , 0,
/*options*/ array(),
/*options*/ '',
/*not_in_db*/ 1 ), # read_from_db_postprocess() sets the value
'on_vacation' => pacol(1, 0, 1, 'bool', 'pUsersMenu_vacation' , '' , 0 ,
/*options*/ array(),
/*options*/ '',
/*not_in_db*/ 1 ), # read_from_db_postprocess() sets the value - TODO: read active flag from vacation table instead?
'created' => pacol(0, 0, 0, 'ts', 'created' , '' ),
'modified' => pacol(0, 0, 1, 'ts', 'last_modified' , '' ),
'active' => pacol(1, 1, 1, 'bool', 'active' , '' , 1 ),
'_can_edit' => pacol(0, 0, 1, 'vnum', '' , '' , 0 , array(),
'_can_edit' => pacol(0, 0, 1, 'vnum', '' , '' , 0 , '',
array('select' => '1 as _can_edit') ),
'_can_delete' => pacol(0, 0, 1, 'vnum', '' , '' , 0 , array(),
'_can_delete' => pacol(0, 0, 1, 'vnum', '' , '' , 0 , '',
array('select' => '1 as _can_delete') ), # read_from_db_postprocess() updates the value
# aliases listed in $CONF[default_aliases] are read-only for domain admins if $CONF[special_alias_control] is NO.
);
@ -137,13 +139,10 @@ class AliasHandler extends PFAHandler {
* It also calls parent::init()
*/
public function init($id) {
$bits = explode('@', $id);
if (sizeof($bits) == 2) {
$local_part = $bits[0];
$domain = $bits[1];
if ($local_part == '*') { # catchall - postfix expects '@domain', not '*@domain'
$id = '@' . $domain;
}
@list($local_part, $domain) = explode('@', $id); # supress error message if $id doesn't contain '@'
if ($local_part == '*') { # catchall - postfix expects '@domain', not '*@domain'
$id = '@' . $domain;
}
$retval = parent::init($id);
@ -254,7 +253,7 @@ class AliasHandler extends PFAHandler {
}
}
protected function setmore(array $values) {
protected function setmore($values) {
if ($this->new) {
if ($this->struct['address']['display_in_form'] == 1) { # default mode - split off 'domain' field from 'address' # TODO: do this unconditional?
list(/*NULL*/, $domain) = explode('@', $values['address']);
@ -311,10 +310,7 @@ class AliasHandler extends PFAHandler {
protected function read_from_db_postprocess($db_result) {
foreach ($db_result as $key => $value) {
# split comma-separated 'goto' into an array
$goto = $db_result[$key]['goto'] ?? null;
if (is_string($goto)) {
$db_result[$key]['goto'] = explode(',', $goto);
}
$db_result[$key]['goto'] = explode(',', $db_result[$key]['goto']);
# Vacation enabled?
list($db_result[$key]['on_vacation'], $db_result[$key]['goto']) = remove_from_array($db_result[$key]['goto'], $this->getVacationAlias());
@ -330,12 +326,12 @@ class AliasHandler extends PFAHandler {
# editing a default alias (postmaster@ etc.) is only allowed if special_alias_control is allowed or if the user is a superadmin
$tmp = preg_split('/\@/', $db_result[$key]['address']);
if (!$this->is_superadmin && !Config::bool('special_alias_control') && array_key_exists($tmp[0], Config::read_array('default_aliases'))) {
if (!$this->is_superadmin && !Config::bool('special_alias_control') && array_key_exists($tmp[0], Config::Read('default_aliases'))) {
$db_result[$key]['_can_edit'] = 0;
$db_result[$key]['_can_delete'] = 0;
}
if ($this->struct['status']['display_in_list'] && Config::bool('show_status')) {
if ($this->struct['status']['display_in_list'] && Config::Bool('show_status')) {
$db_result[$key]['status'] = gen_show_status($db_result[$key]['address']);
}
}
@ -444,7 +440,7 @@ class AliasHandler extends PFAHandler {
*/
protected function getVacationAlias() {
$vacation_goto = str_replace('@', '#', $this->id);
return $vacation_goto . '@' . Config::read_string('vacation_domain');
return $vacation_goto . '@' . Config::read('vacation_domain');
}
/**

@ -11,11 +11,11 @@ class CliDelete extends Shell {
*/
public function execute() {
if (empty($this->args)) {
return $this->__interactive();
$this->__interactive();
}
if (!empty($this->args[0])) {
return $this->__handle($this->args[0]);
$this->__handle($this->args[0]);
}
}
@ -33,7 +33,7 @@ class CliDelete extends Shell {
$create = $this->in($question, array('y','n'));
if ($create == 'y') {
return $this->__handle($address);
$this->__handle($address);
}
}
@ -47,15 +47,14 @@ class CliDelete extends Shell {
if (!$handler->init($address)) {
$this->err($handler->errormsg);
return 1;
return;
}
if (!$handler->delete()) {
$this->err($handler->errormsg);
return 1;
} else {
$this->out($handler->infomsg);
}
$this->out($handler->infomsg);
return 0;
}
/**
@ -81,7 +80,7 @@ class CliDelete extends Shell {
Deletes $module <address> in non-interactive mode.
"
);
$this->_stop(1);
$this->_stop();
}
}

@ -1,24 +1,24 @@
<?php
# $Id$
/**
* class to handle add and edit in Cli
*
* extends the "Shell" class
*/
class CliEdit extends Shell {
public $handler_to_use = "";
public $new = 0;
/**
* Execution method always used for tasks
*/
* Execution method always used for tasks
*/
public function execute() {
if (empty($this->args)) {
return $this->__interactive();
$this->__interactive();
} else {
return $this->__handle_params();
$this->__handle_params();
}
}
@ -28,11 +28,11 @@ class CliEdit extends Shell {
* The list of allowed params is based on $handler->struct
*/
private function __handle_params() {
$handler = new $this->handler_to_use($this->new);
$handler = new $this->handler_to_use($this->new);
$form_fields = $handler->getStruct();
$id_field = $handler->getId_field();
$id_field = $handler->getId_field();
$values = array();
$values = array();
$param_error = 0;
foreach ($this->params as $key => $val) {
@ -46,7 +46,7 @@ class CliEdit extends Shell {
if (strtolower($val) == 'y') {
$val = 1;
} # convert y to 1
elseif (strtolower($val) == 'n') {
if (strtolower($val) == 'n') {
$val = 0;
} # convert n to 0
$values[$key] = $val; # don't modify any other value - *Handler will complain if it's invalid ;-)
@ -58,24 +58,26 @@ class CliEdit extends Shell {
} else { # not editable, unknown field etc.
$param_error = 1;
$this->err("invalid parameter --$key => $val");
return 1;
}
}
return $this->__handle($this->args[0], $values);
if ($param_error) {
$this->_stop(1);
}
$this->__handle($this->args[0], $values);
}
/**
* Interactive mode
*/
* Interactive mode
*/
private function __interactive() {
$handler = new $this->handler_to_use($this->new);
$form_fields = $handler->getStruct();
$id_field = $handler->getId_field();
$id_field = $handler->getId_field();
$values = array($id_field => '');
$values[$id_field] = '';
while ($form_fields[$id_field]['editable'] != 0) { # endlees loop - except if input is valid or id_field is not editable (like auto_increment)
$question = $form_fields[$id_field]['label'] . ":";
if ($form_fields[$id_field]['desc'] != '') {
@ -100,7 +102,7 @@ class CliEdit extends Shell {
foreach ($form_fields as $key => $field) {
if ($field['editable'] && $field['display_in_form'] && $key != $id_field) {
while (true) { # endlees loop - except if input is valid
while (0==0) { # endlees loop - except if input is valid
$question = $field['label'] . ':';
if ($field['desc'] != '') {
$question .= "\n(" . $field['desc'] . ')';
@ -121,15 +123,15 @@ class CliEdit extends Shell {
foreach ($field['options'] as $optionkey => $optionval) {
// $this->in hates number 0
$optionkey = $optionkey + 1;
$optiontxt[] = '[' . $optionkey . '] - ' . $optionval;
$optiontxt[] = '['.$optionkey.'] - '.$optionval;
$optionlist[] = $optionkey;
}
$question .= "\n" . join("\n", $optiontxt) . "\n";
$selected = (int) $this->in($question, $optionlist);
$values[$key] = $this->in($question, $optionlist);
$values[$key] = $field['options'][$selected - 1]; # convert int to option name
$values[$key] = $field['options'][$values[$key]-1]; # convert int to option name
} elseif ($field['type'] == 'txtl') {
$values[$key] = array();
$nextval = $this->in($question);
@ -144,8 +146,7 @@ class CliEdit extends Shell {
}
if (is_null($values[$key])) { # TODO: insull() is probably obsoleted by change in Shell class
$this->err("*** value of $key is NULL - this should not happen! ***");
return 1;
echo "*** value of $key is NULL - this should not happen! ***";
}
if ($values[$key] == '' && (!$this->new)) { # edit mode
@ -160,7 +161,6 @@ class CliEdit extends Shell {
if (isset($handler->errormsg[$key])) { # only check the errormessage for this field
$this->err($handler->errormsg[$key]);
return 1;
} else {
break;
}
@ -168,38 +168,37 @@ class CliEdit extends Shell {
} # end if $field[editable] etc.
} # end foreach
return $this->__handle($values[$id_field], $values);
$this->__handle($values[$id_field], $values);
}
/**
* (try to) store values
*/
* (try to) store values
*/
private function __handle($id, $values) {
$handler = new $this->handler_to_use($this->new);
$handler = new $this->handler_to_use($this->new);
if (!$handler->init($id)) {
$this->err($handler->errormsg);
return 1;
return;
}
if (!$handler->set($values)) {
$this->err($handler->errormsg);
return 1;
return;
}
if (!$handler->store()) {
$this->err($handler->errormsg);
return 1;
} else {
$this->out("");
$this->out($handler->infomsg);
$this->hr();
}
$this->out("");
$this->out($handler->infomsg);
$this->hr();
return 0;
return;
}
/**
* Displays help contents
*/
* Displays help contents
*/
public function help() {
if ($this->new) {
$cmd = 'add';
@ -213,7 +212,7 @@ class CliEdit extends Shell {
$module = strtolower($module);
$this->out(
"Usage:
"Usage:
postfixadmin-cli $module $cmd
@ -232,7 +231,7 @@ class CliEdit extends Shell {
$handler = new $this->handler_to_use($this->new);
$form_fields = $handler->getStruct();
$id_field = $handler->getId_field();
$id_field = $handler->getId_field();
foreach ($form_fields as $key => $field) {
if ($field['editable'] && $field['display_in_form'] && $key != $id_field) {
@ -247,7 +246,8 @@ class CliEdit extends Shell {
}
$this->_stop(1);
$this->_stop();
}
}
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */

@ -75,7 +75,7 @@ class CliScheme extends Shell {
$this->hr();
$this->out('Note that the above is only a template.');
$this->out('You might need to adjust some parts.');
return 0;
return;
}
/**
@ -96,7 +96,7 @@ class CliScheme extends Shell {
"
);
$this->_stop(1);
$this->_stop();
}
}
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */

@ -11,11 +11,11 @@ class CliView extends Shell {
*/
public function execute() {
if (empty($this->args)) {
return $this->__interactive();
$this->__interactive();
}
if (!empty($this->args[0])) {
return $this->__handle($this->args[0]);
$this->__handle($this->args[0]);
}
}
@ -29,7 +29,7 @@ class CliView extends Shell {
$question = "Which $module do you want to view?";
$address = $this->in($question);
return $this->__handle($address);
$this->__handle($address);
}
/**
@ -42,12 +42,12 @@ class CliView extends Shell {
if (!$handler->init($address)) {
$this->err($handler->errormsg);
return 1;
return;
}
if (!$handler->view()) {
$this->err($handler->errormsg);
return 1;
return;
}
$result = $handler->result();

@ -50,46 +50,24 @@ final class Config {
$newConfig = $_this->getAll();
foreach ($config as $name => $value) {
$newConfig[$name] = $value;
foreach ($config as $names => $value) {
$name = $_this->__configVarNames($names);
switch (count($name)) {
case 3:
$newConfig[$name[0]][$name[1]][$name[2]] = $value;
break;
case 2:
$newConfig[$name[0]][$name[1]] = $value;
break;
case 1:
$newConfig[$name[0]] = $value;
break;
}
}
$_this->setAll($newConfig);
}
/**
* @param string $var
* @return array
*/
public static function read_array($var) {
$stuff = self::read($var);
if (!is_array($stuff)) {
trigger_error('In ' . __FUNCTION__ . ": expected config $var to be an array, but received a " . gettype($stuff), E_USER_ERROR);
}
return $stuff;
}
/**
* @param string $var
* @return string
*/
public static function read_string($var) {
$stuff = self::read($var);
if ($stuff === null) {
return '';
}
if (!is_string($stuff)) {
trigger_error('In ' . __FUNCTION__ . ": expected config $var to be a string, but received a " . gettype($stuff), E_USER_ERROR);
return '';
}
return $stuff;
}
/**
* Used to read Configure::$var
*
@ -98,7 +76,7 @@ final class Config {
* Configure::read('Name.key'); will return only the value of Configure::Name[key]
*
* @param string $var Variable to obtain
* @return array|string|null|bool some value
* @return string value of Configure::$var
* @access public
*/
public static function read($var) {
@ -110,12 +88,34 @@ final class Config {
return $config;
}
if (isset($config[$var])) {
return $config[$var];
$name = $_this->__configVarNames($var);
switch (count($name)) {
case 3:
$zero = $name[0];
$one = $name[1];
$two = $name[2];
if (isset($config[$zero], $config[$zero][$one], $config[$zero][$one][$two])) {
return $config[$zero][$one][$two];
}
break;
case 2:
$zero = $name[0];
$one = $name[1];
if (isset($config[$zero], $config[$zero][$one])) {
return $config[$zero][$one];
}
break;
case 1:
$zero = $name[0];
if (isset($config[$zero])) {
return $config[$zero];
}
break;
}
if (!in_array($var, self::$deprecated_options)) {
error_log('Config::read(): attempt to read undefined config option "' . $var . '", returning null');
if (!in_array(join('.', $name), self::$deprecated_options)) {
error_log('Config::read(): attempt to read undefined config option "' . join('.', $name) . '", returning null');
}
return null;
@ -128,14 +128,18 @@ final class Config {
* @param string $var Variable to obtain
* @param string $value Value to use as sprintf parameter
* @return string value of Config::$var, parsed by sprintf
* @access public
*/
public static function read_f($var, $value) {
$text = self::read_string($var);
$text = self::read($var);
$newtext = sprintf($text, $value);
# check if sprintf changed something - if not, there are chances that $text didn't contain a %s
if ($text == $newtext) {
if (is_array($var)) {
$var = join('.', $var);
}
error_log("$var used via read_f, but nothing replaced (value $value)");
}
@ -144,32 +148,22 @@ final class Config {
/**
* Used to read Config::$var, converted to boolean
* (obviously only useful for settings that can be YES or NO, or boolean like values)
* (obviously only useful for settings that can be YES or NO)
*
* Usage
* Configure::read('Name'); will return the value for Name, converted to boolean
*
* @param string $var Variable to obtain
* @return bool value of Configure::$var (TRUE (on YES/yes) or FALSE (on NO/no/not set/unknown value)
* @access public
*/
public static function bool($var) {
$value = self::read($var);
if (is_bool($value)) {
return $value;
}
if (!is_string($value)) {
trigger_error('In ' . __FUNCTION__ . ": expected config $var to be a string, but received a " . gettype($value), E_USER_ERROR);
error_log("config $var should be a string, found: " . json_encode($value));
return false;
}
$value = strtoupper($value);
if ($value == 'YES' || $value == 'TRUE') { # YES
if (strtoupper($value) == 'YES') { # YES
return true;
} elseif ($value == 'NO' || $value == 'FALSE') { # NO
} elseif (strtoupper($value) == 'NO') { # NO
return false;
} else { # unknown value
# show and log error message on unknown value
@ -189,24 +183,17 @@ final class Config {
}
/**
* Get translated text from $PALANG
* (wrapper for self::read(), see also the comments there)
*
* @param string $var Variable to obtain
* @return string value of $PALANG[$var]
* @access public
*/
* Get translated text from $PALANG
* (wrapper for self::read(), see also the comments there)
*
* @param string $var Variable to obtain
* @return string value of $PALANG[$var]
* @access public
*/
public static function lang($var) {
$languages = self::read_array('__LANG');
$value = $languages[$var] ?? '';
if (!is_string($value)) {
trigger_error('In ' . __FUNCTION__ . ": expected config $var to be a string , but received a " . gettype($value), E_USER_ERROR);
}
return $value;
return self::read(array('__LANG', $var));
}
/**
@ -216,20 +203,10 @@ final class Config {
* @param string $var Text (from $PALANG) to obtain
* @param string $value Value to use as sprintf parameter
* @return string value of $PALANG[$var], parsed by sprintf
* @access public
*/
public static function lang_f($var, $value) {
$all = self::read_array('__LANG');
$text = $all[$var] ?? '';
$newtext = sprintf($text, $value);
# check if sprintf changed something - if not, there are chances that $text didn't contain a %s
if ($text == $newtext) {
error_log("$var used via read_f, but nothing replaced (value $value)");
}
return $newtext;
return self::read_f(array('__LANG', $var), $value);
}
/**
@ -246,6 +223,23 @@ final class Config {
public function setAll(array $config) {
$this->config = $config;
}
/**
* Checks $name for dot notation to create dynamic Configure::$var as an array when needed.
*
* @param mixed $name Name to split
* @return array Name separated in items through dot notation
* @access private
*/
private function __configVarNames($name) {
if (is_string($name)) {
if (strpos($name, ".")) {
return explode(".", $name);
}
return array($name);
}
return $name;
}
}
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */

@ -36,80 +36,71 @@ class DomainHandler extends PFAHandler {
$quota = Config::intbool('quota');
$edit_dom_q = min($super, Config::intbool('domain_quota'), $quota);
$dom_q = min(Config::intbool('domain_quota'), $quota);
$pwexp = min($super, Config::intbool('password_expiration'));
$query_used_domainquota = 'round(coalesce(__total_quota/' . intval(Config::read('quota_multiplier')) . ',0))';
# NOTE: There are dependencies between alias_count, mailbox_count and total_quota.
# NOTE: If you disable "display in list" for one of them, the SQL query for the others might break.
# NOTE: (Disabling all of them shouldn't be a problem.)
#
// https://github.com/postfixadmin/postfixadmin/issues/299
$domain_quota_default = Config::read('domain_quota_default');
if ($domain_quota_default === null) {
$domain_quota_default = -1;
}
$this->struct=array(
# field name allow display in... type $PALANG label $PALANG description default / options / ...
# editing? form list
'domain' => pacol($this->new, 1, 1, 'text', 'domain' , '' , '', array(),
'domain' => pacol($this->new, 1, 1, 'text', 'domain' , '' , '', '',
array('linkto' => 'list-virtual.php?domain=%s') ),
'description' => pacol($super, $super, $super, 'text', 'description' , '' ),
# Aliases
'aliases' => pacol($super, $super, 0, 'num' , 'aliases' , 'pAdminEdit_domain_aliases_text' , Config::read('aliases') ),
'alias_count' => pacol(0, 0, 1, 'vnum', '' , '' , '', array(),
'alias_count' => pacol(0, 0, 1, 'vnum', '' , '' , '', '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ 'coalesce(__alias_count,0) - coalesce(__mailbox_count,0) as alias_count',
/*extrafrom*/ 'left join ( select count(*) as __alias_count, domain as __alias_domain from ' . table_by_key('alias') .
' group by domain) as __alias on domain = __alias_domain'),
'aliases_quot' => pacol(0, 0, 1, 'quot', 'aliases' , '' , 0, array(),
'aliases_quot' => pacol(0, 0, 1, 'quot', 'aliases' , '' , 0, '',
array('select' => db_quota_text( '__alias_count - coalesce(__mailbox_count,0)', 'aliases', 'aliases_quot')) ),
'_aliases_quot_percent' => pacol( 0, 0, 1, 'vnum', '' ,'' , 0, array(),
'_aliases_quot_percent' => pacol( 0, 0, 1, 'vnum', '' ,'' , 0, '',
array('select' => db_quota_percent('__alias_count - coalesce(__mailbox_count,0)', 'aliases', '_aliases_quot_percent')) ),
# Mailboxes
'mailboxes' => pacol($super, $super, 0, 'num' , 'mailboxes' , 'pAdminEdit_domain_aliases_text' , Config::read('mailboxes') ),
'mailbox_count' => pacol(0, 0, 1, 'vnum', '' , '' , '', array(),
'mailbox_count' => pacol(0, 0, 1, 'vnum', '' , '' , '', '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ 'coalesce(__mailbox_count,0) as mailbox_count',
/*extrafrom*/ 'left join ( select count(*) as __mailbox_count, sum(quota) as __total_quota, domain as __mailbox_domain from ' . table_by_key('mailbox') .
' group by domain) as __mailbox on domain = __mailbox_domain'),
'mailboxes_quot' => pacol(0, 0, 1, 'quot', 'mailboxes' , '' , 0, array(),
'mailboxes_quot' => pacol(0, 0, 1, 'quot', 'mailboxes' , '' , 0, '',
array('select' => db_quota_text( '__mailbox_count', 'mailboxes', 'mailboxes_quot')) ),
'_mailboxes_quot_percent' => pacol( 0, 0, 1, 'vnum', '' , '' , 0, array(),
'_mailboxes_quot_percent' => pacol( 0, 0, 1, 'vnum', '' , '' , 0, '',
array('select' => db_quota_percent('__mailbox_count', 'mailboxes', '_mailboxes_quot_percent')) ),
'maxquota' => pacol($editquota,$editquota,$quota, 'num', 'pOverview_get_quota' , 'pAdminEdit_domain_maxquota_text' , Config::read('maxquota') ),
# Domain quota
'quota' => pacol($edit_dom_q,$edit_dom_q, 0, 'num', 'pAdminEdit_domain_quota' , 'pAdminEdit_domain_maxquota_text' , $domain_quota_default ),
'total_quota' => pacol(0, 0, 1, 'vnum', '' , '' , '', array(),
'quota' => pacol($edit_dom_q,$edit_dom_q, 0, 'num', 'pAdminEdit_domain_quota' , 'pAdminEdit_domain_maxquota_text' , Config::read('domain_quota_default') ),
'total_quota' => pacol(0, 0, 1, 'vnum', '' , '' , '', '',
array('select' => "$query_used_domainquota AS total_quota") /*extrafrom*//* already in mailbox_count */ ),
'total_quot' => pacol( 0, 0, $dom_q, 'quot', 'pAdminEdit_domain_quota' , '' , 0, array(),
'total_quot' => pacol( 0, 0, $dom_q, 'quot', 'pAdminEdit_domain_quota' , '' , 0, '',
array('select' => db_quota_text( $query_used_domainquota, 'quota', 'total_quot')) ),
'_total_quot_percent'=> pacol( 0, 0, $dom_q, 'vnum', '' , '' , 0, array(),
'_total_quot_percent'=> pacol( 0, 0, $dom_q, 'vnum', '' , '' , 0, '',
array('select' => db_quota_percent($query_used_domainquota, 'quota', '_total_quot_percent')) ),
'transport' => pacol($transp, $transp,$transp,'enum', 'transport' , 'pAdminEdit_domain_transport_text' , Config::read('transport_default') ,
/*options*/ Config::read_array('transport_options') ),
/*options*/ Config::read('transport_options') ),
'backupmx' => pacol($super, $super, 1, 'bool', 'pAdminEdit_domain_backupmx' , '' , 0),
'active' => pacol($super, $super, 1, 'bool', 'active' , '' , 1 ),
'default_aliases' => pacol($this->new, $this->new, 0, 'bool', 'pAdminCreate_domain_defaultaliases', '' , 1,array(), /*not in db*/ 1 ),
'default_aliases' => pacol($this->new, $this->new, 0, 'bool', 'pAdminCreate_domain_defaultaliases', '' , 1,'', /*not in db*/ 1 ),
'created' => pacol(0, 0, 0, 'ts', 'created' , '' ),
'modified' => pacol(0, 0, $super, 'ts', 'last_modified' , '' ),
'password_expiry' => pacol($super, $pwexp, $pwexp, 'num', 'password_expiration' , 'password_expiration_desc' , 365),
'_can_edit' => pacol(0, 0, 1, 'int', '' , '' , 0 ,
/*options*/ array(),
/*options*/ '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ $this->is_superadmin . ' as _can_edit' ),
'_can_delete' => pacol(0, 0, 1, 'int', '' , '' , 0 ,
/*options*/ array(),
/*options*/ '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ $this->is_superadmin . ' as _can_delete' ),
@ -153,7 +144,8 @@ class DomainHandler extends PFAHandler {
if ($this->is_superadmin) {
return true;
}
$this->errormsg[] = Config::Lang_f('edit_not_allowed', $this->id);
$this->errormsg[] = Config::Lang('edit_not_allowed', $this->id);
return false;
}
@ -163,7 +155,7 @@ class DomainHandler extends PFAHandler {
*/
protected function storemore() {
if ($this->new && $this->values['default_aliases']) {
foreach (Config::read_array('default_aliases') as $address=>$goto) {
foreach (Config::read('default_aliases') as $address=>$goto) {
$address = $address . "@" . $this->id;
# if $goto doesn't contain @, let the alias point to the same domain
if (!strstr($goto, '@')) {
@ -240,7 +232,7 @@ class DomainHandler extends PFAHandler {
db_delete($this->db_table, $this->id_field, $this->id);
if (!$this->domain_postdeletion()) {
$this->errormsg[] = Config::Lang('domain_postdel_failed');
$this->error_msg[] = Config::Lang('domain_postdel_failed');
}
db_log($this->id, 'delete_domain', $this->id); # TODO delete_domain is not a valid db_log keyword yet
@ -271,7 +263,7 @@ class DomainHandler extends PFAHandler {
* @return boolean
*/
protected function domain_postcreation() {
$script=Config::read_string('domain_postcreation_script');
$script=Config::read('domain_postcreation_script');
if (empty($script)) {
return true;
@ -303,7 +295,7 @@ class DomainHandler extends PFAHandler {
* @return boolean
*/
protected function domain_postdeletion() {
$script=Config::read_string('domain_postdeletion_script');
$script=Config::read('domain_postdeletion_script');
if (empty($script)) {
return true;

@ -25,7 +25,6 @@ class FetchmailHandler extends PFAHandler {
'domain' => pacol(0, 0, 1, 'text', '' , '' ),
'mailbox' => pacol(1, 1, 1, 'enum', 'pFetchmail_field_mailbox' , 'pFetchmail_desc_mailbox' ), # mailbox list
'src_server' => pacol(1, 1, 1, 'text', 'pFetchmail_field_src_server' , 'pFetchmail_desc_src_server' ),
'src_port' => pacol(1, 1, 1, 'num', 'pFetchmail_field_src_port' , 'pFetchmail_desc_src_port' , 0 ),
'src_auth' => pacol(1, 1, 1, 'enum', 'pFetchmail_field_src_auth' , 'pFetchmail_desc_src_auth' , '', $src_auth_options),
'src_user' => pacol(1, 1, 1, 'text', 'pFetchmail_field_src_user' , 'pFetchmail_desc_src_user' ),
'src_password' => pacol(1, 1, 0, 'b64p', 'pFetchmail_field_src_password' , 'pFetchmail_desc_src_password' ),
@ -84,8 +83,11 @@ class FetchmailHandler extends PFAHandler {
);
}
protected function domain_from_id() {
# do nothing, setmore() does the work
}
protected function setmore(array $values) {
protected function setmore($values) {
# set domain based on the target mailbox
if ($this->new || isset($values['mailbox'])) {
list(/*NULL*/, $domain) = explode('@', $values['mailbox']);
@ -173,10 +175,6 @@ class FetchmailHandler extends PFAHandler {
}
return true;
}
public function domain_from_id() {
return '';
}
}
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */

@ -12,15 +12,13 @@ class MailboxHandler extends PFAHandler {
# init $this->struct, $this->db_table and $this->id_field
protected function initStruct() {
$passwordReset = (int) Config::bool('forgotten_user_password_reset');
$passwordReset = Config::read('forgotten_user_password_reset');
$reset_by_sms = 0;
if ($passwordReset && Config::read_string('sms_send_function')) {
if ($passwordReset && Config::read('sms_send_function')) {
$reset_by_sms = 1;
}
$show_password_fields = (int) !Config::bool('generate_password');
$this->struct = array(
$this->struct=array(
# field name allow display in... type $PALANG label $PALANG description default / options / ...
# editing? form list
'username' => pacol($this->new, 1, 1, 'mail', 'pEdit_mailbox_username' , '' , '' ),
@ -30,9 +28,9 @@ class MailboxHandler extends PFAHandler {
# TODO: maildir: display in list is needed to include maildir in SQL result (for post_edit hook)
# TODO: (not a perfect solution, but works for now - maybe we need a separate "include in SELECT query" field?)
'maildir' => pacol($this->new, 0, 1, 'text', '' , '' , '' ),
'password' => pacol(1, $show_password_fields, 0, 'pass', 'password' , 'pCreate_mailbox_password_text' , '' ),
'password2' => pacol(1, $show_password_fields, 0, 'pass', 'password_again' , '' , '',
/*options*/ array(),
'password' => pacol(1, 1, 0, 'pass', 'password' , 'pCreate_mailbox_password_text' , '' ),
'password2' => pacol(1, 1, 0, 'pass', 'password_again' , '' , '',
/*options*/ '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ 'password as password2'
@ -43,7 +41,7 @@ class MailboxHandler extends PFAHandler {
# TODO: read used quota from quota/quota2 table
'active' => pacol(1, 1, 1, 'bool', 'active' , '' , 1 ),
'welcome_mail' => pacol($this->new, $this->new, 0, 'bool', 'pCreate_mailbox_mail' , '' , 1,
/*options*/ array(),
/*options*/ '',
/*not_in_db*/ 1 ),
'phone' => pacol(1, $reset_by_sms, 0, 'text', 'pCreate_mailbox_phone' , 'pCreate_mailbox_phone_desc' , ''),
'email_other' => pacol(1, $passwordReset, 0, 'mail', 'pCreate_mailbox_email' , 'pCreate_mailbox_email_desc' , ''),
@ -51,7 +49,6 @@ class MailboxHandler extends PFAHandler {
'token_validity' => pacol(1, 0, 0, 'ts', '' , '', date("Y-m-d H:i:s",time())),
'created' => pacol(0, 0, 1, 'ts', 'created' , '' ),
'modified' => pacol(0, 0, 1, 'ts', 'last_modified' , '' ),
'password_expiry' => pacol(0, 0, 1, 'ts', 'password_expiration' , '' ),
# TODO: add virtual 'notified' column and allow to display who received a vacation response?
);
@ -99,7 +96,7 @@ class MailboxHandler extends PFAHandler {
# } elseif ($maxquota < 0) {
# TODO: show 'disabled' - at the moment, just shows '-1'
} else {
$this->struct['quota']['desc'] = Config::lang_f('mb_max', "" . $maxquota);
$this->struct['quota']['desc'] = Config::lang_f('mb_max', $maxquota);
}
}
@ -208,7 +205,7 @@ class MailboxHandler extends PFAHandler {
foreach ($db_result as $key => $row) {
if (isset($row['quota']) && is_numeric($row['quota']) && $row['quota'] > -1) { # quota could be disabled in $struct
$db_result[$key]['quotabytes'] = $row['quota'];
$db_result[$key]['quota'] = divide_quota( (int) $row['quota']); # convert quota to MB
$db_result[$key]['quota'] = divide_quota($row['quota']); # convert quota to MB
} else {
$db_result[$key]['quotabytes'] = -1;
$db_result[$key]['quota'] = -1;
@ -219,8 +216,8 @@ class MailboxHandler extends PFAHandler {
protected function beforestore() {
if (isset($this->values['quota']) && $this->values['quota'] != -1 && is_numeric($this->values['quota'])) {
$multiplier = Config::read_string('quota_multiplier');
if (isset($this->values['quota']) && is_numeric($this->values['quota']) && $this->values['quota'] != -1) {
$multiplier = Config::read('quota_multiplier');
if ($multiplier == 0 || !is_numeric($multiplier)) { // or empty string, or null, or false...
$multiplier = 1;
}
@ -262,35 +259,7 @@ class MailboxHandler extends PFAHandler {
return false;
}
if (!empty($this->values['password'])) {
// provide some default value to keep MySQL etc happy.
$this->values['password_expiry'] = date('Y-m-d H:i', strtotime("+365 days"));
if (Config::bool('password_expiration')) {
$domain_dirty = $this->domain_from_id();
$domain = trim($domain_dirty, "`'"); // naive assumption it is ' escaping.
$password_expiration_value = (int)get_password_expiration_value($domain);
$this->values['password_expiry'] = date('Y-m-d H:i', strtotime("+$password_expiration_value day"));
}
}
return true;
}
protected function setmore(array $values) {
if (array_key_exists('quota', $this->values)) {
$this->values['quota'] = (int)$this->values['quota'];
}
}
// Could perhaps also use _validate_local_part($new_value) { .... }
public function set(array $values) {
// See: https://github.com/postfixadmin/postfixadmin/issues/282 - ensure the 'local_part' does not contain an @ sign.
$ok = true;
if (isset($values['local_part']) && strpos($values['local_part'], '@')) {
$this->errormsg['local_part'] = Config::lang('pCreate_mailbox_local_part_error');
$ok = false;
}
return $ok && parent::set($values);
return true; # still here? good!
}
protected function storemore() {
@ -358,7 +327,7 @@ class MailboxHandler extends PFAHandler {
db_delete($this->db_table, $this->id_field, $this->id); # finally delete the mailbox
if (!$this->mailbox_postdeletion()) {
$this->errormsg[] = Config::Lang('mailbox_postdel_failed');
$this->error_msg[] = Config::Lang('mailbox_postdel_failed');
}
list(/*NULL*/, $domain) = explode('@', $this->id);
@ -446,9 +415,9 @@ class MailboxHandler extends PFAHandler {
protected function _missing_maildir($field) {
list($local_part, $domain) = explode('@', $this->id);
$maildir_name_hook = Config::read_string('maildir_name_hook');
$maildir_name_hook = Config::read('maildir_name_hook');
if (is_string($maildir_name_hook) && $maildir_name_hook != 'NO' && function_exists($maildir_name_hook)) {
if ($maildir_name_hook != 'NO' && function_exists($maildir_name_hook)) {
$maildir = $maildir_name_hook($domain, $this->id);
} elseif (Config::bool('domain_path')) {
if (Config::bool('domain_in_mailbox')) {
@ -473,7 +442,7 @@ class MailboxHandler extends PFAHandler {
$fSubject = Config::lang('pSendmail_subject_text');
$fBody = Config::read('welcome_text');
if (!smtp_mail($fTo, $fFrom, $fSubject, smtp_get_admin_password(), $fBody)) {
if (!smtp_mail($fTo, $fFrom, $fSubject, $fBody)) {
$this->errormsg[] = Config::lang_f('pSendmail_result_error', $this->id);
return false;
}
@ -485,11 +454,13 @@ class MailboxHandler extends PFAHandler {
/**
* Check if the user is creating a mailbox within the quota limits of the domain
*
* @param int $quota - quota wanted for the mailbox
* @return boolean - true if requested quota is OK, otherwise false
* @todo merge with allowed_quota?
* @param Integer $quota - quota wanted for the mailbox
* @return Boolean - true if requested quota is OK, otherwise false
*/
# TODO: merge with allowed_quota?
protected function check_quota($quota) {
$rval = false;
if (!Config::bool('quota')) {
return true; # enforcing quotas is disabled - just allow it
}
@ -497,6 +468,10 @@ class MailboxHandler extends PFAHandler {
list(/*NULL*/, $domain) = explode('@', $this->id);
$limit = get_domain_properties($domain);
if ($limit['maxquota'] == 0) {
$rval = true; # maxquota unlimited -> OK, but domain level quota could still be hit
}
if (($limit['maxquota'] < 0) and ($quota < 0)) {
return true; # maxquota and $quota are both disabled -> OK, no need for more checks
}
@ -507,6 +482,12 @@ class MailboxHandler extends PFAHandler {
if ($limit['maxquota'] != 0 && $quota > $limit['maxquota']) {
return false; # mailbox bigger than maxquota restriction (and maxquota != unlimited) -> not allowed, no more checks needed
} else {
$rval = true; # mailbox size looks OK, but domain level quota could still be hit
}
if (!$rval) {
return false; # over quota - no need to check domain_quota
}
# TODO: detailed error message ("domain quota exceeded", "mailbox quota too big" etc.) via flash_error? Or "available quota: xxx MB"?
@ -518,11 +499,11 @@ class MailboxHandler extends PFAHandler {
return false;
} else {
$table_mailbox = table_by_key('mailbox');
$query = "SELECT SUM(quota) as sum FROM $table_mailbox WHERE domain = ? AND username != ?";
$rows = db_query_all($query, array($domain, $this->id));
$cur_quota_total = divide_quota($rows[0]['sum']); # convert to MB
$query = "SELECT SUM(quota) FROM $table_mailbox WHERE domain = '" . escape_string($domain) . "'";
$query .= " AND username != '" . escape_string($this->id) . "'";
$result = db_query($query);
$row = db_row($result['result']);
$cur_quota_total = divide_quota($row[0]); # convert to MB
if (($quota + $cur_quota_total) > $limit['quota']) {
$rval = false;
} else {
@ -537,9 +518,9 @@ class MailboxHandler extends PFAHandler {
/**
* Get allowed maximum quota for a mailbox
*
* @param string $domain
* @param int $current_user_quota (in bytes)
* @return int allowed maximum quota (in MB)
* @param String $domain
* @param Integer $current_user_quota (in bytes)
* @return Integer allowed maximum quota (in MB)
*/
protected function allowed_quota($domain, $current_user_quota) {
if (!Config::bool('quota')) {
@ -567,14 +548,14 @@ class MailboxHandler extends PFAHandler {
/**
* Called after a mailbox has been created or edited in the DBMS.
*
* @return boolean success/failure status
* @return Boolean success/failure status
*/
protected function mailbox_post_script() {
if ($this->new) {
$cmd = Config::read_string('mailbox_postcreation_script');
$cmd = Config::read('mailbox_postcreation_script');
$warnmsg = Config::Lang('mailbox_postcreate_failed');
} else {
$cmd = Config::read_string('mailbox_postedit_script');
$cmd = Config::read('mailbox_postedit_script');
$warnmsg = Config::Lang('mailbox_postedit_failed');
}
@ -596,7 +577,7 @@ class MailboxHandler extends PFAHandler {
if ($quota <= 0) {
$quota = 0;
} # TODO: check if this is correct behaviour
$cmdarg4 = escapeshellarg("" . $quota);
$cmdarg4=escapeshellarg($quota);
$command= "$cmd $cmdarg1 $cmdarg2 $cmdarg3 $cmdarg4";
$retval=0;
$output=array();
@ -618,7 +599,7 @@ class MailboxHandler extends PFAHandler {
* also adds a detailed error message to $this->errormsg[]
*/
protected function mailbox_postdeletion() {
$cmd = Config::read_string('mailbox_postdeletion_script');
$cmd = Config::read('mailbox_postdeletion_script');
if (empty($cmd)) {
return true;
@ -663,7 +644,7 @@ class MailboxHandler extends PFAHandler {
* Doesn't clean up, if only some of the folders could be
* created.
*
* @return boolean TRUE if everything succeeds, FALSE on all errors
* @return Boolean TRUE if everything succeeds, FALSE on all errors
*/
protected function create_mailbox_subfolders() {
$create_mailbox_subdirs = Config::read('create_mailbox_subdirs');
@ -671,17 +652,12 @@ class MailboxHandler extends PFAHandler {
return true;
}
if (!function_exists('imap_open')) {
trigger_error('imap_open function not present; cannot create_mailbox_subdirs');
return false;
}
if (!is_array($create_mailbox_subdirs)) {
trigger_error('create_mailbox_subdirs must be an array', E_USER_ERROR);
return false;
}
$s_host = Config::read_string('create_mailbox_subdirs_host');
$s_host = Config::read('create_mailbox_subdirs_host');
if (empty($s_host)) {
trigger_error('An IMAP/POP server host ($CONF["create_mailbox_subdirs_host"]) must be configured, if sub-folders are to be created', E_USER_ERROR);
return false;
@ -701,7 +677,7 @@ class MailboxHandler extends PFAHandler {
}
$s_port='';
$create_mailbox_subdirs_hostport = Config::read_string('create_mailbox_subdirs_hostport');
$create_mailbox_subdirs_hostport = Config::read('create_mailbox_subdirs_hostport');
if (!empty($create_mailbox_subdirs_hostport)) {
$s_port = $create_mailbox_subdirs_hostport;
if (intval($s_port)!=$s_port) {
@ -721,7 +697,7 @@ class MailboxHandler extends PFAHandler {
return false;
}
$s_prefix = Config::read_string('create_mailbox_subdirs_prefix');
$s_prefix = Config::read('create_mailbox_subdirs_prefix');
foreach ($create_mailbox_subdirs as $f) {
$f='{'.$s_host.'}'.$s_prefix.$f;
$res=imap_createmailbox($i, $f);
@ -745,8 +721,8 @@ class MailboxHandler extends PFAHandler {
/**
* @return boolean true on success; false on failure
* @param string $new_password
* @param string $old_password
* @param string $new_passwords
* @param bool $match = true
*
* All passwords need to be plain text; they'll be hashed appropriately

@ -5,11 +5,6 @@ abstract class PFAHandler {
* public variables
*/
/**
* @var array
*/
public $result = array();
/**
* @var array of error messages - if a method returns false, you'll find the error message(s) here
*/
@ -33,18 +28,18 @@ abstract class PFAHandler {
* @var string (default) name of the database table
* (can be overridden by $CONF[database_prefix] and $CONF[database_tables][*] via table_by_key())
*/
protected $db_table = '';
protected $db_table = null;
/**
* @var string field containing the ID
*/
protected $id_field = '';
protected $id_field = null;
/**
* @var string field containing the label
* defaults to $id_field if not set
*/
protected $label_field;
protected $label_field = null;
/**
* field(s) to use in the ORDER BY clause
@ -52,7 +47,7 @@ abstract class PFAHandler {
* defaults to $id_field if not set
* @var string
*/
protected $order_by = '';
protected $order_by = null;
/**
* @var string
@ -97,10 +92,7 @@ abstract class PFAHandler {
# will be set to 0 if $admin_username is set and is not a superadmin
protected $is_superadmin = 1;
/**
* @var string $username
* if set, switch to user (non-admin) mode
*/
# if set, switch to user (non-admin) mode
protected $username = '';
# will be set to 0 if a user (non-admin) is logged in
@ -162,18 +154,12 @@ abstract class PFAHandler {
/**
* Constructor: fill $struct etc.
* @param int $new - 0 is edit mode, set to 1 to switch to create mode
* @param string $username - if an admin_username is specified, permissions will be restricted to the domains this admin may manage
* @param int $is_admin - 0 if logged in as user, 1 if logged in as admin or superadmin
* @param integer - 0 is edit mode, set to 1 to switch to create mode
* @param string - if an admin_username is specified, permissions will be restricted to the domains this admin may manage
* @param integer - 0 if logged in as user, 1 if logged in as admin or superadmin
*/
public function __construct($new = 0, $username = "", $is_admin = 1) {
# set label_field if not explicitely set
if (empty($this->id_field)) {
throw new \InvalidArgumentException("id_field must be defined");
}
if (empty($this->db_table)) {
throw new \InvalidArgumentException("db_table must be defined");
}
if (empty($this->label_field)) {
$this->label_field = $this->id_field;
}
@ -215,30 +201,24 @@ abstract class PFAHandler {
$this->initStruct();
/**
* @psalm-suppress InvalidArrayOffset
*/
if (!isset($this->struct['_can_edit'])) {
$this->struct['_can_edit'] = pacol(0, 0, 1, 'vnum', '' , '' , '', array(),
$this->struct['_can_edit'] = pacol(0, 0, 1, 'vnum', '' , '' , '', '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ '1 as _can_edit'
);
}
/**
* @psalm-suppress InvalidArrayOffset
*/
if (!isset($this->struct['_can_delete'])) {
$this->struct['_can_delete'] = pacol(0, 0, 1, 'vnum', '' , '' , '', array(),
$this->struct['_can_delete'] = pacol(0, 0, 1, 'vnum', '' , '' , '', '',
/*not_in_db*/ 0,
/*dont_write_to_db*/ 1,
/*select*/ '1 as _can_delete'
);
}
$struct_hook = Config::read_string($this->db_table . '_struct_hook');
if (!empty($struct_hook) && is_string($struct_hook) && $struct_hook != 'NO' && function_exists($struct_hook)) {
$struct_hook = Config::read($this->db_table . '_struct_hook');
if ($struct_hook != 'NO' && function_exists($struct_hook)) {
$this->struct = $struct_hook($this->struct);
}
@ -338,12 +318,6 @@ abstract class PFAHandler {
* @param string $id
*/
public function init($id) {
// postfix treats address lookups (aliases, mailboxes) as if they were lowercase.
// MySQL is normally case insenstive, PostgreSQL is case sensitive.
// http://www.postfix.org/aliases.5.html
// http://www.postfix.org/virtual.8.html
$this->id = strtolower($id);
$this->label = $this->id;
@ -418,7 +392,7 @@ abstract class PFAHandler {
* @return bool - true if all values are valid, otherwise false
* error messages (if any) are stored in $this->errormsg
*/
public function set(array $values) {
public function set($values) {
if (!$this->can_edit) {
$this->errormsg[] = Config::Lang_f('edit_not_allowed', $this->label);
return false;
@ -521,7 +495,7 @@ abstract class PFAHandler {
* can be used to update additional columns etc.
* hint: modify $this->values and $this->errormsg directly as needed
*/
protected function setmore(array $values) {
protected function setmore($values) {
# do nothing
}
@ -532,7 +506,7 @@ abstract class PFAHandler {
*
* calls $this->storemore() where additional things can be done
* @return bool - true if all values were stored in the database, otherwise false
* error messages (if any) are stored in $this->errormsg
* error messages (if any) are stored in $this->errormsg
*/
public function store() {
if ($this->values_valid == false) {
@ -571,13 +545,12 @@ abstract class PFAHandler {
} # remove 'dont_write_to_db' columns
}
try {
if ($this->new) {
$result = db_insert($this->db_table, $db_values, array('created', 'modified'),true);
} else {
$result = db_update($this->db_table, $this->id_field, $this->id, $db_values, array('created', 'modified'), true);
}
} catch (PDOException $e) {
if ($this->new) {
$result = db_insert($this->db_table, $db_values);
} else {
$result = db_update($this->db_table, $this->id_field, $this->id, $db_values);
}
if ($result != 1) {
$this->errormsg[] = Config::lang_f($this->msg['store_error'], $this->label);
return false;
}
@ -727,10 +700,10 @@ abstract class PFAHandler {
*
* calls $this->read_from_db_postprocess() to postprocess the result
*
* @param array|string $condition -see build_select_query() for details
* @param array $searchmode - see build_select_query() for details
* @param int $limit - maximum number of rows to return
* @param int $offset - number of first row to return
* @param array or string condition -see build_select_query() for details
* @param array searchmode - see build_select_query() for details
* @param integer limit - maximum number of rows to return
* @param integer offset - number of first row to return
* @return array - rows (as associative array, with the ID as key)
*/
protected function read_from_db($condition, $searchmode = array(), $limit=-1, $offset=-1) {
@ -744,23 +717,22 @@ abstract class PFAHandler {
$query .= " LIMIT $limit OFFSET $offset ";
}
$db_result = array();
$result = db_query($query);
$result = db_query_all($query);
foreach ($result as $row) {
$db_result[$row[$this->id_field]] = $row;
$db_result = array();
if ($result['rows'] != 0) {
while ($row = db_assoc($result['result'])) {
$db_result[$row[$this->id_field]] = $row;
}
}
return $this->read_from_db_postprocess($db_result);
$db_result = $this->read_from_db_postprocess($db_result);
return $db_result;
}
/**
* allows to postprocess the database result
* called by read_from_db()
* @param array $db_result
* @return array
*/
protected function read_from_db_postprocess($db_result) {
return $db_result;
@ -816,7 +788,15 @@ abstract class PFAHandler {
$real_condition = $condition;
}
$this->result = $this->read_from_db($real_condition, $searchmode, $limit, $offset);
$result = $this->read_from_db($real_condition, $searchmode, $limit, $offset);
if (!is_array($result)) {
error_log('getList: read_from_db didn\'t return an array. table: ' . $this->db_table . ' - condition: $condition - limit: $limit - offset: $offset');
error_log('getList: This is most probably caused by read_from_db_postprocess()');
die('Unexpected error while reading from database! (Please check the error log for details, and open a bugreport)');
}
$this->result = $result;
return true;
}
@ -828,23 +808,22 @@ abstract class PFAHandler {
* @return boolean true on successful login (i.e. password matches etc)
*/
public function login($username, $password) {
$username = escape_string($username);
$table = table_by_key($this->db_table);
$active = db_get_boolean(true);
$query = "SELECT password FROM $table WHERE {$this->id_field} = :username AND active = :active";
$values = array('username' => $username, 'active' => $active);
$result = db_query_all($query,$values);
if (sizeof($result) == 1) {
$row = $result[0];
$query = "SELECT password FROM $table WHERE " . $this->id_field . "='$username' AND active='$active'";
$result = db_query($query);
if ($result['rows'] == 1) {
$row = db_assoc($result['result']);
$crypt_password = pacrypt($password, $row['password']);
return hash_equals($row['password'], $crypt_password);
if ($row['password'] == $crypt_password) {
return true;
}
}
// try and be near constant time regardless of whether the db user exists or not
$x = pacrypt('abc', 'def');
return hash_equals('not', 'comparable');
return false;
}
/**
@ -874,18 +853,19 @@ abstract class PFAHandler {
* @return boolean true on success (i.e. code matches etc)
*/
public function checkPasswordRecoveryCode($username, $token) {
$username = escape_string($username);
$table = table_by_key($this->db_table);
$active = db_get_boolean(true);
$now = date('Y-m-d H:i:s');
$query = "SELECT token FROM $table WHERE {$this->id_field} = :username AND token <> '' AND active = :active AND token_validity > :now ";
$values = array('username' => $username, 'active' => $active, 'now' => $now);
// Use PHP date for token check; this avoids a timezone issue between MySQL and PHP producing different dates.
$now = escape_string(date('Y-m-d H:i:s'));
$result = db_query_all($query, $values);
if (sizeof($result) == 1) {
$row = $result[0];
$query = "SELECT token FROM $table WHERE " . $this->id_field . "='$username' AND token <> '' AND active='$active' AND '$now' < token_validity";
$result = db_query($query);
if ($result['rows'] == 1) {
$row = db_assoc($result['result']);
$crypt_token = pacrypt($token, $row['token']);
if ($row['token'] == $crypt_token) {
@ -915,7 +895,7 @@ abstract class PFAHandler {
}
/**
* @return mixed return value of previously called method
* @return return value of previously called method
*/
public function result() {
return $this->result;

@ -36,8 +36,7 @@ class Shell {
* @var object
* @access public
*/
public $Dispatch;
public $Dispatch = null;
/**
* If true, the script will ask for permission to perform actions.
*
@ -59,45 +58,35 @@ class Shell {
* @access public
*/
public $args = array();
/**
* The file name of the shell that was invoked.
*
* @var string
* @access public
*/
public $shell;
public $shell = null;
/**
* The class name of the shell that was invoked.
*
* @var string
* @access public
*/
public $className;
public $className = null;
/**
* The command called if public methods are available.
*
* @var string
* @access public
*/
public $command;
public $command = null;
/**
* The name of the shell in camelized.
*
* @var string
* @access public
*/
public $name;
public $name = null;
/**
* @param string
*/
public $handler_to_use;
public $new;
/**
* Constructs this Shell instance.
*
@ -149,9 +138,10 @@ class Shell {
* @param string $prompt Prompt text.
* @param mixed $options Array or string of options.
* @param string $default Default input value.
* @return string either the default value, or the user-provided input.
* @return Either the default value, or the user-provided input.
* @access public
*/
public function in($prompt, $options = null, $default = '') {
public function in($prompt, $options = null, $default = null) {
if (!$this->interactive) {
return $default;
}
@ -181,8 +171,9 @@ class Shell {
/**
* Outputs to the stdout filehandle.
*
* @param string|array $string String to output.
* @param string $string String to output.
* @param boolean $newline If true, the outputs gets an added newline.
* @access public
*/
public function out($string, $newline = true) {
if (is_array($string)) {
@ -197,7 +188,7 @@ class Shell {
/**
* Outputs to the stderr filehandle.
*
* @param string|array $string Error text to output.
* @param string $string Error text to output.
* @access public
*/
public function err($string) {

@ -187,33 +187,30 @@ class VacationHandler extends PFAHandler {
*/
public function get_details() {
$table_vacation = table_by_key('vacation');
$E_username = escape_string($this->username);
$sql = "SELECT * FROM $table_vacation WHERE email = :username";
$result = db_query_all($sql, array('username' => $this->username));
if (sizeof($result) != 1) {
$sql = "SELECT * FROM $table_vacation WHERE email = '$E_username'";
$result = db_query($sql);
if ($result['rows'] != 1) {
return false;
}
$row = $result[0];
if (!is_array($row)) {
return false;
}
$row = db_assoc($result['result']);
$boolean = ($row['active'] == db_get_boolean(true));
# TODO: only return true and store the db result array in $this->whatever for consistency with the other classes
return array(
'subject' => isset($row['subject']) ? $row['subject'] : null,
'body' => isset($row['body']) ? $row['body'] : null,
'active' => $boolean,
'interval_time' => isset($row['interval_time']) ? $row['interval_time'] : null,
'activeFrom' => isset($row['activefrom']) ? $row['activefrom'] : null,
'activeUntil' => isset($row['activeuntil']) ? $row['activeuntil'] : null
'subject' => $row['subject'],
'body' => $row['body'],
'active' => $boolean ,
'interval_time' => $row['interval_time'],
'activeFrom' => $row['activefrom'],
'activeUntil' => $row['activeuntil'],
);
}
/**
* @param string $subject
* @param string $body
* @param int $interval_time
* @param string $interval_time
* @param string $activeFrom - something strtotime understands
* @param string $activeUntil - something strtotime understands
* @return boolean
@ -243,8 +240,8 @@ class VacationHandler extends PFAHandler {
// is there an entry in the vacaton table for the user, or do we need to insert?
$table_vacation = table_by_key('vacation');
$result = db_query_one("SELECT * FROM $table_vacation WHERE email = ?", array($this->username));
if (!empty($result)) {
$result = db_query("SELECT * FROM $table_vacation WHERE email = '$E_username'");
if ($result['rows'] == 1) {
$result = db_update('vacation', 'email', $this->username, $vacation_data);
} else {
$result = db_insert('vacation', $vacation_data);

@ -1,3 +0,0 @@
ALTER TABLE mailbox ADD COLUMN password_expiry TIMESTAMP DEFAULT now() not null;
UPDATE mailbox set password_expiry = now() + interval 90 day;
ALTER TABLE domain ADD COLUMN password_expiry int DEFAULT 0;

@ -1,6 +1,7 @@
<phpunit
bootstrap="tests/bootstrap.php"
>
<phpunit>
<php>
<const name="PHPUNIT_TEST" value="yes"/>
</php>
<testsuites>
<testsuite name="default">
<directory>./tests</directory>
@ -8,24 +9,26 @@
</testsuites>
<php>
<const name="PHPUNIT_TEST" value="true" />
<const name="PHP_UNIT_TEST" value="true" />
</php>
<logging>
<log type="coverage-html" target="./coverage" lowUpperBound="35" highLowerBound="70"/>
<log type="coverage-html" target="./coverage" charset="UTF-8" highlight="false" lowUpperBound="35" highLowerBound="70"/>
</logging>
<filter>
<whitelist>
<directory>./model/</directory>
<directory>./public/</directory>
<directory>./functions.inc.php/</directory>
<exclude>
<directory>./tests/</directory>
<directory>./vendor/</directory>
<directory>./lib/</directory>
</exclude>
<directory>./model</directory>
<directory>./public</directory>
<file>./functions.inc.php</file>
</whitelist>
<blacklist>
<!-- no point in doing coverage for the tests themselves -->
<directory>./tests/</directory>
<!-- we have no control over code from these directories -->
<directory>./vendor/</directory>
<directory>./lib/</directory>
</blacklist>
</filter>
</phpunit>

@ -1,3 +0,0 @@
[client]
user=postfix_read_write_account
password=strong_password

@ -1,54 +0,0 @@
<?xml version="1.0"?>
<psalm
totallyTyped="false"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://getpsalm.org/schema/config"
xsi:schemaLocation="https://getpsalm.org/schema/config file:///home/david/src/postfixadmin-stuff/postfixadmin.trunk/vendor/vimeo/psalm/config.xsd"
>
<projectFiles>
<directory name="." />
<ignoreFiles>
<directory name="vendor" />
<directory name="tests" />
<directory name="templates_c" />
<directory name="lib/smarty" />
<file name="lib/block_random_int.php" />
<directory name="ADDITIONS/" />
</ignoreFiles>
</projectFiles>
<issueHandlers>
<PossiblyUndefinedGlobalVariable>
<errorLevel type="suppress">
<file name="config.inc.php" />
<file name="config.local.php" />
</errorLevel>
</PossiblyUndefinedGlobalVariable>
<InvalidGlobal>
<errorLevel type="suppress">
<file name="config.inc.php" />
<file name="common.php" />
</errorLevel>
</InvalidGlobal>
<LessSpecificReturnType errorLevel="info" />
<!-- level 3 issues - slightly lazy code writing, but provably low false-negatives -->
<MissingClosureReturnType errorLevel="info" />
<MissingReturnType errorLevel="info" />
<MissingPropertyType errorLevel="info" />
<PropertyNotSetInConstructor errorLevel="info" />
<MissingConstructor errorLevel="info" />
<MissingClosureParamType errorLevel="info" />
<MissingParamType errorLevel="info" />
<RedundantConditionGivenDocblockType errorLevel="info" />
<UnresolvableInclude errorLevel="info" />
<RawObjectIteration errorLevel="info" />
<InvalidStringClass errorLevel="info" />
</issueHandlers>
</psalm>

@ -65,11 +65,8 @@ if ($_SERVER['REQUEST_METHOD'] == "GET") {
umask(077);
$path = (ini_get('upload_tmp_dir') != '') ? ini_get('upload_tmp_dir') : '/tmp';
date_default_timezone_set(@date_default_timezone_get()); # Suppress date.timezone warnings
// Should use mktemp() or similar.
$backup = tempnam($path, 'postfixadmin-' . date('Ymd'));
$filename = basename($backup) . '.sql';
$filename = "postfixadmin-" . date("Ymd") . "-" . getmypid() . ".sql";
$backup = $path . DIRECTORY_SEPARATOR . $filename;
$header = "#\n# Postfix Admin $version\n# Date: " . date("D M j G:i:s T Y") . "\n#\n";
@ -97,37 +94,36 @@ if ($_SERVER['REQUEST_METHOD'] == "GET") {
);
for ($i = 0 ; $i < sizeof($tables) ; ++$i) {
$result = db_query_all("SHOW CREATE TABLE " . table_by_key($tables[$i]));
foreach ($result as $row) {
fwrite($fh, array_pop($row));
$result = db_query("SHOW CREATE TABLE " . table_by_key($tables[$i]));
if ($result['rows'] > 0) {
while ($row = db_array($result['result'])) {
fwrite($fh, "$row[1];\n\n");
}
}
}
for ($i = 0 ; $i < sizeof($tables) ; ++$i) {
// may be a large resultset?
$pdo = db_connect();
$stmt = $pdo->prepare('SELECT * FROM ' . table_by_key($tables[$i]));
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$fields = array_keys($row);
$values = array_values($row);
$values = array_map(function ($str) {
return escape_string($str);
}, $values);
$result = db_query("SELECT * FROM " . table_by_key($tables[$i]));
if ($result['rows'] > 0) {
while ($row = db_assoc($result['result'])) {
$fields = array_keys($row);
$values = array_values($row);
$values = array_map('escape_string', $values);
fwrite($fh, "INSERT INTO ". $tables[$i] . " (". implode(',', $fields) . ") VALUES ('" . implode('\',\'', $values) . "');\n");
$fields = "";
$values = "";
fwrite($fh, "INSERT INTO ". $tables[$i] . " (". implode(',', $fields) . ") VALUES ('" . implode('\',\'', $values) . "');\n");
$fields = "";
$values = "";
}
}
}
}
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($backup));
header("Content-Length: " . filesize("$backup"));
header("Content-Description: Postfix Admin");
$download_backup = fopen($backup, "r");
unlink($backup);
$download_backup = fopen("$backup", "r");
unlink("$backup");
fpassthru($download_backup);
}
/* vim: set expandtab softtabstop=3 tabstop=3 shiftwidth=3: */

@ -63,8 +63,12 @@ if ($_SERVER['REQUEST_METHOD'] == "POST") {
if (intval(safepost('mailboxes_only')) == 0) {
$q .= " UNION SELECT goto FROM $table_alias WHERE active='" . db_get_boolean(true) . "' AND ".db_in_clause("domain", $wanted_domains)."AND goto NOT IN ($q)";
}
$result = db_query_all($q);
$recipients = array_column($result, 'username');
$result = db_query($q);
if ($result['rows'] > 0) {
while ($row = db_assoc($result['result'])) {
$recipients[] = $row['username'];
}
}
$recipients = array_unique($recipients);
@ -90,7 +94,7 @@ if ($_SERVER['REQUEST_METHOD'] == "POST") {
$fHeaders .= $b_message;
if (!smtp_mail($fTo, $smtp_from_email, $fHeaders, smtp_get_admin_password())) {
if (!smtp_mail($fTo, $smtp_from_email, $fHeaders)) {
flash_error(Config::lang_f('pSendmail_result_error', $fTo));
} else {
flash_info(Config::lang_f('pSendmail_result_success', $fTo));

File diff suppressed because one or more lines are too long

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save