Import turba from CVS HEAD.
authorMichael M Slusarz <slusarz@curecanti.org>
Tue, 14 Jul 2009 05:13:35 +0000 (23:13 -0600)
committerMichael M Slusarz <slusarz@curecanti.org>
Tue, 14 Jul 2009 17:20:07 +0000 (11:20 -0600)
284 files changed:
.gitignore
turba/LICENSE [new file with mode: 0644]
turba/README [new file with mode: 0644]
turba/add.php [new file with mode: 0644]
turba/addressbooks/create.php [new file with mode: 0644]
turba/addressbooks/delete.php [new file with mode: 0644]
turba/addressbooks/edit.php [new file with mode: 0644]
turba/addressbooks/index.php [new file with mode: 0644]
turba/browse.php [new file with mode: 0644]
turba/config/.htaccess [new file with mode: 0644]
turba/config/attributes.php.dist [new file with mode: 0644]
turba/config/conf.xml [new file with mode: 0644]
turba/config/hooks.php.dist [new file with mode: 0644]
turba/config/menu.php.dist [new file with mode: 0644]
turba/config/mime_drivers.php.dist [new file with mode: 0644]
turba/config/prefs.php.dist [new file with mode: 0644]
turba/config/sources.php.dist [new file with mode: 0644]
turba/contact.php [new file with mode: 0644]
turba/data.php [new file with mode: 0644]
turba/delete.php [new file with mode: 0644]
turba/deletefile.php [new file with mode: 0644]
turba/docs/CHANGES [new file with mode: 0644]
turba/docs/CREDITS [new file with mode: 0644]
turba/docs/INSTALL [new file with mode: 0644]
turba/docs/LDAP [new file with mode: 0644]
turba/docs/RELEASE_NOTES [new file with mode: 0644]
turba/docs/UPGRADING [new file with mode: 0644]
turba/docs/vcf/README [new file with mode: 0644]
turba/docs/vcf/brad.vcf [new file with mode: 0644]
turba/docs/vcf/dimitris.vcf [new file with mode: 0644]
turba/docs/vcf/dwalt.vcf [new file with mode: 0644]
turba/docs/vcf/foo.vcf [new file with mode: 0644]
turba/docs/vcf/larry.vcf [new file with mode: 0644]
turba/docs/vcf/multiple.vcf [new file with mode: 0644]
turba/docs/vcf/palm.vcf [new file with mode: 0644]
turba/docs/vcf/sfg.vcf [new file with mode: 0644]
turba/docs/vcf/test.vcf [new file with mode: 0644]
turba/edit.php [new file with mode: 0644]
turba/index.php [new file with mode: 0644]
turba/js/src/contact_tabs.js [new file with mode: 0644]
turba/lib/.htaccess [new file with mode: 0644]
turba/lib/Block/minisearch.php [new file with mode: 0644]
turba/lib/Block/tree_menu.php [new file with mode: 0644]
turba/lib/Data/ldif.php [new file with mode: 0644]
turba/lib/Driver.php [new file with mode: 0644]
turba/lib/Driver/Facebook.php [new file with mode: 0644]
turba/lib/Driver/Favourites.php [new file with mode: 0644]
turba/lib/Driver/Group.php [new file with mode: 0644]
turba/lib/Driver/Imsp.php [new file with mode: 0644]
turba/lib/Driver/Kolab.php [new file with mode: 0644]
turba/lib/Driver/Ldap.php [new file with mode: 0644]
turba/lib/Driver/Prefs.php [new file with mode: 0644]
turba/lib/Driver/Share.php [new file with mode: 0644]
turba/lib/Driver/Sql.php [new file with mode: 0644]
turba/lib/Driver/Vbook.php [new file with mode: 0644]
turba/lib/Forms/AddContact.php [new file with mode: 0644]
turba/lib/Forms/Contact.php [new file with mode: 0644]
turba/lib/Forms/CreateAddressBook.php [new file with mode: 0644]
turba/lib/Forms/DeleteAddressBook.php [new file with mode: 0644]
turba/lib/Forms/EditAddressBook.php [new file with mode: 0644]
turba/lib/Forms/EditContact.php [new file with mode: 0644]
turba/lib/List.php [new file with mode: 0644]
turba/lib/ListView.php [new file with mode: 0644]
turba/lib/LoginTasks/Task/UpgradeLists.php [new file with mode: 0644]
turba/lib/LoginTasks/Task/UpgradePrefs.php [new file with mode: 0644]
turba/lib/Object.php [new file with mode: 0644]
turba/lib/Object/Group.php [new file with mode: 0644]
turba/lib/Turba.php [new file with mode: 0644]
turba/lib/View/Browse.php [new file with mode: 0644]
turba/lib/View/Contact.php [new file with mode: 0644]
turba/lib/View/DeleteContact.php [new file with mode: 0644]
turba/lib/View/EditContact.php [new file with mode: 0644]
turba/lib/api.php [new file with mode: 0644]
turba/lib/base.load.php [new file with mode: 0644]
turba/lib/base.php [new file with mode: 0644]
turba/lib/prefs.php [new file with mode: 0644]
turba/lib/tests/ApiTest.php [new file with mode: 0644]
turba/lib/tests/BrowsePageTest.php [new file with mode: 0644]
turba/lib/tests/DriverTest.php [new file with mode: 0644]
turba/lib/tests/GroupTest.php [new file with mode: 0644]
turba/lib/tests/KolabTest.php [new file with mode: 0644]
turba/lib/tests/KolabTestBase.php [new file with mode: 0644]
turba/lib/tests/ListTest.php [new file with mode: 0644]
turba/lib/tests/ListViewTest.php [new file with mode: 0644]
turba/lib/tests/TestBase.php [new file with mode: 0644]
turba/lib/tests/ViewBrowseTest.php [new file with mode: 0644]
turba/lib/tests/az.png [new file with mode: 0644]
turba/lib/tests/bug_6518.phpt [new file with mode: 0644]
turba/lib/tests/import.ldif [new file with mode: 0644]
turba/lib/tests/importCRLF.ldif [new file with mode: 0644]
turba/lib/tests/ldif_exportFile.phpt [new file with mode: 0644]
turba/lib/tests/ldif_importFile.phpt [new file with mode: 0644]
turba/lib/tests/ldif_importFileCRLF.phpt [new file with mode: 0644]
turba/lib/tests/tohash.phpt [new file with mode: 0644]
turba/lib/tests/tovcard.phpt [new file with mode: 0644]
turba/lib/version.php [new file with mode: 0644]
turba/locale/.htaccess [new file with mode: 0644]
turba/locale/ar_SY/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/bg_BG/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/ca_ES/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/ca_ES/help.xml [new file with mode: 0755]
turba/locale/cs_CZ/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/da_DK/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/de_DE/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/de_DE/help.xml [new file with mode: 0644]
turba/locale/el_GR/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/en_US/help.xml [new file with mode: 0644]
turba/locale/es_ES/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/es_ES/help.xml [new file with mode: 0644]
turba/locale/et_EE/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/eu_ES/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/eu_ES/help.xml [new file with mode: 0644]
turba/locale/fa_IR/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/fa_IR/help.xml [new file with mode: 0644]
turba/locale/fi_FI/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/fi_FI/help.xml [new file with mode: 0644]
turba/locale/fr_FR/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/fr_FR/help.xml [new file with mode: 0644]
turba/locale/gl_ES/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/hu_HU/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/is_IS/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/it_IT/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/ja_JP/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/ko_KR/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/lt_LT/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/lv_LV/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/mk_MK/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/nb_NO/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/nl_NL/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/nn_NO/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/pl_PL/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/pt_BR/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/pt_BR/help.xml [new file with mode: 0644]
turba/locale/pt_PT/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/pt_PT/help.xml [new file with mode: 0644]
turba/locale/ro_RO/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/ru_RU/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/sk_SK/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/sk_SK/help.xml [new file with mode: 0644]
turba/locale/sl_SI/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/sv_SE/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/tr_TR/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/tr_TR/help.xml [new file with mode: 0644]
turba/locale/uk_UA/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/zh_CN/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/locale/zh_TW/LC_MESSAGES/turba.mo [new file with mode: 0644]
turba/minisearch.php [new file with mode: 0644]
turba/po/.htaccess [new file with mode: 0644]
turba/po/README [new file with mode: 0644]
turba/po/ar_SY.po [new file with mode: 0644]
turba/po/bg_BG.po [new file with mode: 0644]
turba/po/ca_ES.po [new file with mode: 0644]
turba/po/cs_CZ.po [new file with mode: 0644]
turba/po/da_DK.po [new file with mode: 0644]
turba/po/de_DE.po [new file with mode: 0644]
turba/po/el_GR.po [new file with mode: 0644]
turba/po/es_ES.po [new file with mode: 0644]
turba/po/et_EE.po [new file with mode: 0644]
turba/po/eu_ES.po [new file with mode: 0644]
turba/po/fa_IR.po [new file with mode: 0644]
turba/po/fi_FI.po [new file with mode: 0644]
turba/po/fr_FR.po [new file with mode: 0644]
turba/po/gl_ES.po [new file with mode: 0644]
turba/po/hu_HU.po [new file with mode: 0644]
turba/po/is_IS.po [new file with mode: 0644]
turba/po/it_IT.po [new file with mode: 0644]
turba/po/ja_JP.po [new file with mode: 0644]
turba/po/ko_KR.po [new file with mode: 0644]
turba/po/lt_LT.po [new file with mode: 0644]
turba/po/lv_LV.po [new file with mode: 0644]
turba/po/mk_MK.po [new file with mode: 0644]
turba/po/nb_NO.po [new file with mode: 0644]
turba/po/nl_NL.po [new file with mode: 0644]
turba/po/nn_NO.po [new file with mode: 0644]
turba/po/pl_PL.po [new file with mode: 0644]
turba/po/pt_BR.po [new file with mode: 0644]
turba/po/pt_PT.po [new file with mode: 0644]
turba/po/ro_RO.po [new file with mode: 0644]
turba/po/ru_RU.po [new file with mode: 0644]
turba/po/sk_SK.po [new file with mode: 0644]
turba/po/sl_SI.po [new file with mode: 0644]
turba/po/sv_SE.po [new file with mode: 0644]
turba/po/tr_TR.po [new file with mode: 0644]
turba/po/turba.pot [new file with mode: 0644]
turba/po/uk_UA.po [new file with mode: 0644]
turba/po/zh_CN.po [new file with mode: 0644]
turba/po/zh_TW.po [new file with mode: 0644]
turba/scripts/.htaccess [new file with mode: 0644]
turba/scripts/Turba.reg [new file with mode: 0644]
turba/scripts/import_squirrelmail_file_abook.php [new file with mode: 0755]
turba/scripts/import_squirrelmail_sql_abook.php [new file with mode: 0755]
turba/scripts/import_vcards.php [new file with mode: 0755]
turba/scripts/ldap/addou [new file with mode: 0644]
turba/scripts/ldap/addou.pl [new file with mode: 0644]
turba/scripts/ldap/rfc2739.schema [new file with mode: 0644]
turba/scripts/sql/test.xml [new file with mode: 0644]
turba/scripts/sql/turba.mssql.sql [new file with mode: 0644]
turba/scripts/sql/turba.oci8.sql [new file with mode: 0644]
turba/scripts/sql/turba.pgsql.sql [new file with mode: 0644]
turba/scripts/sql/turba.sql [new file with mode: 0644]
turba/scripts/sql/turba.xml [new file with mode: 0644]
turba/scripts/upgrades/1.1_to_1.2.sql [new file with mode: 0644]
turba/scripts/upgrades/1.2_to_2.0.oci8.sql [new file with mode: 0644]
turba/scripts/upgrades/1.2_to_2.0.sql [new file with mode: 0644]
turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.mssql.sql [new file with mode: 0644]
turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.oci8.sql [new file with mode: 0644]
turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.pgsql.sql [new file with mode: 0644]
turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.sql [new file with mode: 0644]
turba/scripts/upgrades/2.1_to_2.2_sql_schema.php [new file with mode: 0755]
turba/scripts/upgrades/2.2.1_to_2.3.pgsql.sql [new file with mode: 0644]
turba/scripts/upgrades/2.2.1_to_2.3.sql [new file with mode: 0644]
turba/scripts/upgrades/2005-09-23_flat_comments.php [new file with mode: 0755]
turba/scripts/upgrades/2007-06-17_delete_old_vbooks.php [new file with mode: 0755]
turba/scripts/upgrades/2007-06-17_flatten_shares.php [new file with mode: 0755]
turba/scripts/upgrades/2007-08-05_remove_lastname_null_constraint.sql [new file with mode: 0644]
turba/scripts/upgrades/2007-11-17_sql_schema.sql [new file with mode: 0644]
turba/scripts/upgrades/2008-06-17_fix_varchar_lengths.sql [new file with mode: 0644]
turba/scripts/upgrades/2008-09-23_fix_group_uid.sql [new file with mode: 0644]
turba/scripts/upgrades/convert_datatree_shares_to_sql.php [new file with mode: 0755]
turba/scripts/upgrades/public_to_horde_share.php [new file with mode: 0755]
turba/search.php [new file with mode: 0644]
turba/templates/.htaccess [new file with mode: 0644]
turba/templates/addressbook_list.php [new file with mode: 0644]
turba/templates/block/minisearch.inc [new file with mode: 0644]
turba/templates/browse/actions.inc [new file with mode: 0644]
turba/templates/browse/column_footers.inc [new file with mode: 0644]
turba/templates/browse/column_headers.inc [new file with mode: 0644]
turba/templates/browse/header.inc [new file with mode: 0644]
turba/templates/browse/javascript.inc [new file with mode: 0644]
turba/templates/browse/row.inc [new file with mode: 0644]
turba/templates/browse/search.inc [new file with mode: 0644]
turba/templates/browse/search_criteria.inc [new file with mode: 0644]
turba/templates/browse/search_vbook.inc [new file with mode: 0644]
turba/templates/common-header.inc [new file with mode: 0644]
turba/templates/data/export.inc [new file with mode: 0644]
turba/templates/data/import.inc [new file with mode: 0644]
turba/templates/list/alphaPager.inc [new file with mode: 0644]
turba/templates/list/numPager.inc [new file with mode: 0644]
turba/templates/menu.inc [new file with mode: 0644]
turba/templates/prefs/addressbookselect.inc [new file with mode: 0644]
turba/templates/prefs/columnselect.inc [new file with mode: 0644]
turba/templates/prefs/imsp_opt.inc [new file with mode: 0644]
turba/test.php [new file with mode: 0644]
turba/themes/bluewhite/screen.css [new file with mode: 0644]
turba/themes/graphics/az.png [new file with mode: 0644]
turba/themes/graphics/az_secondary.png [new file with mode: 0644]
turba/themes/graphics/contact.png [new file with mode: 0644]
turba/themes/graphics/favicon.ico [new file with mode: 0644]
turba/themes/graphics/group.png [new file with mode: 0644]
turba/themes/graphics/menu/browse.png [new file with mode: 0644]
turba/themes/graphics/menu/new.png [new file with mode: 0644]
turba/themes/graphics/new.png [new file with mode: 0644]
turba/themes/graphics/redbox_spinner.gif [new file with mode: 0644]
turba/themes/graphics/search.png [new file with mode: 0644]
turba/themes/graphics/turba.png [new file with mode: 0644]
turba/themes/graphics/za.png [new file with mode: 0644]
turba/themes/graphics/za_secondary.png [new file with mode: 0644]
turba/themes/ideas/screen.css [new file with mode: 0644]
turba/themes/screen.css [new file with mode: 0644]
turba/themes/silver/graphics/az.png [new file with mode: 0644]
turba/themes/silver/graphics/az_secondary.png [new file with mode: 0644]
turba/themes/silver/graphics/contact.png [new file with mode: 0644]
turba/themes/silver/graphics/favicon.ico [new file with mode: 0644]
turba/themes/silver/graphics/group.png [new file with mode: 0644]
turba/themes/silver/graphics/menu/browse.png [new file with mode: 0644]
turba/themes/silver/graphics/menu/new.png [new file with mode: 0644]
turba/themes/silver/graphics/new.png [new file with mode: 0644]
turba/themes/silver/graphics/turba.png [new file with mode: 0644]
turba/themes/silver/graphics/za.png [new file with mode: 0644]
turba/themes/silver/graphics/za_secondary.png [new file with mode: 0644]
turba/themes/silver/screen.css [new file with mode: 0644]
turba/themes/silver/themed_graphics [new file with mode: 0644]
turba/themes/tango-blue/graphics/az_secondary.png [new file with mode: 0644]
turba/themes/tango-blue/graphics/contact.png [new file with mode: 0644]
turba/themes/tango-blue/graphics/favicon.ico [new file with mode: 0644]
turba/themes/tango-blue/graphics/group.png [new file with mode: 0644]
turba/themes/tango-blue/graphics/menu/browse.png [new file with mode: 0644]
turba/themes/tango-blue/graphics/menu/new.png [new file with mode: 0644]
turba/themes/tango-blue/graphics/new.png [new file with mode: 0644]
turba/themes/tango-blue/graphics/turba.png [new file with mode: 0644]
turba/themes/tango-blue/graphics/za_secondary.png [new file with mode: 0644]
turba/themes/tango-blue/themed_graphics [new file with mode: 0644]
turba/vcard.php [new file with mode: 0644]
turba/view.php [new file with mode: 0644]

index c143c63..1870c32 100644 (file)
@@ -30,3 +30,4 @@ imp/config/*.txt
 ingo/config/*.php
 jeta/config/*.php
 kronolith/config/*.php
+turba/config/*.php
diff --git a/turba/LICENSE b/turba/LICENSE
new file mode 100644 (file)
index 0000000..61877b5
--- /dev/null
@@ -0,0 +1,48 @@
+Version 1.0
+
+Copyright 2000-2009 The Horde Project. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions and the following disclaimer in the
+documentation and/or other materials provided with the distribution.
+
+3. The end-user documentation included with the redistribution, if
+any, must include the following acknowledgment:
+
+   "This product includes software developed by the Horde Project
+    (http://www.horde.org/)."
+
+Alternately, this acknowledgment may appear in the software itself, if
+and wherever such third-party acknowledgments normally appear.
+
+4. The names "Turba", "Horde" and "The Horde Project" must not be used
+to endorse or promote products derived from this software without
+prior written permission. For written permission, please contact
+core@horde.org.
+
+5. Products derived from this software may not be called "Turba" or
+"Horde", nor may "Turba" or "Horde" appear in their name, without
+prior written permission of the Horde Project.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESSED OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE HORDE PROJECT OR ITS CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
+OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+This software consists of voluntary contributions made by many
+individuals on behalf of the Horde Project. For more information on
+the Horde Project, please see <http://www.horde.org/>.
diff --git a/turba/README b/turba/README
new file mode 100644 (file)
index 0000000..244f1f8
--- /dev/null
@@ -0,0 +1,89 @@
+What is Turba?
+==============
+
+:Contact: turba@lists.horde.org
+
+.. contents:: Contents
+.. section-numbering::
+
+Turba is the Horde contact management application, designed to be integrated
+with other Horde applications to provide a unified interface to contact
+management throughout the Horde suite. It supports SQL, LDAP, Kolab, and IMSP
+address books.
+
+This software is OSI Certified Open Source Software.  OSI Certified is a
+certification mark of the `Open Source Initiative`_.
+
+.. _`Open Source Initiative`: http://www.opensource.org/
+
+
+Obtaining Turba
+---------------
+
+Further information on Turba and the latest version can be obtained at
+
+  http://www.horde.org/turba/
+
+
+Documentation
+-------------
+
+The following documentation is available in the Turba distribution:
+
+:README_:            This file
+:LICENSE_:           Copyright and license information
+:`docs/CHANGES`_:    Changes by release
+:`docs/CREDITS`_:    Project developers
+:`docs/INSTALL`_:    Installation instructions and notes
+:`docs/LDAP`_:       LDAP personal addressbook HOWTO
+:`docs/TODO`_:       Development TODO list
+:`docs/UPGRADING`_:  Pointers on upgrading from previous Skeleton versions
+
+
+Installation
+------------
+
+Instructions for installing Turba can be found in the file INSTALL_ in the
+``docs/`` directory of the Turba distribution.
+
+
+Assistance
+----------
+
+If you encounter problems with Turba, help is available!
+
+The Horde Frequently Asked Questions List (FAQ), available on the Web at
+
+  http://www.horde.org/faq/
+
+The Horde Project runs a number of mailing lists, for individual applications
+and for issues relating to the project as a whole.  Information, archives, and
+subscription information can be found at
+
+  http://www.horde.org/mail/
+
+Lastly, Horde developers, contributors and users also make occasional
+appearances on IRC, on the channel #horde on the freenode Network
+(irc.freenode.net).
+
+
+Licensing
+---------
+
+For licensing and copyright information, please see the file LICENSE_ in the
+Turba distribution.
+
+Thanks,
+
+The Turba team
+
+
+.. _README: ?f=README.html
+.. _LICENSE: http://www.horde.org/licenses/asl.php
+.. _docs/CHANGES: ?f=CHANGES.html
+.. _docs/CREDITS: ?f=CREDITS.html
+.. _INSTALL:
+.. _docs/INSTALL: ?f=INSTALL.html
+.. _docs/LDAP: ?f=LDAP.html
+.. _docs/TODO: ?f=TODO.html
+.. _docs/UPGRADING: ?f=UPGRADING.html
diff --git a/turba/add.php b/turba/add.php
new file mode 100644 (file)
index 0000000..d3737f3
--- /dev/null
@@ -0,0 +1,73 @@
+<?php
+/**
+ * The Turba script to add a new entry into an address book.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you did
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+require_once TURBA_BASE . '/lib/Forms/AddContact.php';
+
+/* Setup some variables. */
+$contact = null;
+$vars = Horde_Variables::getDefaultVariables();
+if (count($addSources) == 1) {
+    $vars->set('source', key($addSources));
+}
+$source = $vars->get('source');
+$url = $vars->get('url');
+
+/* Exit with an error message if there are no sources to add to. */
+if (!$addSources) {
+    $notification->push(_("There are no writeable address books. None of the available address books are configured to allow you to add new entries to them. If you believe this is an error, please contact your system administrator."), 'horde.error');
+    $url = $url
+        ? Horde::url($url, true)
+        : Horde::applicationUrl('index.php', true);
+    header('Location: ' . $url);
+    exit;
+}
+
+/* A source has been selected, connect and set up the fields. */
+if ($source) {
+    $driver = Turba_Driver::singleton($source);
+    if ($driver instanceof PEAR_Error) {
+        $notification->push(sprintf(_("Failed to access the address book: %s"), $driver->getMessage()), 'horde.error');
+    } else {
+        /* Check permissions. */
+        $max_contacts = Turba::getExtendedPermission($driver, 'max_contacts');
+        if ($max_contacts !== true &&
+            $max_contacts <= $driver->count()) {
+            $message = @htmlspecialchars(sprintf(_("You are not allowed to create more than %d contacts in \"%s\"."), $max_contacts, $cfgSources[$source]['title']), ENT_COMPAT, Horde_Nls::getCharset());
+            if (!empty($conf['hooks']['permsdenied'])) {
+                $message = Horde::callHook('_perms_hook_denied', array('turba:max_contacts'), 'horde', $message);
+            }
+            $notification->push($message, 'horde.error', array('content.raw'));
+            $url = $url
+                ? Horde::url($url, true)
+                : Horde::applicationUrl('index.php', true);
+            header('Location: ' . $url);
+            exit;
+        }
+
+        $contact = new Turba_Object($driver);
+    }
+}
+
+/* Set up the form. */
+$form = new Turba_AddContactForm($vars, $contact);
+
+/* Validate the form. */
+if ($form->validate()) {
+    $form->execute();
+}
+
+$title = _("New Contact");
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+$form->renderActive(new Horde_Form_Renderer(), $vars, 'add.php', 'post');
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/addressbooks/create.php b/turba/addressbooks/create.php
new file mode 100644 (file)
index 0000000..4c3b7d2
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Turba addressbooks - create.
+ *
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ */
+
+require_once dirname(__FILE__) . '/../lib/base.php';
+require_once TURBA_BASE . '/lib/Forms/CreateAddressBook.php';
+
+// Exit if this isn't an authenticated user, or if there's no source
+// configured for shares.
+if (!Horde_Auth::getAuth() || empty($_SESSION['turba']['has_share'])) {
+    require TURBA_BASE . '/'
+        . ($browse_source_count ? basename($prefs->getValue('initial_page')) : 'search.php');
+    exit;
+}
+
+$vars = Horde_Variables::getDefaultVariables();
+$form = new Turba_CreateAddressBookForm($vars);
+
+// Execute if the form is valid.
+if ($form->validate($vars)) {
+    $result = $form->execute();
+    if (is_a($result, 'PEAR_Error')) {
+        $notification->push($result, 'horde.error');
+    } else {
+        $notification->push(sprintf(_("The address book \"%s\" has been created."), $vars->get('name')), 'horde.success');
+    }
+
+    header('Location: ' . Horde::applicationUrl('addressbooks/', true));
+    exit;
+}
+
+$title = $form->getTitle();
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+echo $form->renderActive($form->getRenderer(), $vars, 'create.php', 'post');
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/addressbooks/delete.php b/turba/addressbooks/delete.php
new file mode 100644 (file)
index 0000000..c251c07
--- /dev/null
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Turba addressbooks - delete.
+ *
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ */
+
+require_once dirname(__FILE__) . '/../lib/base.php';
+require_once TURBA_BASE . '/lib/Forms/DeleteAddressBook.php';
+
+// Exit if this isn't an authenticated user, or if there's no source
+// configured for shares.
+if (!Horde_Auth::getAuth() || empty($_SESSION['turba']['has_share'])) {
+    require TURBA_BASE . '/'
+        . ($browse_source_count ? basename($prefs->getValue('initial_page')) : 'search.php');
+    exit;
+}
+
+$vars = Horde_Variables::getDefaultVariables();
+$addressbook_id = $vars->get('a');
+if ($addressbook_id == Horde_Auth::getAuth()) {
+    $notification->push(_("This addressbook cannot be deleted"), 'horde.warning');
+    header('Location: ' . Horde::applicationUrl('addressbooks/', true));
+    exit;
+}
+
+$addressbook = $turba_shares->getShare($addressbook_id);
+if (is_a($addressbook, 'PEAR_Error')) {
+    $notification->push($addressbook, 'horde.error');
+    header('Location: ' . Horde::applicationUrl('addressbooks/', true));
+    exit;
+} elseif ($addressbook->get('owner') != Horde_Auth::getAuth()) {
+    $notification->push(_("You are not allowed to delete this addressbook."), 'horde.error');
+    header('Location: ' . Horde::applicationUrl('addressbooks/', true));
+    exit;
+}
+
+$form = new Turba_DeleteAddressBookForm($vars, $addressbook);
+
+// Execute if the form is valid (must pass with POST variables only).
+if ($form->validate(new Horde_Variables($_POST))) {
+    $result = $form->execute();
+    if (is_a($result, 'PEAR_Error')) {
+        $notification->push($result, 'horde.error');
+    } elseif ($result) {
+        $notification->push(sprintf(_("The addressbook \"%s\" has been deleted."), $addressbook->get('name')), 'horde.success');
+    }
+
+    header('Location: ' . Horde::applicationUrl('addressbooks/', true));
+    exit;
+}
+
+$title = $form->getTitle();
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+echo $form->renderActive($form->getRenderer(), $vars, 'delete.php', 'post');
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/addressbooks/edit.php b/turba/addressbooks/edit.php
new file mode 100644 (file)
index 0000000..85661de
--- /dev/null
@@ -0,0 +1,59 @@
+<?php
+/**
+ * Turba addressbooks - edit.
+ *
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ */
+
+require_once dirname(__FILE__) . '/../lib/base.php';
+require_once TURBA_BASE . '/lib/Forms/EditAddressBook.php';
+
+// Exit if this isn't an authenticated user, or if there's no source
+// configured for shares.
+if (!Horde_Auth::getAuth() || empty($_SESSION['turba']['has_share'])) {
+    require TURBA_BASE . '/'
+        . ($browse_source_count ? basename($prefs->getValue('initial_page')) : 'search.php');
+    exit;
+}
+
+$vars = Horde_Variables::getDefaultVariables();
+$addressbook = $turba_shares->getShare($vars->get('a'));
+if (is_a($addressbook, 'PEAR_Error')) {
+    $notification->push($addressbook, 'horde.error');
+    header('Location: ' . Horde::applicationUrl('addressbooks/', true));
+    exit;
+} elseif ($addressbook->get('owner') != Horde_Auth::getAuth()) {
+    $notification->push(_("You are not allowed to change this addressbook."), 'horde.error');
+    header('Location: ' . Horde::applicationUrl('addressbooks/', true));
+    exit;
+}
+$form = new Turba_EditAddressBookForm($vars, $addressbook);
+
+// Execute if the form is valid.
+if ($form->validate($vars)) {
+    $original_name = $addressbook->get('name');
+    $result = $form->execute();
+    if (is_a($result, 'PEAR_Error')) {
+        $notification->push($result, 'horde.error');
+    } else {
+        if ($addressbook->get('name') != $original_name) {
+            $notification->push(sprintf(_("The addressbook \"%s\" has been renamed to \"%s\"."), $original_name, $addressbook->get('name')), 'horde.success');
+        } else {
+            $notification->push(sprintf(_("The addressbook \"%s\" has been saved."), $original_name), 'horde.success');
+        }
+    }
+
+    header('Location: ' . Horde::applicationUrl('addressbooks/', true));
+    exit;
+}
+
+$vars->set('name', $addressbook->get('name'));
+$vars->set('description', $addressbook->get('desc'));
+$title = $form->getTitle();
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+echo $form->renderActive($form->getRenderer(), $vars, 'edit.php', 'post');
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/addressbooks/index.php b/turba/addressbooks/index.php
new file mode 100644 (file)
index 0000000..77e993c
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Turba addressbooks - index.
+ *
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ */
+
+require_once dirname(__FILE__) . '/../lib/base.php';
+
+// Exit if this isn't an authenticated user, or if there's no source
+// configured for shares.
+if (!Horde_Auth::getAuth() || empty($_SESSION['turba']['has_share'])) {
+    require TURBA_BASE . '/'
+        . ($browse_source_count ? basename($prefs->getValue('initial_page')) : 'search.php');
+    exit;
+}
+
+$browse_url_base = Horde::applicationUrl($browse_source_count ? basename($prefs->getValue('initial_page')) : 'search.php');
+$edit_url_base = Horde::applicationUrl('addressbooks/edit.php');
+$perms_url_base = Horde::url($registry->get('webroot', 'horde') . '/services/shares/edit.php?app=turba', true);
+$delete_url_base = Horde::applicationUrl('addressbooks/delete.php');
+
+// Get the shares owned by the current user, and figure out what we will
+// display the share name as to the user.
+$addressbooks = Turba::listShares(true);
+$sorted_addressbooks = array();
+foreach ($addressbooks as $addressbook) {
+    if (!isset($cfgSources[$addressbook->getName()])) {
+        continue;
+    }
+    $sorted_addressbooks[$addressbook->getName()] = $addressbook->get('name');
+}
+asort($sorted_addressbooks);
+
+$browse_img = Horde::img('turba.png', _("Browse"), null, $registry->getImageDir('turba'));
+$edit_img = Horde::img('edit.png', _("Edit"), null, $registry->getImageDir('horde'));
+$perms_img = Horde::img('perms.png', _("Change Permissions"), null, $registry->getImageDir('horde'));
+$delete_img = Horde::img('delete.png', _("Delete"), null, $registry->getImageDir('horde'));
+
+Horde::addScriptFile('popup.js', 'horde', true);
+Horde::addScriptFile('tables.js', 'horde', true);
+$title = _("Manage Address Books");
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+require TURBA_TEMPLATES . '/addressbook_list.php';
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/browse.php b/turba/browse.php
new file mode 100644 (file)
index 0000000..3841ee3
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Turba browse.php.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you did
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+$params = array(
+    'vars' => Horde_Variables::getDefaultVariables(),
+    'prefs' => &$prefs,
+    'notification' => &$notification,
+    'registry' => &$registry,
+    'browse_source_count' => $browse_source_count,
+    'browse_source_options' => $browse_source_options,
+    'copymove_source_options' => $copymove_source_options,
+    'copymoveSources' => $copymoveSources,
+    'addSources' => $addSources,
+    'cfgSources' => $cfgSources,
+    'attributes' => $attributes,
+    'turba_shares' => &$turba_shares,
+    'conf' => $conf,
+    'source' => $default_source,
+    'browser' => $browser
+);
+
+$browse = new Turba_View_Browse($params);
+$browse->run();
diff --git a/turba/config/.htaccess b/turba/config/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/turba/config/attributes.php.dist b/turba/config/attributes.php.dist
new file mode 100644 (file)
index 0000000..c61b8d0
--- /dev/null
@@ -0,0 +1,565 @@
+<?php
+/**
+ * Turba Attributes File.
+ *
+ * This file contains examples of attributes that Turba understands, and their
+ * types. It may be safely edited by hand. Use attributes.php.dist as a
+ * reference.
+ *
+ * The syntax of this array is as follows:
+ * <pre>
+ * label - The text that the user will see attached to this field.
+ * type - One of the following:
+ *   - spacer            - header
+ *   - description       - html
+ *   - number            - int
+ *   - intlist           - text
+ *   - longtext          - countedtext
+ *   - address           - file
+ *   - boolean           - link
+ *   - email             - emailconfirm
+ *   - password          - passwordconfirm
+ *   - enum              - multienum
+ *   - radio             - set
+ *   - date              - time
+ *   - monthyear         - monthdayyear
+ *   - colorpicker       - sorter
+ *   - creditcard        - invalid
+ *   - stringlist        - addresslink
+ * required - Boolean whether this field is mandatory.
+ * readonly - Boolean whether this field is editable.
+ * desc - Any help text attached to the field.
+ * time_object_label - The text to describe the time object category.
+ *                     Only valid for monthdayyear types and removing this
+ *                     from a monthdayyear type will hide it from the
+ *                     listTimeObjects api.
+ * params - Any other parameters that need to be passed to the
+ *          field. For a documentation of available field
+ *          parameters see: http://wiki.horde.org/Doc/Dev/FormTypes.
+ * </pre>
+ *
+ * $Id$
+ */
+
+/* Personal stuff. */
+$attributes['name'] = array(
+    'label' => _("Name"),
+    'type' => 'text',
+    'required' => true,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['firstname'] = array(
+    'label' => _("First Name"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['lastname'] = array(
+    'label' => _("Last Name"),
+    'type' => 'text',
+    'required' => true,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['middlenames'] = array(
+    'label' => _("Middle Names"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['namePrefix'] = array(
+    'label' => _("Name Prefixes"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 32, 'maxlength' => 32)
+);
+$attributes['nameSuffix'] = array(
+    'label' => _("Name Suffixes"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 32, 'maxlength' => 32)
+);
+$attributes['alias'] = array(
+    'label' => _("Alias"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 32)
+);
+$attributes['nickname'] = array(
+    'label' => _("Nickname"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 32, 'maxlength' => 32)
+);
+$attributes['birthday'] = array(
+    'label' => _("Birthday"),
+    'type' => 'monthdayyear',
+    'required' => false,
+    'params' => array('start_year' => 1900, 'end_year' => null, 'picker' => true, 'format_in' => '%Y-%m-%d', 'format_out' => $GLOBALS['prefs']->getValue('date_format')),
+    'time_object_label' => _("Birthdays"),
+);
+$attributes['anniversary'] = array(
+    'label' => _("Anniversary"),
+    'type' => 'monthdayyear',
+    'params' => array('start_year' => 1900, 'end_year' => null, 'picker' => true, 'format_in' => '%Y-%m-%d', 'format_out' => $GLOBALS['prefs']->getValue('date_format')),
+    'required' => false,
+    'time_object_label' => _("Anniversaries"),
+);
+$attributes['spouse'] = array(
+    'label' => _("Spouse"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['children'] = array(
+    'label' => _("Children"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['photo'] = array(
+    'label' => _("Photo"),
+    'type' => 'image',
+    'required' => false,
+    'params' => array('show_upload' => true, 'show_keeporig' => true, 'max_filesize'  => null),
+);
+$attributes['phototype'] = array(
+    'label' => _("Photo MIME Type"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+
+/* Locations, addresses. */
+$attributes['homeAddress'] = array(
+    'label' => _("Home Address"),
+    'type' => 'address',
+    'required' => false,
+    'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['homeStreet'] = array(
+    'label' => _("Home Street Address"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homePOBox'] = array(
+    'label' => _("Home Post Office Box"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['homeCity'] = array(
+    'label' => _("Home City"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homeProvince'] = array(
+    'label' => _("Home State/Province"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homePostalCode'] = array(
+    'label' => _("Home Postal Code"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['homeCountry'] = array(
+    'label' => _("Home Country"),
+    'type' => 'country',
+    'required' => false,
+    'params' => array('prompt' => true)
+);
+$attributes['workAddress'] = array(
+    'label' => _("Work Address"),
+    'type' => 'address',
+    'required' => false,
+    'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['workStreet'] = array(
+    'label' => _("Work Street Address"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workPOBox'] = array(
+    'label' => _("Work Post Office Box"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['workCity'] = array(
+    'label' => _("Work City"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workProvince'] = array(
+    'label' => _("Work State/Province"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workPostalCode'] = array(
+    'label' => _("Work Postal Code"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['workCountry'] = array(
+    'label' => _("Work Country"),
+    'type' => 'country',
+    'required' => false,
+    'params' => array('prompt' => true)
+);
+$attributes['companyAddress'] = array(
+    'label' => _("Company Address"),
+    'type' => 'address',
+    'required' => false,
+    'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['timezone'] = array(
+    'label' => _("Time Zone"),
+    'type' => 'enum',
+    'params' => array('values' => Horde_Nls::getTimezones(), 'prompt' => true),
+    'required' => false
+);
+
+/* Communication. */
+$attributes['email'] = array(
+    'label' => _("Email"),
+    'type' => 'email',
+    'required' => false,
+    'params' => array('allow_multi' => false, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['emails'] = array(
+    'label' => _("Emails"),
+    'type' => 'email',
+    'required' => false,
+    'params' => array('allow_multi' => true, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['homePhone'] = array(
+    'label' => _("Home Phone"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['workPhone'] = array(
+    'label' => _("Work Phone"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['cellPhone'] = array(
+    'label' => _("Mobile Phone"),
+    'type' => 'cellphone',
+    'required' => false
+);
+$attributes['fax'] = array(
+    'label' => _("Fax"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['pager'] = array(
+    'label' => _("Pager"),
+    'type' => 'phone',
+    'required' => false
+);
+
+/* Job, company, organization. */
+$attributes['title'] = array(
+    'label' => _("Job Title"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['role'] = array(
+    'label' => _("Occupation"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['businessCategory'] = array(
+    'label' => _("Business Category"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['company'] = array(
+    'label' => _("Company"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['department'] = array(
+    'label' => _("Department"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['office'] = array(
+    'label' => _("Office"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['logo'] = array(
+    'label' => _("Logo"),
+    'type' => 'image',
+    'required' => false,
+    'params' => array('show_upload' => true, 'show_keeporig' => true, 'max_filesize'  => null),
+);
+$attributes['logotype'] = array(
+    'label' => _("Logo MIME Type"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+
+/* Other */
+$attributes['notes'] = array(
+    'label' => _("Notes"),
+    'type' => 'longtext',
+    'required' => false,
+    'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['website'] = array(
+    'label' => _("Website URL"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['freebusyUrl'] = array(
+    'label' => _("Freebusy URL"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['pgpPublicKey'] = array(
+    'label' => _("PGP Public Key"),
+    'type' => 'pgp',
+    'required' => false,
+    'params' => array('gpg' => $GLOBALS['conf']['gnupg']['path'], 'temp_dir' => Horde::getTempDir(), 'rows' => 3, 'cols' => 40)
+);
+$attributes['smimePublicKey'] = array(
+    'label' => _("S/MIME Public Certificate"),
+    'type' => 'smime',
+    'required' => false,
+    'params' => array('temp_dir' => Horde::getTempDir(), 'rows' => 3, 'cols' => 40)
+);
+$attributes['category'] = array(
+    'label' => _("Category"),
+    'type' => 'category',
+    'params' => array(),
+    'required' => false
+);
+
+/* Additional attributes supported by Kolab */
+$attributes['kolabHomeServer'] = array(
+    'label' => _("Kolab Home Server"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['initials'] = array(
+    'label' => _("Initials"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['instantMessenger'] = array(
+    'label' => _("Instant Messenger"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['manager'] = array(
+    'label' => _("Manager"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['assistant'] = array(
+    'label' => _("Assistant"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['gender'] = array(
+    'label' => _("Gender"),
+    'type' => 'enum',
+    'required' => false,
+    'params' => array('values' => array(_("male"), _("female")), 'prompt' => true),
+);
+$attributes['language'] = array(
+    'label' => _("Language"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['latitude'] = array(
+    'label' => _("Latitude"),
+    'type' => 'number',
+    'required' => false,
+);
+$attributes['longitude'] = array(
+    'label' => _("Longitude"),
+    'type' => 'number',
+    'required' => false,
+);
+
+/* Additional attributes supported by some SyncML clients */
+$attributes['workEmail'] = array(
+    'label' => _("Work Email"),
+    'type' => 'email',
+    'required' => false,
+    'params' => array('allow_multi' => false, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['homeEmail'] = array(
+    'label' => _("Home Email"),
+    'type' => 'email',
+    'required' => false,
+    'params' => array('allow_multi' => false, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['phone'] = array(
+    'label' => _("Common Phone"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['workFax'] = array(
+    'label' => _("Work Fax"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['homeFax'] = array(
+    'label' => _("Home Fax"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['workCellPhone'] = array(
+    'label' => _("Work Mobile Phone"),
+    'type' => 'cellphone',
+    'required' => false
+);
+$attributes['homeCellPhone'] = array(
+    'label' => _("Home Mobile Phone"),
+    'type' => 'cellphone',
+    'required' => false
+);
+$attributes['videoCall'] = array(
+    'label' => _("Common Video Call"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['workVideoCall'] = array(
+    'label' => _("Work Video Call"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['homeVideoCall'] = array(
+    'label' => _("Home Video Call"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['voip'] = array(
+    'label' => _("VoIP"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['sip'] = array(
+    'label' => _("SIP"),
+    'type' => 'email',
+    'required' => false,
+    'params' => array('allow_multi' => true, 'strip_domain' => false, 'link_compose' => true)
+);
+$attributes['ptt'] = array(
+    'label' => _("PTT"),
+    'type' => 'phone',
+    'required' => false
+);
+$attributes['commonExtended'] = array(
+    'label' => _("Common Address Extended"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['commonStreet'] = array(
+    'label' => _("Common Street"),
+    'type' => 'address',
+    'required' => false,
+    'params' => array('rows' => 3, 'cols' => 40)
+);
+$attributes['commonPOBox'] = array(
+    'label' => _("Common Post Office Box"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['commonCity'] = array(
+    'label' => _("Common City"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['commonProvince'] = array(
+    'label' => _("Common State/Province"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['commonPostalCode'] = array(
+    'label' => _("Common Postal Code"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 10, 'maxlength' => 10)
+);
+$attributes['commonCountry'] = array(
+    'label' => _("Common Country"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workWebsite'] = array(
+    'label' => _("Work Website URL"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workExtended'] = array(
+    'label' => _("Work Address Extended"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['workLatitude'] = array(
+    'label' => _("Work Latitude"),
+    'type' => 'number',
+    'required' => false,
+);
+$attributes['workLongitude'] = array(
+    'label' => _("Work Longitude"),
+    'type' => 'number',
+    'required' => false,
+);
+$attributes['homeWebsite'] = array(
+    'label' => _("Home Website URL"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homeExtended'] = array(
+    'label' => _("Home Address Extended"),
+    'type' => 'text',
+    'required' => false,
+    'params' => array('regex' => '', 'size' => 40, 'maxlength' => 255)
+);
+$attributes['homeLatitude'] = array(
+    'label' => _("Home Latitude"),
+    'type' => 'number',
+    'required' => false,
+);
+$attributes['homeLongitude'] = array(
+    'label' => _("Home Longitude"),
+    'type' => 'number',
+    'required' => false,
+);
diff --git a/turba/config/conf.xml b/turba/config/conf.xml
new file mode 100644 (file)
index 0000000..8d30082
--- /dev/null
@@ -0,0 +1,41 @@
+<?xml version="1.0"?>
+<!-- $Horde: turba/config/conf.xml,v 1.23 2008/06/25 15:41:01 jan Exp $ -->
+<configuration>
+ <configsection name="menu">
+  <configheader>Menu Settings</configheader>
+  <configboolean name="import_export" desc="Should we display an Import/Export
+  link in Turba's menu?">true</configboolean>
+  <configmultienum name="apps" desc="Select any applications that should be
+  linked in Turba's menu">
+   <values>
+    <configspecial name="list-horde-apps"/>
+   </values>
+  </configmultienum>
+ </configsection>
+
+ <configsection name="client">
+   <configheader>Clients</configheader>
+   <configstring name="addressbook" desc="Name of client addressbook. If this
+   is a shared address book, use the share id, not the source
+   name.">localsql</configstring>
+ </configsection>
+
+ <configsection name="shares">
+  <configheader>Shares</configheader>
+  <configstring name="source" desc="Name of source for creating new
+  shares.&lt;br /&gt; Note that leaving this blank will prevent users from
+  being able to create new address books."
+  required="false">localsql</configstring>
+ </configsection>
+
+ <configsection name="comments">
+  <configheader>Comments</configheader>
+  <configboolean name="allow" desc="Can users comment on
+  contacts?">true</configboolean>
+ </configsection>
+
+ <configsection name="documents">
+  <configheader>Virtual File Storage</configheader>
+  <configvfs switchname="type" />
+ </configsection>
+</configuration>
diff --git a/turba/config/hooks.php.dist b/turba/config/hooks.php.dist
new file mode 100644 (file)
index 0000000..119bceb
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Turba Hooks configuration file.
+ *
+ * THE HOOKS PROVIDED IN THIS FILE ARE EXAMPLES ONLY.  DO NOT ENABLE THEM
+ * BLINDLY IF YOU DO NOT KNOW WHAT YOU ARE DOING.  YOU HAVE TO CUSTOMIZE THEM
+ * TO MATCH YOUR SPECIFIC NEEDS AND SYSTEM ENVIRONMENT.
+ *
+ * For more information please see the horde/config/hooks.php.dist file.
+ *
+ * $Id$
+ */
+
+// Here is an example _turba_hook_encode_password (and decode). encode is
+// called when we store a value; decode when we display it.  Passwords should
+// be MD5 encoded, but not displayed.
+//
+// IMPORTANT: The last parameter in these examples (&$object) is only
+// passed by Turba 2.1 and later. If you are using Turba 2.0, then you
+// must remove the &$object parameter.
+
+// if (!function_exists('_turba_hook_encode_password')) {
+//     function _turba_hook_encode_password($new_password, $old_password, &$contact)
+//     {
+//         if (is_null($new_password) || $new_password == '' ||
+//             $new_password == '[Not Displayed]') {
+//             return $old_password;
+//         } else {
+//             return md5($new_password);
+//         }
+//     }
+//     function _turba_hook_decode_password($password, &$contact)
+//     {
+//         if (strstr($_SERVER['PHP_SELF'], 'editobject')) {
+//             return null;
+//         } else {
+//             return '[Not Displayed]';
+//         }
+//     }
+// }
diff --git a/turba/config/menu.php.dist b/turba/config/menu.php.dist
new file mode 100644 (file)
index 0000000..03c5877
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+/**
+ * This file lets you extend Turba's menu with your own items.
+ *
+ * To add a new menu item, simply add a new entry to the $_menu array.
+ * Valid attributes for a new menu item are:
+ *
+ *  'url'       The URL value for the menu item.
+ *  'text'      The text to accompany the menu item.
+ *
+ * These attributes are optional:
+ *
+ *  'icon'      The filename of an icon to use for the menu item.
+ *  'icon_path' The path to the icon if it doesn't exist in the graphics/
+ *              directory.
+ *  'target'    The "target" of the link (e.g. '_top', '_blank').
+ *  'onclick'   Any JavaScript to execute on the "onclick" event.
+ *
+ * Here's an example entry:
+ *
+ *  $_menu[] = array(
+ *      'url' =>        'http://www.example.com/',
+ *      'text' =>       'Example, Inc.',
+ *      'icon' =>       'example.png',
+ *      'icon_path' =>  'http://www.example.com/images/',
+ *      'target' =>     '_blank',
+ *      'onclick' =>    ''
+ *  );
+ *
+ * You can also add a "separator" (a spacer) between menu items.  To add a
+ * separator, simply add a new string to the $_menu array set to the text
+ * 'separator'.  It should look like this:
+ *
+ *  $_menu[] = 'separator';
+ *
+ * $Id$
+ */
+
+$_menu = array();
+
+/* Add your custom entries below this line. */
diff --git a/turba/config/mime_drivers.php.dist b/turba/config/mime_drivers.php.dist
new file mode 100644 (file)
index 0000000..fad1b9b
--- /dev/null
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Decide which output drivers you want to activate for Turba.
+ * Settings in this file override settings in horde/config/mime_drivers.php.
+ *
+ * $Id$
+ */
+$mime_drivers_map['turba']['registered'] = array();
+
+/**
+ * If you want to specifically override any MIME type to be handled by
+ * a specific driver, then enter it here. Normally, this is safe to
+ * leave, but it's useful when multiple drivers handle the same MIME
+ * type, and you want to specify exactly which one should handle it.
+ */
+$mime_drivers_map['turba']['overrides'] = array();
+
+/**
+ * Driver specific settings. See horde/config/mime_drivers.php for
+ * the format.
+ */
diff --git a/turba/config/prefs.php.dist b/turba/config/prefs.php.dist
new file mode 100644 (file)
index 0000000..d06cb59
--- /dev/null
@@ -0,0 +1,156 @@
+<?php
+/**
+ * See horde/config/prefs.php for documentation on the structure of this file.
+ *
+ * $Id$
+ */
+
+$prefGroups['addressbooks'] = array(
+    'column' => _("Display Options"),
+    'label' => _("Address Books"),
+    'desc' => _("Choose which address books to use."),
+    'members' => array('default_dir', 'addressbookselect', 'sync_books'),
+);
+
+$prefGroups['columns'] = array(
+    'column' => _("Display Options"),
+    'label' => _("Column Options"),
+    'desc' => _("Select which fields to display in the address lists."),
+    'members' => array('columnselect'),
+);
+
+$prefGroups['display'] = array(
+    'column' => _("Display Options"),
+    'label' => _("Display"),
+    'desc' => _("Select view to display by default and paging options."),
+    'members' => array('initial_page', 'maxpage', 'perpage'),
+);
+
+$prefGroups['format'] = array(
+    'column' => _("Display Options"),
+    'label' => _("Name Format"),
+    'desc' => _("Select which format to display names."),
+    'members' => array('name_format'),
+);
+
+// Address Book selection widget
+$_prefs['addressbookselect'] = array(
+    'locked' => false,
+    'type' => 'special',
+);
+
+// Address books to be displayed in the address book selection widget
+// and in the Browse menu item.  The address book name is stored using
+// the source key from sources.php (e.g. "localsql").  Separate
+// entries with "\n" , e. g. 'value' => "localsql\nlocalldap" (the
+// double quotes are REQUIRED).  If 'value' is empty (''), all address
+// books that the user has permissions to will be listed.
+$_prefs['addressbooks'] = array(
+    'value' => '',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'implicit',
+);
+
+// Address books use for synchronization
+$_prefs['sync_books'] = array(
+    'value' => 'a:0:{}',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'multienum',
+    'desc' => _("Select the address books that should be used for synchronization with external devices:"),
+);
+
+// Columns selection widget
+$_prefs['columnselect'] = array(
+    'locked' => false,
+    'type' => 'special',
+);
+
+// Columns to be displayed in Browse and Search results, with entries
+// for the columns displayed for each address book.  Separate address
+// book stanzas with \n and columns with \t. The "name" column is
+// currently always displayed first and so cannot be modified here.
+// Double quotes MUST be used as in the example.
+$_prefs['columns'] = array(
+    'value' => "netcenter\temail\nverisign\temail\nlocalsql\temail",
+    'locked' => false,
+    'shared' => false,
+    'type' => 'implicit',
+);
+
+// user preferred sorting column
+// serialized array of hashes containing 'field' and 'ascending' keys
+$_prefs['sortorder'] = array(
+    'value' => 'a:1:{i:0;a:2:{s:5:"field";s:8:"lastname";s:9:"ascending";b:1;}}',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'implicit',
+);
+
+// number of maximum pages and items per page
+$_prefs['maxpage'] = array(
+    'value' => 10,
+    'locked' => false,
+    'shared' => false,
+    'type' => 'number',
+    'desc' => _("Maximum number of pages"),
+);
+
+$_prefs['perpage'] = array(
+    'value' => 20,
+    'locked' => false,
+    'shared' => false,
+    'type' => 'number',
+    'desc' => _("Number of items per page"),
+);
+
+// the page to display.  Either 'browse.php' or 'search.php'
+$_prefs['initial_page'] = array(
+    'value' => 'search.php',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'enum',
+    'desc' => _("View to display by default:"),
+    'enum' => array('browse.php' => _("Address Book Listing"),
+                    'search.php' => _("Search")),
+);
+
+// the format to display names.  Either 'last_first' or 'first_last'
+$_prefs['name_format'] = array(
+    'value' => 'none',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'enum',
+    'desc' => _("Select the format used to display names:"),
+    'enum' => array('last_first' => _("\"Lastname, Firstname\" (ie. Doe, John)"),
+                    'first_last' => _("\"Firstname Lastname\"  (ie. John Doe)"),
+                    'none' => _("no formatting")),
+);
+
+// Default directory
+$_prefs['default_dir'] = array(
+    'value' => '',
+    // 'value' => 'localsql',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'select',
+    'desc' => _("This will be the default address book when adding or importing contacts."),
+);
+
+// preference for holding any preferences-based addressbooks.
+$_prefs['prefbooks'] = array(
+    'value' => '',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'implicit',
+);
+
+// Personal contact.
+$_prefs['own_contact'] = array(
+    // The format is 'source_name;contact_id'.
+    'value' => '',
+    'locked' => false,
+    'shared' => false,
+    'type' => 'implicit'
+);
diff --git a/turba/config/sources.php.dist b/turba/config/sources.php.dist
new file mode 100644 (file)
index 0000000..a029b0c
--- /dev/null
@@ -0,0 +1,1047 @@
+<?php
+/**
+ * This file is where you specify the sources of contacts available to users
+ * at your installation. It contains a large number of EXAMPLES. Please
+ * remove or comment out those examples that YOU DON'T NEED. There are a
+ * number of properties that you can set for each server, including:
+ *
+ * title:       This is the common (user-visible) name that you want displayed
+ *              in the contact source drop-down box.
+ *
+ * type:        The types 'ldap', 'sql', 'imsp', 'group', 'favourites' and
+ *              'prefs' are currently supported. Preferences-based address
+ *              books are not intended for production installs unless you
+ *              really know what you're doing - they are not searchable, and
+ *              they won't scale well if a user has a large number of entries.
+ *
+ * params:      These are the connection parameters specific to the contact
+ *              source. See below for examples of how to set these.
+ *
+ * Special params settings:
+ *
+ *   charset:       The character set that the backend stores data in. Many
+ *                  LDAP servers use utf-8. Database servers typically use
+ *                  iso-8859-1.
+ *
+ *   tls:           Only applies to LDAP servers. If true, then try to use a
+ *                  TLS connection to the server.
+ *
+ *   scope:         Only applies to LDAP servers. Can be set to 'one' to
+ *                  search one level of the LDAP directory, or 'sub' to search
+ *                  all levels. 'one' will work for most setups and should be
+ *                  much faster. However we default to 'sub' for backwards
+ *                  compatibility.
+ *
+ *   checkrequired: Only applies to LDAP servers. If present, this value causes
+ *                  the driver to consult the LDAP schema for any attributes
+ *                  that are required by the given objectclass(es). Required
+ *                  attributes will be provided automatically if the
+ *                  'checkrequired_string' parameter is present.
+ *                  *NOTE* You must have the Net_LDAP PEAR library installed
+ *                  for this to work.
+ *
+ *   checksyntax:   Only applies to LDAP servers. If present, this value causes
+ *                  the driver to inspect the LDAP schema for particular
+ *                  attributes by the type defined in the corresponding schema
+ *                  *NOTE* You must have the Net_LDAP PEAR library installed
+ *                  for this to work.
+ *
+ *   deref:         Only applies to LDAP servers. If set, should be one of:
+ *                    LDAP_DEREF_NEVER
+ *                    LDAP_DEREF_SEARCHING
+ *                    LDAP_DEREF_FINDING
+ *                    LDAP_DEREF_ALWAYS
+ *                  This tells the LDAP server when to dereference
+ *                  aliases. See http://www.php.net/ldap for more
+ *                  information.
+ *
+ *   dn:            Only applies to LDAP servers. Defines the list of LDAP
+ *                  attributes that build a valid DN.
+ *
+ *   objectclass:   Only applies to LDAP servers. Defines a list of
+ *                  objectclasses that contacts must belong to, and
+ *                  that new objects will be created with.
+ *
+ *   filter:        Filter helps to filter your result based on certain
+ *                  condition in SQL and LDAP backends. A filter can be
+ *                  specified to avoid some unwanted data. For example, if the
+ *                  source is an external sql database, to select records with
+ *                  the delete flag = 0:
+ *                  'filter' = 'deleted=0'
+ *
+ * map:         This is a list of mappings from the Turba attribute names (on
+ *              the left) to the attribute names by which they are known in
+ *              this contact source (on the right). Turba also supports
+ *              composite fields. A composite field is defined by mapping the
+ *              field name to an array containing a list of component fields
+ *              and a format string (similar to a printf() format string;
+ *              however, note that positioned parameters like %1$s will NOT
+ *              work). 'attribute' defines where the composed value is saved,
+ *              and can be left out. 'parse' defines a list of format strings
+ *              and field names that should be used for splitting up composite
+ *              fields, in the order of precedence, and can be left out. Here
+ *              is an example:
+ *              ...
+ *              'name' => array('fields' => array('firstname', 'lastname'),
+ *                              'format' => '%s %s',
+ *                              'attribute' => 'object_name'),
+ *              'firstname' => 'object_firstname',
+ *              'lastname' => 'object_lastname',
+ *              ...
+ *
+ *              Standard Turba attributes are:
+ *                __key     : A backend-specific ID for the entry (any value
+ *                            as long as it is unique inside that source;
+ *                            required)
+ *                __uid     : Globally unique ID of the entry (used for
+ *                            synchronizing and must be able to be set to any
+ *                            value)
+ *                __owner   : User name of the contact's owner
+ *                __type    : Either 'Object' or 'Group'
+ *                __members : Serialized PHP array with list of Group members.
+ *              More Turba attributes are defined in config/attributes.php.
+ *
+ * tabs:        All fields can be grouped into tabs with this optional entry.
+ *              This list is multidimensional hash, the keys are the tab
+ *              titles.
+ *              Here is an example:
+ *              'tabs' => array(
+ *                  'Names' => array('firstname', 'lastname', 'alias'),
+ *                  'Addresses' => array('homeAddress', 'workAddress')
+ *              );
+ *
+ * search:      A list of Turba attribute names that can be searched for this
+ *              source.
+ *
+ * strict:      A list of native field/attribute names that must
+ *              always be matched exactly in a search.
+ *
+ * approximate: Only applies to LDAP servers. If set, should be an
+ *              array of native field/attribute names to search
+ *              "approximately" (for example, "Sánchez", "Sanchez",
+ *              and "Sanchéz" will all match a search string of
+ *              "sanchez").
+ *
+ * export:      If set to true, this source will appear on the Export menu,
+ *              allowing users to export the contacts to a CSV (etc.) file.
+ *
+ * browse:      If set to true, this source will be browseable via the Browse
+ *              menu item, and empty searches against the source will return
+ *              all contacts.
+ *
+ * use_shares:  If this is present and true, Horde_Share functionality will
+ *              be enabled for this source - allowing users to share their
+ *              personal address books as well as to create new ones. Since
+ *              Turba only supports having one backend configured for
+ *              creating new shares, use the 'shares' configuration option to
+ *              specify which backend will be used for creating new shares.
+ *              All permission checking will be done against Horde_Share, but
+ *              note that any 'extended' permissions (such as max_contacts)
+ *              will still be enforced. Also note that the backend driver
+ *              must have support for using this. Currently SQL and IMSP.
+ *
+ * list_name_field:  If this is present and non-empty, it will be taken as the
+ *                   field to store contact list names in.
+ *                   This is required when using a composite field as the 'name'
+ *                   field.
+ *
+ * alternative_name: If this is present and non-empty, it will be taken as the
+ *                   field to use an alternative in case that the name field is
+ *                   empty.
+ *
+ * Here are some example configurations:
+ *
+ * $Id$
+ */
+
+/**
+ * A local address book in an SQL database. This implements a private
+ * per-user address book. Sharing of this source with other users may be
+ * accomplished by enabling Horde_Share for this source by setting
+ * 'use_shares' => true.
+ *
+ * Be sure to create a turba_objects table in your Horde database from the
+ * schema in turba/scripts/db/turba.sql if you use this source.
+ */
+$cfgSources['localsql'] = array(
+    'title' => _("My Address Book"),
+    'type' => 'sql',
+    // The default connection details are pulled from the Horde-wide SQL
+    // connection configuration.
+    'params' => array_merge($GLOBALS['conf']['sql'], array('table' => 'turba_objects')),
+    // Using two tables as datasource.
+    // 'params' => array_merge($GLOBALS['conf']['sql'],
+    //                         array('table' => 'leaddetails LEFT JOIN leadaddress ON leaddetails.leadid = leadaddress.leadaddressid',
+    //                               'filter' => 'leaddetails.converted = 0')),
+    'map' => array(
+        '__key' => 'object_id',
+        '__owner' => 'owner_id',
+        '__type' => 'object_type',
+        '__members' => 'object_members',
+        '__uid' => 'object_uid',
+        'firstname' => 'object_firstname',
+        'lastname' => 'object_lastname',
+        'middlenames' => 'object_middlenames',
+        'namePrefix' => 'object_nameprefix',
+        'nameSuffix' => 'object_namesuffix',
+        'name' => array('fields' => array('namePrefix', 'firstname',
+                                          'middlenames', 'lastname',
+                                          'nameSuffix'),
+                        'format' => '%s %s %s %s %s',
+                        'parse' => array(
+                            array('fields' => array('firstname', 'middlenames',
+                                                    'lastname'),
+                                  'format' => '%s %s %s'),
+                            array('fields' => array('firstname', 'lastname'),
+                                  'format' => '%s %s'))),
+        // This is a shorter version of a "name" composite field which only
+        // consists of the first name and last name.
+        // 'name' => array('fields' => array('firstname', 'lastname'),
+        //                 'format' => '%s %s'),
+        'alias' => 'object_alias',
+        'birthday' => 'object_bday',
+        // The photo field requires at least Horde 3.3 and a matching type
+        // field.
+        // 'photo' => 'object_photo',
+        // 'phototype' => 'object_phototype',
+        'homeStreet' => 'object_homestreet',
+        'homePOBox' => 'object_homepob',
+        'homeCity' => 'object_homecity',
+        'homeProvince' => 'object_homeprovince',
+        'homePostalCode' => 'object_homepostalcode',
+        'homeCountry' => 'object_homecountry',
+        // This is an example composite field for addresses, so you can display
+        // the various map links. If you use this, be sure to add 'homeAddress'
+        // to the 'tabs' parameter below.
+        // 'homeAddress' => array('fields' => array('homeStreet', 'homeCity',
+        //                                          'homeProvince',
+        //                                          'homePostalCode'),
+        //                        'format' => "%s \n %s, %s  %s"),
+        'workStreet' => 'object_workstreet',
+        'workPOBox' => 'object_workpob',
+        'workCity' => 'object_workcity',
+        'workProvince' => 'object_workprovince',
+        'workPostalCode' => 'object_workpostalcode',
+        'workCountry' => 'object_workcountry',
+        'timezone' => 'object_tz',
+        'email' => 'object_email',
+        'homePhone' => 'object_homephone',
+        'workPhone' => 'object_workphone',
+        'cellPhone' => 'object_cellphone',
+        'fax' => 'object_fax',
+        'pager' => 'object_pager',
+        'title' => 'object_title',
+        'role' => 'object_role',
+        'company' => 'object_company',
+        // The logo field requires at least Horde 3.3 and a matching type
+        // field.
+        // 'logo' => 'object_logo',
+        // 'logotype' => 'object_logotype',
+        'category' => 'object_category',
+        'notes' => 'object_notes',
+        'website' => 'object_url',
+        'freebusyUrl' => 'object_freebusyurl',
+        'pgpPublicKey' => 'object_pgppublickey',
+        'smimePublicKey' => 'object_smimepublickey',
+    ),
+    'tabs' => array(
+        _("Personal") => array('firstname', 'lastname', 'middlenames',
+                               'namePrefix', 'nameSuffix', 'name', 'alias',
+                               'birthday', 'photo'),
+        _("Location") => array('homeStreet', 'homePOBox', 'homeCity',
+                               'homeProvince', 'homePostalCode', 'homeCountry',
+                               'workStreet', 'workPOBox', 'workCity',
+                               'workProvince', 'workPostalCode', 'workCountry',
+                               'timezone'),
+        _("Communications") => array('email', 'homePhone', 'workPhone',
+                                     'cellPhone', 'fax', 'pager'),
+        _("Organization") => array('title', 'role', 'company', 'logo'),
+        _("Other") => array('category', 'notes', 'website', 'freebusyUrl',
+                            'pgpPublicKey', 'smimePublicKey'),
+    ),
+    'search' => array(
+        'name',
+        'email'
+    ),
+    'strict' => array(
+        'object_id',
+        'owner_id',
+        'object_type',
+    ),
+    'export' => true,
+    'browse' => true,
+    'use_shares' => true,
+    'list_name_field' => 'lastname',
+    'alternative_name' => 'company',
+);
+
+/**
+ * A local address book in an LDAP directory. This implements a public
+ * (shared) address book.
+ *
+ * To store distribution lists in the LDAP directory, you'll need to include
+ * horde/scripts/ldap/horde.schema in your LDAP configuration.
+ *
+ * To store freebusy information in the LDAP directory, you'll need to include
+ * turba/scripts/ldap/rfc2739.schema in your LDAP configuration.
+ */
+// $cfgSources['localldap'] = array(
+//     'title' => _("Shared Directory"),
+//     'type' => 'ldap',
+//     'params' => array(
+//         'server' => 'ldap.example.com',
+//         'port' => 389,
+//         'tls' => false,
+//         'root' => 'dc=example,dc=com',
+//         'bind_dn' => 'cn=admin,ou=users,dc=example,dc=com',
+//         'bind_password' => '********',
+//         'sizelimit' => 200,
+//         'dn' => array('cn'),
+//         'objectclass' => array('top',
+//                                'person',
+//                                'organizationalPerson',
+//                                'inetOrgPerson'),
+//                                // Add 'turbaContact' to this array if using
+//                                // 'turbaType' attribute below, and 'calEntry'
+//                                // if using 'freebusyUrl'.
+//         'scope' => 'one',
+//         'charset' => 'utf-8',
+//         // Consult the LDAP schema to verify that all required attributes for
+//         // an entry are set and add them if needed.
+//         'checkrequired' => false,
+//         // Value used to fill in missing required attributes.
+//         'checkrequired_string' => ' ',
+//         // Check LDAP schema for valid syntax. If this is false an address
+//         // field is assumed to have postalAddress syntax; otherwise the schema
+//         // is consulted for the syntax to use.
+//         'checksyntax' => false,
+//         'version' => 3
+//     ),
+//     'map' => array(
+//         '__key' => 'dn',
+//         '__uid' => 'uid',
+//
+//         // From horde.schema.  Make sure you have 'turbaContact' objectClass
+//         // included above:
+//         // '__type' => 'turbaType',
+//         // '__members' => 'turbaMembers',
+//
+//         'name' => 'cn',
+//         'email' => 'mail',
+//         'homePhone' => 'homephone',
+//         'workPhone' => 'telephonenumber',
+//         'cellPhone' => 'mobiletelephonenumber',
+//         'homeAddress' => 'homepostaladdress',
+//
+//         // From rfc2739.schema:
+//         // 'freebusyUrl' => 'calFBURL',
+//     ),
+//     'search' => array(
+//         'name',
+//         'email',
+//         'homePhone',
+//         'workPhone',
+//         'cellPhone',
+//         'homeAddress'
+//     ),
+//     'strict' => array(
+//         'dn',
+//     ),
+//     'approximate' => array(
+//         'cn',
+//     ),
+//     'export' => true,
+//     'browse' => true,
+// );
+
+/**
+ * A personal LDAP address book. This assumes that the login is
+ * <username>@domain.com and that the users are stored on the same LDAP
+ * server. Thus it is possible to bind with the username and password from the
+ * user. For more info; please refer to the docs/LDAP file in the Turba
+ * distribution.
+ *
+ * To store distribution lists in the LDAP directory, you'll need to include
+ * horde/scripts/ldap/horde.schema in your LDAP configuration.
+ *
+ * To store freebusy information in the LDAP directory, you'll need to include
+ * turba/scripts/ldap/rfc2739.schema in your LDAP configuration.
+ */
+/* First we need to get the uid. */
+// $_ldap_uid = Horde_Auth::getBareAuth();
+// $_ldap_basedn = 'dc=example,dc=com';
+// $cfgSources['personal_ldap'] = array(
+//     'title' => _("My Address Book"),
+//     'type' => 'ldap',
+//     'params' => array(
+//         'server' => 'localhost',
+//         'tls' => false,
+//         'root' => 'ou=' . $_ldap_uid . ',ou=personal_addressbook,' . $_ldap_basedn,
+//         'bind_dn' => 'uid=' . $_ldap_uid . ',ou=People,' . $_ldap_basedn,
+//         'bind_password' => Horde_Auth::getCredential('password'),
+//         'dn' => array('uid'),
+//         'objectclass' => array('top',
+//                                'person',
+//                                // 'turbaContact',
+//                                'inetOrgPerson',
+//                                // 'calEntry',
+//                                'organizationalPerson'),
+//         'scope' => 'one',
+//         'charset' => 'utf-8',
+//         'version' => 3
+//     ),
+//     'map' => array(
+//         '__key' => 'dn',
+//         '__uid' => 'uid',
+//
+//         // From horde.schema:
+//         // '__type' => 'turbaType',
+//         // '__members' => 'turbaMembers',
+//
+//         'name' => 'cn',
+//         'email' => 'mail',
+//         'lastname' => 'sn',
+//         'title' => 'title',
+//         'company' => 'organizationname',
+//         'businessCategory' => 'businesscategory',
+//         'workAddress' => 'postaladdress',
+//         'workPostalCode' => 'postalcode',
+//         'workPhone' => 'telephonenumber',
+//         'fax' => 'facsimiletelephonenumber',
+//         'homeAddress' => 'homepostaladdress',
+//         'homePhone' => 'homephone',
+//         'cellPhone' => 'mobile',
+//         'notes' => 'description',
+//
+//         // Evolution interopt attributes: (those that do not require the
+//         // evolution.schema)
+//         'office' => 'roomNumber',
+//         'department' => 'ou',
+//         'nickname' => 'displayName',
+//         'website' => 'labeledURI',
+//
+//         // These are not stored on the LDAP server.
+//         'pgpPublicKey' => 'object_pgppublickey',
+//         'smimePublicKey' => 'object_smimepublickey',
+//
+//         // From rfc2739.schema:
+//         // 'freebusyUrl' => 'calFBURL',
+//     ),
+//     'search' => array(
+//         'name',
+//         'email',
+//         'businessCategory',
+//         'title',
+//         'homePhone',
+//         'workPhone',
+//         'cellPhone',
+//         'homeAddress'
+//     ),
+//     'strict' => array(
+//         'dn',
+//     ),
+//     'approximate' => array(
+//         'cn',
+//     ),
+//     'export' => true,
+//     'browse' => true,
+// );
+
+/**
+ * Public netcenter and verisign LDAP directories.
+ */
+// $cfgSources['netcenter'] = array(
+//     'title' => _("Netcenter Member Directory"),
+//     'type' => 'ldap',
+//     'params' => array(
+//         'server' => 'memberdir.netscape.com',
+//         'port' => 389,
+//         'tls' => false,
+//         'root' => 'ou=member_directory,o=netcenter.com',
+//         'dn' => array('cn'),
+//         'objectclass' => 'person',
+//         'filter' => '',
+//         'scope' => 'sub',
+//         'charset' => 'iso-8859-1'
+//     ),
+//     'map' => array(
+//         '__key' => 'dn',
+//         'name' => 'cn',
+//         'email' => 'mail',
+//         'alias' => 'givenname'
+//     ),
+//     'search' => array(
+//         'name',
+//         'email',
+//         'alias'
+//     ),
+//     'strict' => array(
+//         'dn'
+//     ),
+//     'approximate' => array(
+//         'cn',
+//     ),
+//     'export' => false,
+//     'browse' => false,
+// );
+//
+// $cfgSources['verisign'] = array(
+//     'title' => _("Verisign Directory"),
+//     'type' => 'ldap',
+//     'params' => array(
+//         'server' => 'directory.verisign.com',
+//         'port' => 389,
+//         'tls' => false,
+//         'root' => '',
+//         'scope' => 'sub',
+//         'charset' => 'iso-8859-1'
+//     ),
+//     'map' => array(
+//         '__key' => 'dn',
+//         'name' => 'cn',
+//         'email' => 'mail'
+//     ),
+//     'search' => array(
+//         'name',
+//         'email'
+//     ),
+//     'strict' => array(
+//         'dn'
+//     ),
+//     'approximate' => array(
+//         'cn',
+//     ),
+//     'export' => false,
+//     'browse' => false,
+// );
+
+/**
+ * A preferences-based address book. This will always be private. You can add
+ * any attributes you like to the map and it will just work; you can also
+ * create multiple prefs-based address books by changing the 'name' parameter.
+ * This is best for address books that are expected to remain small; it's not
+ * the most efficient, but it can't be beat for getting up and running
+ * quickly, especially if you already have Horde preferences working. Note
+ * that it is not searchable, though - searches will simply return the whole
+ * address book.
+ */
+// $cfgSources['prefs'] = array(
+//     'title' => _("Private Address Book"),
+//     'type' => 'prefs',
+//     'params' => array(
+//         'name' => 'prefs',
+//         'charset' => Horde_Nls::getCharset()
+//     ),
+//     'map' => array(
+//         '__key' => 'id',
+//         '__type' => '_type',
+//         '__members' => '_members',
+//         '__uid' => 'uid',
+//         'name' => 'name',
+//         'email' => 'mail',
+//         'alias' => 'alias'
+//     ),
+//     'search' => array(
+//         'name',
+//         'email',
+//         'alias'
+//     ),
+//     'strict' => array(
+//         'id',
+//         '_type',
+//     ),
+//     'export' => true,
+//     'browse' => true,
+// );
+
+/**
+ * An address book based on message recipients. This will always be private and
+ * read-only. The address book content is provided by the
+ * contacts/favouriteRecipients API method which should be implemented by a
+ * mail client that collects the most regular message recipients, like IMP
+ * 4.2.
+ */
+$cfgSources['favourites'] = array(
+    'title' => _("Favourite Recipients"),
+    'type' => 'favourites',
+    'params' => array(
+        'limit' => 10
+    ),
+    'map' => array(
+        '__key' => 'email',
+        'name' => 'email',
+        'email' => 'email'
+    ),
+    'search' => array(
+        'name',
+        'email'
+    ),
+    'strict' => array(
+        'id',
+    ),
+    'export' => true,
+    'browse' => true,
+);
+
+/**
+ * A driver to show a user's Facebook friends as a turba address book. Some
+ * data (like email) is not readily available via the API, but other data, like
+ * birthdays (which will show up via the listTimeObjects API) may still be
+ * useful to some
+ */
+//$cfgSources['facebook'] = array(
+//    'title' => _("Facebook Friends"),
+//    'type' => 'facebook',
+//    'params' => array(
+//        'limit' => 10
+//    ),
+//   'map' => array(
+//        '__key' => 'uid',
+//        'name' => 'name',
+//        'lastname' => 'last_name',
+//        'firstname' => 'first_name',
+//        'email' => 'proxied_email',
+//        'birthday' => 'birthday',
+//        'homeCity' => 'current_location.city',
+//        'homeProvince' => 'current_location.state',
+//        'homePostalCode' => 'current_location.zip',
+//        'homeCountry' => 'current_location.country',
+//   ),
+//    'search' => array(
+//        'name',
+//        'email',
+//    ),
+//    'export' => true,
+//    'browse' => true,
+//);
+
+/**
+ * This source creates an address book for each group the current user is a
+ * member in.  The address book will always be read only, and the group members
+ * must have an email address entered in their default identity.  No email
+ * address will result in that member not being included in the address book.
+ */
+//$grpSource = array(
+//    'title' => _("Group"),
+//    'type' => 'group',
+//    'params' => array(
+//       'name' => ''
+//    ),
+//    'map' => array(
+//        '__key' => 'email',
+//        'name' => 'name',
+//        'email' => 'email'
+//    ),
+//    'search' => array(
+//        'name',
+//        'email'
+//    ),
+//    'export' => true,
+//    'browse' => true,
+//);
+
+//require_once 'Horde/Group.php';
+//$_group_driver = &Group::singleton();
+//$_group_list = $_group_driver->getGroupMemberships(Horde_Auth::getAuth());
+//foreach ($_group_list as $_group_id => $_group_name) {
+//    $cfgSources['group_' . $_group_id] = $grpSource;
+//    $cfgSources['group_' . $_group_id]['params'] = array('gid' => $_group_id);
+//    $cfgSources['group_' . $_group_id]['title'] = $_group_name;
+//}
+
+/**
+ * IMSP based address book.
+ *
+ * Communicates with an IMSP backend server.
+ *
+ * Notes:
+ * You should configure the user's "main" address book here. The name of the
+ * address book is set in the 'name' element of the params array. It should
+ * be configured to be the same as the IMSP server username. Any other
+ * address books the user has access to will automatically be configured at
+ * runtime.
+ *
+ * In the params array, accepted values for auth_method are 'cram_md5',
+ * 'imtest', and 'plaintext' - these must match a IMSP_Auth_ driver. If you
+ * are using the imtest driver for Cyrus, please read the
+ * framework/Net_IMSP/Auth/imtest.php file for more configuration information.
+ *
+ * Groups in other IMSP-aware applications are just entries with multiple
+ * email addresses in the email field and a 'group' field set to flag the
+ * entry as a group. (The Cyrusoft applications, Mulberry and Silkymail both
+ * use a field named 'group' set to equal 'group' to signify this). A
+ * Turba_Object_Group is basically a List of existing Turba_Objects. The IMSP
+ * driver will map between these two structures when reading and writing
+ * groups.
+ * The only caveat is that IMSP groups that contain email addresses which do
+ * not have a cooresponding contact entry will be ignored. The group_id_field
+ * should be set to the IMSP field that flags the entry as a 'group' entry and
+ * the group_id_value should be set to the value given to that field.
+ *
+ * By default, the username and password that were used to login to Horde is
+ * used to login to the IMSP server. If these credentials are different,
+ * there is a user preference in Horde to allow another username / password to
+ * be entered. The alternate credentials are always used if present.
+ *
+ * In the map array, since IMSP uses the 'name' attribute as a key, this is
+ * what __key is mapped to ... and a dynamic field 'fullname' is added and
+ * mapped to the horde 'name' field. This is populated with the IMSP 'name'
+ * field when the object is read from the server.
+ *
+ * If you wish to keep track of ownership of individual contacts, set
+ * 'contact_ownership' = true. Note that entries created using other clients
+ * will not be created this way and will therefore have no 'owner'. Set
+ * 'contact_ownership' = false and the __owner field will be automatically
+ * populated with the current username.
+ *
+ * To integrate with Horde_Share (requires Horde 3.2 or better) set use_shares
+ * to true, and uncomment the IMSP Horde_Share hooks in horde/config/hooks.php.
+ */
+// Check that IMSP is configured in Horde but fall through if there is no
+// configuration at all - in case we don't have at least a 3.0.6 Horde
+// install.  (In that case, be sure to change the params array below to suit
+// your needs.
+if (!empty($GLOBALS['conf']['imsp']['enabled']) ||
+    !isset($GLOBALS['conf']['imsp']['enabled'])) {
+    // First, get the user name to login to IMSP server with.
+    $_imsp_auth_user = $GLOBALS['prefs']->getValue('imsp_auth_user');
+    $_imsp_auth_pass = $GLOBALS['prefs']->getValue('imsp_auth_pass');
+    if (!strlen($_imsp_auth_user)) {
+        $_imsp_auth_user = Horde_Auth::getBareAuth();
+        $_imsp_auth_pass = Horde_Auth::getCredential('password');
+    }
+    $cfgSources['imsp'] = array(
+        'title' => _("IMSP"),
+        'type' => 'imsp',
+        'params' => array(
+            'server'  => $GLOBALS['conf']['imsp']['server'],
+            'port'    => $GLOBALS['conf']['imsp']['port'],
+            'auth_method' => $GLOBALS['conf']['imsp']['auth_method'],
+            // socket, command, and auth_mechanism are for imtest driver.
+            'socket'  => isset($GLOBALS['conf']['imsp']['socket']) ?
+                         $GLOBALS['conf']['imsp']['socket'] . $_imsp_auth_user . '.sck' :
+                         '',
+            'command' => isset($GLOBALS['conf']['imsp']['command']) ?
+                         $GLOBALS['conf']['imsp']['command'] : '' ,
+            'auth_mechanism' => isset($GLOBALS['conf']['imsp']['auth_mechanism']) ?
+                                $GLOBALS['conf']['imsp']['auth_mechanism'] : '',
+            'username' => $_imsp_auth_user,
+            'password' => $_imsp_auth_pass,
+            'name' => $_imsp_auth_user,
+            'group_id_field' => 'group',
+            'group_id_value' => 'group',
+            'contact_ownership' => false,
+            // Dynamically generated acl rights for current user.
+            'my_rights' => '',
+            ),
+        'map' => array(
+            '__key' => 'name',
+            '__type' => '__type',
+            '__members' => '__members',
+            '__owner' => '__owner',
+            '__uid' => '__uid',
+            'name' => 'fullname',
+            'email' => 'email',
+            'alias' => 'alias',
+            'company' => 'company',
+            'notes' => 'notes',
+            'workPhone' => 'phone-work',
+            'fax' => 'fax',
+            'homePhone' => 'phone-home',
+            'cellPhone' => 'cellphone',
+            'freebusyUrl' => 'freebusyUrl'
+            ),
+        'search' => array(
+            'name',
+            'email',
+            'alias',
+            'company',
+            'homePhone'
+            ),
+        'strict' => array(),
+        'export' => true,
+        'browse' => true,
+        'use_shares' => false,
+        );
+
+    /**
+     * Get any other address books this user might be privy to.
+     * The values for attributes such as 'export' and 'browse' for books
+     * that are added below will be the same as the values set in the default
+     * book above. Any entries defined explicitly in cfgSources[]
+     * will override any entries gathered dynamically below.
+     */
+     if (empty($cfgSources['imsp']['use_shares'])) {
+        require_once 'Net/IMSP/Utils.php';
+        $result = Net_IMSP_Utils::getAllBooks($cfgSources['imsp']);
+
+        if (!is_a($result, 'PEAR_Error')) {
+            $resultCount = count($result);
+            for ($i = 0; $i < $resultCount; $i++) {
+                // Make sure we didn't define this source explicitly,
+                // but set the acls from the server regardless.
+                $dup = false;
+                foreach ($cfgSources as $key => $thisSource) {
+                    if (($thisSource['type'] == 'imsp') &&
+                        ($thisSource['params']['name'] == $result[$i]['params']['name'])) {
+
+                        $dup = true;
+                        $acl = $result[$i]['params']['my_rights'];
+                        $cfgSources[$key]['params']['my_rights'] = $acl;
+                        break;
+                    }
+                }
+                if (!$dup) {
+                    $cfgSources[$result[$i]['params']['name']] = $result[$i];
+                }
+            }
+        } else {
+            $notification->push($result);
+        }
+     }
+}
+/* End IMSP sources. */
+
+/* Begin Kolab sources. */
+if (!empty($GLOBALS['conf']['kolab']['enabled'])) {
+
+    /* Only use LDAP if we have that extension in PHP */
+    if (function_exists('ldap_connect')) {
+        require_once 'Horde/Kolab.php';
+
+        if (!is_callable('Kolab', 'getServer')) {
+            $_kolab_server = $GLOBALS['conf']['kolab']['ldap']['server'];
+        } else {
+            $_kolab_server = Kolab::getServer('ldap');
+        }
+
+        /* A global address book for a Kolab Server. This is typically a
+         * read-only public directory, stored in the default Kolab LDAP server.
+         * The user accessing this should have read permissions to the shared
+         * directory in LDAP. */
+        $cfgSources['kolab_global'] = array(
+            'title' => _("Global Address Book"),
+            'type' => 'ldap',
+            'params' => array(
+                'server' => $_kolab_server,
+                'port' => $GLOBALS['conf']['kolab']['ldap']['port'],
+                'tls' => false,
+                'root' => $GLOBALS['conf']['kolab']['ldap']['basedn'],
+                'sizelimit' => 200,
+                'dn' => array('cn'),
+                'objectclass' => array(
+                    'inetOrgPerson'
+                ),
+                'scope' => 'sub',
+                'charset' => 'utf-8',
+                'version' => 3,
+                'bind_dn' => '',
+                'bind_password' => '',
+            ),
+            'map' => array(
+                '__key'             => 'dn',
+                'name'              => 'cn',
+                'firstname'         => 'givenName',
+                'lastname'          => 'sn',
+                'email'             => 'mail',
+                'alias'             => 'alias',
+                'title'             => 'title',
+                'company'           => 'o',
+                'workStreet'        => 'street',
+                'workCity'          => 'l',
+                'workProvince'      => 'st',
+                'workPostalCode'    => 'postalCode',
+                'workCountry'       => 'c',
+                'homePhone'         => 'homePhone',
+                'workPhone'         => 'telephoneNumber',
+                'cellPhone'         => 'mobile',
+                'fax'               => 'fax',
+                'notes'             => 'description',
+                'kolabHomeServer'   => 'kolabHomeServer',
+                'freebusyUrl'       => array('fields' => array('kolabHomeServer', 'email'),
+                                             'format' => 'https://%s/freebusy/%s.ifb'),
+            ),
+            'search' => array(
+                'name',
+                'firstname',
+                'lastname',
+                'email',
+                'title',
+                'company',
+                'workAddress',
+                'workCity',
+                'workProvince',
+                'workPostalCode',
+                'workCountry',
+                'homePhone',
+                'workPhone',
+                'cellPhone',
+                'fax',
+                'notes',
+            ),
+            'strict' => array(
+                'dn',
+            ),
+            'export' => true,
+            'browse' => true,
+        );
+    }
+
+    /**
+     * The local address books for a Kolab user. These are stored in specially
+     * flagged contact folder within the users Cyrus IMAP mailbox.
+     *
+     * Still missing attributes are:
+     *
+     *   picture, sensitivity
+     */
+
+    $cfgSources['kolab'] = array(
+        'title' => _("Contacts"),
+        'type' => 'kolab',
+        'params' => array(
+            'charset' => 'utf-8',
+        ),
+        'list_name_field' => 'lastname',
+        'map' => array(
+            '__key' => 'uid',
+            '__uid' => 'uid',
+            '__type' => '__type',
+            '__members' => '__members',
+            /* Personal */
+            'name' => array('fields' => array('firstname', 'middlenames', 'lastname'),
+                            'format' => '%s %s %s',
+                            'parse' => array(
+                                array('fields' => array('firstname', 'middlenames',
+                                                        'lastname'),
+                                      'format' => '%s %s %s'),
+                                array('fields' => array( 'lastname', 'firstname'),
+                                      'format' => '%s, %s'),
+                                array('fields' => array('firstname', 'lastname'),
+                                      'format' => '%s %s'),
+                            )),
+            'firstname'         => 'given-name',
+            'lastname'          => 'last-name',
+            'middlenames'       => 'middle-names',
+            'namePrefix'        => 'prefix',
+            'nameSuffix'        => 'suffix',
+            'initials'          => 'initials',
+            'nickname'          => 'nick-name',
+            'photo'             => 'photo',
+            'phototype'         => 'phototype',
+            'gender'            => 'gender',
+            'birthday'          => 'birthday',
+            'spouse'            => 'spouse-name',
+            'anniversary'       => 'anniversary',
+            'children'          => 'children',
+            /* Location */
+            'workStreet'        => 'addr-business-street',
+            'workCity'          => 'addr-business-locality',
+            'workProvince'      => 'addr-business-region',
+            'workPostalCode'    => 'addr-business-postal-code',
+            'workCountry'       => 'addr-business-country',
+            'homeStreet'        => 'addr-home-street',
+            'homeCity'          => 'addr-home-locality',
+            'homeProvince'      => 'addr-home-region',
+            'homePostalCode'    => 'addr-home-postal-code',
+            'homeCountry'       => 'addr-home-country',
+            /* Communications */
+            'emails'            => 'emails',
+            'homePhone'         => 'phone-home1',
+            'workPhone'         => 'phone-business1',
+            'cellPhone'         => 'phone-mobile',
+            'fax'               => 'phone-businessfax',
+            'instantMessenger'  => 'im-address',
+            /* Organization */
+            'title'             => 'job-title',
+            'role'              => 'profession',
+            'company'           => 'organization',
+            'department'        => 'department',
+            'office'            => 'office-location',
+            'manager'           => 'manager-name',
+            'assistant'         => 'assistant',
+            /* Other */
+            'category'          => 'categories',
+            'notes'             => 'body',
+            'website'           => 'web-page',
+            'freebusyUrl'       => 'free-busy-url',
+            'language'          => 'language',
+            'latitude'          => 'latitude',
+            'longitude'         => 'longitude',
+            /* Invisible */
+            'email'             => 'email',
+            'pgpPublicKey'      => 'pgp-publickey',
+        ),
+        'tabs' => array(
+            _("Personal") => array('name', 'firstname', 'lastname', 'middlenames',
+                                   'namePrefix', 'nameSuffix', 'initials', 'nickname',
+                                   'photo', 'gender', 'birthday', 'spouse', 'anniversary',
+                                   'children'),
+            _("Location") => array('homeStreet', 'homeCity', 'homeProvince',
+                                   'homePostalCode', 'homeCountry', 'workStreet',
+                                   'workCity', 'workProvince', 'workPostalCode',
+                                   'workCountry'),
+            _("Communications") => array('emails', 'homePhone', 'workPhone',
+                                         'cellPhone', 'fax', 'instantMessenger'),
+            _("Organization") => array('title', 'role', 'company', 'department',
+                                       'office', 'manager', 'assistant'),
+            _("Other") => array('category', 'notes', 'website', 'freebusyUrl',
+                                'language', 'latitude', 'longitude'),
+        ),
+        'search' => array(
+            /* Personal */
+            'name',
+            'firstname',
+            'lastname',
+            'middlenames',
+            'namePrefix',
+            'nameSuffix',
+            'initials',
+            'nickname',
+            'gender',
+            'birthday',
+            'spouse',
+            'anniversary',
+            'children',
+            /* Location */
+            'workStreet',
+            'workCity',
+            'workProvince',
+            'workPostalCode',
+            'workCountry',
+            'homeStreet',
+            'homeCity',
+            'homeProvince',
+            'homePostalCode',
+            'homeCountry',
+            /* Communications */
+            'emails',
+            'homePhone',
+            'workPhone',
+            'cellPhone',
+            'fax',
+            'instantMessenger',
+            /* Organization */
+            'title',
+            'role',
+            'company',
+            'department',
+            'office',
+            'manager',
+            'assistant',
+            /* Other */
+            'category',
+            'notes',
+            'website',
+            'language',
+        ),
+        'strict' => array(
+            'uid',
+        ),
+        'export' => true,
+        'browse' => true,
+        'use_shares' => true,
+        'shares_only' => true,
+    );
+}
+/* End Kolab sources. */
diff --git a/turba/contact.php b/turba/contact.php
new file mode 100644 (file)
index 0000000..024518c
--- /dev/null
@@ -0,0 +1,124 @@
+<?php
+/**
+ * Turba contact.php.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+$vars = Horde_Variables::getDefaultVariables();
+$source = $vars->get('source');
+if (!isset($GLOBALS['cfgSources'][$source])) {
+    $notification->push(_("The contact you requested does not exist."));
+    header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+    exit;
+}
+
+/* Set the contact from the key requested. */
+$driver = Turba_Driver::singleton($source);
+if ($driver instanceof PEAR_Error) {
+    $notification->push($driver->getMessage(), 'horde.error');
+    header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+    exit;
+}
+
+$contact = null;
+$uid = $vars->get('uid');
+if (!empty($uid)) {
+    $search = $driver->search(array('__uid' => $uid));
+    if (!($search instanceof PEAR_Error) && $search->count()) {
+        $contact = $search->next();
+        $vars->set('key', $contact->getValue('__key'));
+    }
+}
+if (!$contact || ($contact instanceof PEAR_Error)) {
+    $contact = $driver->getObject($vars->get('key'));
+    if ($contact instanceof PEAR_Error) {
+        $notification->push($contact->getMessage(), 'horde.error');
+        header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+        exit;
+    }
+}
+
+// Mark this contact as the user's own?
+if ($vars->get('action') == 'mark_own') {
+    $prefs->setValue('own_contact', $source . ';' . $contact->getValue('__key'));
+    $notification->push(_("This contact has been marked as your own."), 'horde.success');
+}
+
+// Are we printing?
+$print_view = (bool)Horde_Util::getFormData('print');
+
+// Get view.
+$viewName = Horde_Util::getFormData('view', 'Contact');
+switch ($viewName) {
+case 'Contact':
+    $view = new Turba_View_Contact($contact, $print_view);
+    if (!$vars->get('url')) {
+        $vars->set('url', $contact->url(null, true));
+    }
+    break;
+
+case 'EditContact':
+    $view = new Turba_View_EditContact($contact);
+    break;
+
+case 'DeleteContact':
+    $view = new Turba_View_DeleteContact($contact);
+    break;
+}
+
+// Get tabs.
+$url = $contact->url();
+$tabs = new Horde_UI_Tabs('view', $vars);
+$tabs->addTab(_("_View"), $url,
+              array('tabname' => 'Contact', 'id' => 'tabContact', 'onclick' => 'return ShowTab(\'Contact\');'));
+if ($contact->hasPermission(PERMS_EDIT)) {
+    $tabs->addTab(_("_Edit"), $url,
+                  array('tabname' => 'EditContact', 'id' => 'tabEditContact', 'onclick' => 'return ShowTab(\'EditContact\');'));
+}
+if ($contact->hasPermission(PERMS_DELETE)) {
+    $tabs->addTab(_("De_lete"), $url,
+                  array('tabname' => 'DeleteContact', 'id' => 'tabDeleteContact', 'onclick' => 'return ShowTab(\'DeleteContact\');'));
+}
+
+@list($own_source, $own_id) = explode(';', $prefs->getValue('own_contact'));
+if ($own_source == $source && $own_id == $contact->getValue('__key')) {
+    $own_icon = ' ' . Horde::img('user.png', _("Your own contact"),
+                                 array('title' => _("Your own contact")),
+                                 $registry->getImageDir('horde'));
+    $own_link = '';
+} else {
+    $own_icon = '';
+    $own_link = '<span class="smallheader rightFloat">'
+        . Horde::link(Horde_Util::addParameter($url, array('action' => 'mark_own')))
+        . _("Mark this as your own contact") . '</a></span>';
+}
+
+$title = $view->getTitle();
+Horde::addScriptFile('prototype.js', 'horde', true);
+Horde::addScriptFile('contact_tabs.js', 'turba', true);
+require TURBA_TEMPLATES . '/common-header.inc';
+if ($print_view) {
+    require_once $registry->get('templates', 'horde') . '/javascript/print.js';
+} else {
+    require TURBA_TEMPLATES . '/menu.inc';
+}
+echo '<div id="page">';
+if (!$print_view) {
+    echo $tabs->render($viewName);
+}
+echo '<h1 class="header">' . $own_link
+    . ($contact->getValue('name')
+       ? htmlspecialchars($contact->getValue('name'))
+       : '<em>' . _("Blank name") . '</em>')
+    . $own_icon . '</h1>';
+$view->html();
+echo '</div>';
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/data.php b/turba/data.php
new file mode 100644 (file)
index 0000000..f3e1fc4
--- /dev/null
@@ -0,0 +1,545 @@
+<?php
+/**
+ * Turba data.php.
+ *
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Jan Schneider <jan@horde.org>
+ */
+
+function _cleanup()
+{
+    global $import_step;
+    $import_step = 1;
+    return Horde_Data::IMPORT_FILE;
+}
+
+/**
+ * Remove empty attributes from attributes array.
+ *
+ * @param mixed $val  Value from attributes array.
+ *
+ * @return boolean  Boolean used by array_filter.
+ */
+function _emptyAttributeFilter($var)
+{
+    if (!is_array($var)) {
+        return ($var != '');
+    }
+
+    foreach ($var as $v) {
+        if ($v == '') {
+            return false;
+        }
+    }
+
+    return true;
+}
+
+/**
+ * Static function to make a given email address rfc822 compliant.
+ *
+ * @param string $address  An email address.
+ * @param boolean $allow_multi  Allow multiple email addresses.
+ *
+ * @return string  The RFC822-formatted email address.
+ */
+function _getBareEmail($address, $allow_multi = false)
+{
+    // Empty values are still empty.
+    if (!$address) {
+        return $address;
+    }
+
+    static $rfc822;
+    if (is_null($rfc822)) {
+        $rfc822 = new Mail_RFC822();
+    }
+
+    // Split multiple email addresses
+    if ($allow_multi) {
+        $addrs = Horde_Mime_Address::explode($address);
+    } else {
+        $addrs = array($address);
+    }
+
+    $result = array();
+    foreach ($addrs as $addr) {
+        $addr = trim($addr);
+
+        if ($rfc822->validateMailbox($addr)) {
+            $result[] = Horde_Mime_Address::writeAddress($addr->mailbox, $addr->host);
+        }
+    }
+
+    return implode(', ', $result);
+}
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+if (!$conf['menu']['import_export']) {
+    require TURBA_BASE . '/index.php';
+    exit;
+}
+
+/* If there are absolutely no valid sources, abort. */
+if (!$cfgSources) {
+    $notification->push(_("No Address Books are currently available. Import and Export is disabled."), 'horde.error');
+    require TURBA_TEMPLATES . '/common-header.inc';
+    require TURBA_TEMPLATES . '/menu.inc';
+    require $registry->get('templates', 'horde') . '/common-footer.inc';
+    exit;
+}
+
+/* Importable file types. */
+$file_types = array('csv'      => _("CSV"),
+                    'tsv'      => _("TSV"),
+                    'vcard'    => _("vCard"),
+                    'mulberry' => _("Mulberry Address Book"),
+                    'pine'     => _("Pine Address Book"),
+                    'ldif'     => _("LDIF Address Book"));
+
+/* Templates for the different import steps. */
+$templates = array(
+    Horde_Data::IMPORT_FILE => array(TURBA_TEMPLATES . '/data/export.inc'),
+    Horde_Data::IMPORT_CSV => array($registry->get('templates', 'horde') . '/data/csvinfo.inc'),
+    Horde_Data::IMPORT_TSV => array($registry->get('templates', 'horde') . '/data/tsvinfo.inc'),
+    Horde_Data::IMPORT_MAPPED => array($registry->get('templates', 'horde') . '/data/csvmap.inc'),
+    Horde_Data::IMPORT_DATETIME => array($registry->get('templates', 'horde') . '/data/datemap.inc')
+);
+
+/* Initial values. */
+$import_step = Horde_Util::getFormData('import_step', 0) + 1;
+$actionID = Horde_Util::getFormData('actionID');
+$next_step = Horde_Data::IMPORT_FILE;
+$app_fields = $time_fields = array();
+$error = false;
+$outlook_mapping = array(
+    'Title' => 'namePrefix',
+    'First Name' => 'firstname',
+    'Middle Name' => 'middlenames',
+    'Last Name' => 'lastname',
+    'Nickname' => 'nickname',
+    'Suffix' => 'nameSuffix',
+    'Company' => 'company',
+    'Department' => 'department',
+    'Job Title' => 'title',
+    'Business Street' => 'workStreet',
+    'Business City' => 'workCity',
+    'Business State' => 'workProvince',
+    'Business Postal Code' => 'workPostalCode',
+    'Business Country' => 'workCountry',
+    'Home Street' => 'homeStreet',
+    'Home City' => 'homeCity',
+    'Home State' => 'homeProvince',
+    'Home Postal Code' => 'homePostalCode',
+    'Home Country' => 'homeCountry',
+    'Business Fax' => 'workFax',
+    'Business Phone' => 'workPhone',
+    'Home Phone' => 'homePhone',
+    'Mobile Phone' => 'cellPhone',
+    'Pager' => 'pager',
+    'Anniversary' => 'anniversary',
+    'Assistant\'s Name' => 'assistant',
+    'Birthday' => 'birthday',
+    'Business Address PO Box' => 'workPOBox',
+    'Categories' => 'category',
+    'Children' => 'children',
+    'E-mail Address' => 'email',
+    'Home Address PO Box' => 'homePOBox',
+    'Initials' => 'initials',
+    'Internet Free Busy' => 'freebusyUrl',
+    'Language' => 'language',
+    'Notes' => 'notes',
+    'Profession' => 'role',
+    'Office Location' => 'office',
+    'Spouse' => 'spouse',
+    'Web Page' => 'website',
+);
+$import_mapping = array(
+    'e-mail' => 'email',
+    'homeaddress' => 'homeAddress',
+    'businessaddress' => 'workAddress',
+    'homephone' => 'homePhone',
+    'businessphone' => 'workPhone',
+    'mobilephone' => 'cellPhone',
+    'businessfax' => 'fax',
+    'jobtitle' => 'title',
+    'internetfreebusy' => 'freebusyUrl',
+
+    // Entourage on MacOS
+    'Dept' => 'department',
+    'Work Street Address' => 'workStreet',
+    'Work City' => 'workCity',
+    'Work State' => 'workProvince',
+    'Work Zip' => 'workPostalCode',
+    'Work Country/Region' => 'workCountry',
+    'Home Street Address' => 'homeStreet',
+    'Home City' => 'homeCity',
+    'Home State' => 'homeProvince',
+    'Home Zip' => 'homePostalCode',
+    'Home Country/Region' => 'homeCountry',
+    'Work Fax' => 'workFax',
+    'Work Phone 1' => 'workPhone',
+    'Home Phone 1' => 'homePhone',
+    'Instant Messaging 1' => 'instantMessenger',
+
+    // Thunderbird
+    'Primary Email' => 'email',
+    'Fax Number' => 'fax',
+    'Pager Number' => 'pager',
+    'Mobile Number' => 'Mobile Phone',
+    'Home Address' => 'homeStreet',
+    'Home ZipCode' => 'homePostalCode',
+    'Work Address' => 'workStreet',
+    'Work ZipCode' => 'workPostalCode',
+    'Work Country' => 'workCountry',
+    'Work Phone' => 'workPhone',
+    'Organization' => 'company',
+    'Web Page 1' => 'website',
+);
+$param = array('time_fields' => $time_fields,
+               'file_types'  => $file_types,
+               'import_mapping' => array_merge($outlook_mapping, $import_mapping));
+$import_format = Horde_Util::getFormData('import_format', '');
+if ($import_format == 'mulberry' || $import_format == 'pine') {
+    $import_format = 'tsv';
+}
+if ($actionID != 'select') {
+    array_unshift($templates[Horde_Data::IMPORT_FILE], TURBA_TEMPLATES . '/data/import.inc');
+}
+
+/* Loop through the action handlers. */
+switch ($actionID) {
+case 'export':
+    $sources = array();
+    if (Horde_Util::getFormData('selected')) {
+        foreach (Horde_Util::getFormData('objectkeys') as $objectkey) {
+            list($source, $key) = explode(':', $objectkey, 2);
+            if (!isset($sources[$source])) {
+                $sources[$source] = array();
+            }
+            $sources[$source][] = $key;
+        }
+    } else {
+        $source = Horde_Util::getFormData('source');
+        if (!isset($source) && !empty($cfgSources)) {
+            reset($cfgSources);
+            $source = key($cfgSources);
+        }
+        $sources[$source] = array();
+    }
+
+    $data = array();
+    $contacts = array();
+    $all_fields = array();
+    foreach ($sources as $source => $objectkeys) {
+        /* Create a Turba storage instance. */
+        $driver = Turba_Driver::singleton($source);
+        if ($driver instanceof PEAR_Error) {
+            $notification->push(sprintf(_("Failed to access the address book: %s"), $driver->getMessage()), 'horde.error');
+            $error = true;
+            break;
+        }
+
+        /* Get the full, sorted contact list. */
+        if (count($objectkeys)) {
+            $results = &$driver->getObjects($objectkeys);
+        } else {
+            $results = $driver->search(array());
+            if ($results instanceof Turba_List) {
+                $results = $results->objects;
+            }
+        }
+        if ($results instanceof PEAR_Error) {
+            $notification->push(sprintf(_("Failed to search the directory: %s"), $results->getMessage()), 'horde.error');
+            $error = true;
+            break;
+        }
+
+        $fields = array_keys($driver->map);
+        $all_fields = array_merge($all_fields, $fields);
+        $params = $driver->getParams();
+        foreach ($results as $ob) {
+            $row = array();
+            foreach ($fields as $field) {
+                if (substr($field, 0, 2) != '__') {
+                    $attribute = $ob->getValue($field);
+                    if ($attributes[$field]['type'] == 'date') {
+                        $row[$field] = strftime('%Y-%m-%d', $attribute);
+                    } elseif ($attributes[$field]['type'] == 'time') {
+                        $row[$field] = strftime('%R', $attribute);
+                    } elseif ($attributes[$field]['type'] == 'datetime') {
+                        $row[$field] = strftime('%Y-%m-%d %R', $attribute);
+                    } else {
+                        $row[$field] = Horde_String::convertCharset($attribute, Horde_Nls::getCharset(), $params['charset']);
+                    }
+                }
+            }
+            $data[] = $row;
+        }
+
+        $contacts = array_merge($contacts, $results);
+    }
+    if (!count($data)) {
+        $notification->push(_("There were no addresses to export."), 'horde.message');
+        $error = true;
+        break;
+    }
+
+    /* Make sure that all rows have the same columns if exporting from
+     * different sources. */
+    if (count($sources) > 1) {
+        for ($i = 0; $i < count($data); $i++) {
+            foreach ($all_fields as $field) {
+                if (!isset($data[$i][$field])) {
+                    $data[$i][$field] = '';
+                }
+            }
+        }
+    }
+
+    switch (Horde_Util::getFormData('exportID')) {
+    case Horde_Data::EXPORT_CSV:
+        $csv = Horde_Data::singleton('csv');
+        $csv->exportFile(_("contacts.csv"), $data, true);
+        exit;
+
+    case Horde_Data::EXPORT_OUTLOOKCSV:
+        $csv = Horde_Data::singleton('outlookcsv');
+        $csv->exportFile(_("contacts.csv"), $data, true, array_flip($outlook_mapping));
+        exit;
+
+    case Horde_Data::EXPORT_TSV:
+        $tsv = Horde_Data::singleton('tsv');
+        $tsv->exportFile(_("contacts.tsv"), $data, true);
+        exit;
+
+    case Horde_Data::EXPORT_VCARD:
+        $cards = array();
+        foreach ($contacts as $contact) {
+            $cards[] = Turba_Driver::tovCard($contact);
+        }
+
+        $vcard = Horde_Data::singleton('vcard');
+        $vcard->exportFile(_("contacts.vcf"), $cards, true);
+        exit;
+
+    case 'ldif':
+        $ldif = Horde_Data::singleton(array('turba', 'ldif'));
+        $ldif->exportFile(_("contacts.ldif"), $data, true);
+        exit;
+    }
+    break;
+
+case Horde_Data::IMPORT_FILE:
+    $dest = Horde_Util::getFormData('dest');
+    $driver = Turba_Driver::singleton($dest);
+    if ($driver instanceof PEAR_Error) {
+        $notification->push(sprintf(_("Failed to access the address book: %s"), $driver->getMessage()), 'horde.error');
+        $error = true;
+        break;
+    }
+
+    /* Check permissions. */
+    $max_contacts = Turba::getExtendedPermission($driver, 'max_contacts');
+    if ($max_contacts !== true &&
+        $max_contacts <= $driver->count()) {
+        $message = @htmlspecialchars(sprintf(_("You are not allowed to create more than %d contacts in \"%s\"."), $max_contacts, $driver->title), ENT_COMPAT, Horde_Nls::getCharset());
+        if (!empty($conf['hooks']['permsdenied'])) {
+            $message = Horde::callHook('_perms_hook_denied', array('turba:max_contacts'), 'horde', $message);
+        }
+        $notification->push($message, 'horde.error', array('content.raw'));
+        $error = true;
+        break;
+    }
+
+    $_SESSION['import_data']['target'] = $dest;
+    $_SESSION['import_data']['purge'] = Horde_Util::getFormData('purge');
+    break;
+
+case Horde_Data::IMPORT_MAPPED:
+case Horde_Data::IMPORT_DATETIME:
+    foreach ($cfgSources[$_SESSION['import_data']['target']]['map'] as $field => $null) {
+        if (substr($field, 0, 2) != '__' && !is_array($null)) {
+            if ($attributes[$field]['type'] == 'monthyear' ||
+                $attributes[$field]['type'] == 'monthdayyear') {
+                $time_fields[$field] = 'date';
+            } elseif ($attributes[$field]['type'] == 'time') {
+                $time_fields[$field] = 'time';
+            }
+        }
+    }
+    $param['time_fields'] = $time_fields;
+    break;
+}
+
+if (!$error && !empty($import_format)) {
+    if ($import_format == 'ldif') {
+        $data = Horde_Data::singleton(array('turba', $import_format));
+    } else {
+        $data = Horde_Data::singleton($import_format);
+    }
+    if ($data instanceof PEAR_Error) {
+        $notification->push(_("This file format is not supported."), 'horde.error');
+        $next_step = Horde_Data::IMPORT_FILE;
+    } else {
+        $next_step = $data->nextStep($actionID, $param);
+        if ($next_step instanceof PEAR_Error) {
+            $notification->push($next_step->getMessage(), 'horde.error');
+            $next_step = $data->cleanup();
+        } else {
+            /* Raise warnings if some exist. */
+            if (method_exists($data, 'warnings')) {
+                $warnings = $data->warnings();
+                if (count($warnings)) {
+                    foreach ($warnings as $warning) {
+                        $notification->push($warning, 'horde.warning');
+                    }
+                    $notification->push(_("The import can be finished despite the warnings."), 'horde.message');
+                }
+            }
+        }
+    }
+}
+
+/* We have a final result set. */
+if (is_array($next_step)) {
+    /* Create a category manager. */
+    require_once 'Horde/Prefs/CategoryManager.php';
+    $cManager = new Prefs_CategoryManager();
+    $categories = $cManager->get();
+
+    /* Create a Turba storage instance. */
+    $dest = $_SESSION['import_data']['target'];
+    $driver = Turba_Driver::singleton($dest);
+    if ($driver instanceof PEAR_Error) {
+        $notification->push(sprintf(_("Failed to access the address book: %s"), $driver->getMessage()), 'horde.error');
+    } elseif (!count($next_step)) {
+        $notification->push(sprintf(_("The %s file didn't contain any contacts."),
+                                    $file_types[$_SESSION['import_data']['format']]), 'horde.error');
+    } else {
+        /* Purge old address book if requested. */
+        if ($_SESSION['import_data']['purge']) {
+            $result = $driver->deleteAll();
+            if ($result instanceof PEAR_Error) {
+                $notification->push(sprintf(_("The address book could not be purged: %s"), $result->getMessage()), 'horde.error');
+            } else {
+                $notification->push(_("Address book successfully purged."), 'horde.success');
+            }
+        }
+
+        $error = false;
+        foreach ($next_step as $row) {
+            if ($row instanceof Horde_iCalendar_vcard) {
+                $row = $driver->toHash($row);
+            }
+
+            /* Don't search for empty attributes. */
+            $row = array_filter($row, '_emptyAttributeFilter');
+            $result = $driver->search($row);
+            if ($result instanceof PEAR_Error) {
+                $notification->push($result, 'horde.error');
+                $error = true;
+                break;
+            } elseif ($result->count()) {
+                $result->reset();
+                $object = $result->next();
+                $notification->push(sprintf(_("\"%s\" already exists and was not imported."),
+                                            $object->getValue('name')), 'horde.message');
+            } else {
+                /* Check for, and validate, any email fields */
+                foreach (array_keys($row) as $field) {
+                    if ($attributes[$field]['type'] == 'email') {
+                        $allow_multi = is_array($attributes[$field]['params']) &&
+                            !empty($attributes[$field]['params']['allow_multi']);
+                        $row[$field] = _getBareEmail($row[$field], $allow_multi);
+                    }
+                }
+                $row['__owner'] = $driver->getContactOwner();
+                $result = $driver->add($row);
+                if (is_a($result, 'PEAR_Error')) {
+                    $notification->push(sprintf(_("There was an error importing the data: %s"),
+                                                $result->getMessage()), 'horde.error');
+                    $error = true;
+                    break;
+                }
+
+                if (!empty($row['category']) &&
+                    !in_array($row['category'], $categories)) {
+                    $cManager->add($row['category']);
+                    $categories[] = $row['category'];
+                }
+            }
+        }
+        if (!$error) {
+            $notification->push(sprintf(_("%s file successfully imported."),
+                                        $file_types[$_SESSION['import_data']['format']]), 'horde.success');
+        }
+    }
+    $next_step = $data->cleanup();
+}
+
+switch ($next_step) {
+case Horde_Data::IMPORT_MAPPED:
+case Horde_Data::IMPORT_DATETIME:
+    foreach ($cfgSources[$_SESSION['import_data']['target']]['map'] as $field => $null) {
+        if (substr($field, 0, 2) != '__' && !is_array($null)) {
+            $app_fields[$field] = $attributes[$field]['label'];
+        }
+    }
+    break;
+}
+
+$title = _("Import/Export Address Books");
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+
+$default_source = $prefs->getValue('default_dir');
+if ($next_step == Horde_Data::IMPORT_FILE) {
+    /* Build the directory sources select widget. */
+    $unique_source = '';
+    $source_options = array();
+    foreach (Turba::getAddressBooks() as $key => $entry) {
+        if (!empty($entry['export'])) {
+            $source_options[] = '<option value="' . htmlspecialchars($key) . '">' .
+                htmlspecialchars($entry['title']) . "</option>\n";
+            $unique_source = $key;
+        }
+    }
+
+    /* Build the directory destination select widget. */
+    $unique_dest = '';
+    $dest_options = array();
+    $hasWriteable = false;
+    foreach (Turba::getAddressBooks(PERMS_EDIT) as $key => $entry) {
+        $selected = ($key == $default_source) ? ' selected="selected"' : '';
+        $dest_options[] = '<option value="' . htmlspecialchars($key) . '" ' . $selected . '>' .
+            htmlspecialchars($entry['title']) . "</option>\n";
+        $unique_dest = $key;
+        $hasWriteable = true;
+    }
+
+    if (!$hasWriteable) {
+        array_shift($templates[$next_step]);
+    }
+
+    /* Build the charset options. */
+    $charsets = Horde_Nls::$config['encodings'];
+    $all_charsets = Horde_Nls::$config['charsets'];
+    natcasesort($all_charsets);
+    foreach ($all_charsets as $charset) {
+        if (!isset($charsets[$charset])) {
+            $charsets[$charset] = $charset;
+        }
+    }
+    $my_charset = Horde_Nls::getCharset(true);
+}
+
+foreach ($templates[$next_step] as $template) {
+    require $template;
+}
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/delete.php b/turba/delete.php
new file mode 100644 (file)
index 0000000..16b4e6c
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Turba delete.php.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+$source = Horde_Util::getFormData('source');
+$key = Horde_Util::getFormData('key');
+$driver = Turba_Driver::singleton($source);
+
+if ($conf['documents']['type'] != 'none') {
+    $object = $driver->getObject($key);
+    if (is_a($object, 'PEAR_Error')) {
+        $notification->push($object->getMessage(), 'horde.error');
+        header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+        exit;
+    }
+    if (is_a($deleted = $object->deleteFiles(), 'PEAR_Error')) {
+        $notification->push($deleted, 'horde.error');
+        header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+        exit;
+    }
+}
+
+if (!is_a($result = $driver->delete($key), 'PEAR_Error')) {
+    header('Location: ' . Horde_Util::getFormData('url', Horde::url($prefs->getValue('initial_page'), true)));
+    exit;
+}
+
+$notification->push(sprintf(_("There was an error deleting this contact: %s"), $result->getMessage()), 'horde.error');
+$title = _("Deletion failed");
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/deletefile.php b/turba/deletefile.php
new file mode 100644 (file)
index 0000000..ca702f9
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Turba deletefile.php.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+if ($conf['documents']['type'] == 'none') {
+    exit;
+}
+
+$source = Horde_Util::getPost('source');
+if ($source === null || !isset($cfgSources[$source])) {
+    $notification->push(_("Not found"), 'horde.error');
+    header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+    exit;
+}
+
+$driver = Turba_Driver::singleton($source);
+$contact = $driver->getObject(Horde_Util::getPost('key'));
+if (is_a($contact, 'PEAR_Error')) {
+    $notification->push($contact, 'horde.error');
+    header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+    exit;
+}
+
+if (!$contact->isEditable()) {
+    $notification->push(_("Permission denied"), 'horde.error');
+    header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+    exit;
+}
+
+$file = Horde_Util::getPost('file');
+$result = $contact->deleteFile($file);
+if (is_a($result, 'PEAR_Error')) {
+    $notification->push($result, 'horde.error');
+} else {
+    $notification->push(sprintf(_("The file \"%s\" has been deleted."), $file), 'horde.success');
+}
+$url = header('Location: ' . $contact->url('Contact', true));
diff --git a/turba/docs/CHANGES b/turba/docs/CHANGES
new file mode 100644 (file)
index 0000000..a0705a3
--- /dev/null
@@ -0,0 +1,918 @@
+--------
+v3.0-git
+--------
+
+[jan] Support X-ANNIVERSARY, X-CHILDREN, and X-SPOUSE vCard fields.
+
+
+----------
+v2.3.2-cvs
+----------
+
+[mjr] Add new API method for retrieving the default share for a source.
+[jan] Don't overwrite the compositing fields, when importing composite fields.
+[cjh] Fix searches for multiple strict fields and at least one non-strict field
+      (tinu@humbapa.ch, Bug #7876).
+[mjr] Specific timeobject categories are now only advertised when they are
+      present in a configured source.
+
+
+------
+v2.3.1
+------
+
+[jan] SECURITY: Escape output in test.php.
+[jan] Add script to import contacts from SquirrelMail database.
+[gwr] Correct support for the freebusy URL in Kolab.
+[gwr] Add photo support for the Kolab driver.
+[jan] Import broken vCards from Synthesis clients (Bug #7407).
+[cjh] Add two retries to find a contact after adding it (Bug #7478).
+[cjh] Add a PostgreSQL-specific upgrade script for 2.2.1 to 2.3
+      (michael.menge@zdv.uni-tuebingen.de, Bug #7462).
+[jan] Don't overwrite empty address books preference when creating new shares
+      (Bug #7399).
+[mms] Upgrade prototype.js to v1.6.0.3.
+
+
+----
+v2.3
+----
+
+[jan] Change group field in shares table to work with LDAP groups (Bug #6883).
+[jan] Fix exporting address books with country fields as vCards (Bug #7372).
+[mjr] Make sure we use all address books when searching via the api and the
+      user's addressbooks pref is empty (Bug #7357).
+[mjr] Correctly calculate the age of time objects (Bug #7330).
+
+
+--------
+v2.3-RC1
+--------
+
+[jan] Improve vCard EMAIL field parsing (Bug #7281).
+[jan] Correctly import and export address extensions (Bug #7279).
+[jan] Export full country names to vCard addresses.
+[jan] Respect precedence of multiple vCard properties (Request #7122).
+[jan] Remove deleted address books from address book preference (Request #6938).
+[jan] Export LABEL properties to vCard if address fields are available.
+[gwr] Add support for storing public PGP keys when using Kolab.
+[gwr] Add support for adding addresses from IMP when using Kolab.
+[jan] Add configuration option for an alternative name field.
+[jan] Add support for image fields to SQL driver (requires Horde 3.3).
+[jan] Add more default field mappings for CSV import (Request #6901).
+[jan] Update field names for Outlook 2003 export (Request #6901).
+[jan] Improve logic which entries to show in the sidebar menu.
+[jan] Add support for the category form field (Request #6884).
+[jan] Fix sorting so that sort order is always reflected correctly,
+      independent of name format.
+[jan] Add Basque translation (Euskal Herriko Unibertsitatea EHU/UPV
+      <xabier.arrieta@ehu.es>).
+[jan] Add ability to mark a contact as your own and API method to export it.
+[jan] Fix importing phone numbers from Synthesis clients (Bug #7011).
+[mjr] Fix issue with searching composite fields when the number of search terms
+      is less than the number of composed fields (Bug #6796)
+[cjh] Allow importing multiple address into an email field if allow_multi
+      is set to true on the field in attributes.php (Bug #6897).
+[mjr] Remove user permissions on all shares when deleting a user.
+[jan] Fix searching of client address books that have been disabled in the
+      preferences (Bug #6961).
+[mjr] Fix issue with removeUserData api that caused the deleted user's
+      address books to not be deleted as well as remove an erroneous error
+      notification (Bug #6969).
+[cjh] Fix the column selector/sorter in IE (Bug #6912).
+
+
+------
+v2.2.2
+------
+
+[jan] SECURITY: Escape output in test.php.
+
+
+------
+v2.2.1
+------
+
+[cjh] SECURITY: Escape contact names in the contact display view.
+[jan] Fix importing of certain phone numbers from vCard (Bug #6744).
+[mjr] Correct a function declaration in the 2.1_to_2.2_sql_schema.php upgrade
+      script that was causing fatal errors.
+
+
+----
+v2.2
+----
+
+[mjr] Fix importing email addresses from CSV files to be consistent with what
+      we allow to be entered via the UI. (Bug #6725)
+[cjh] Improve resource usage in datatree_to_sql share migration script
+      (Bug #6740).
+
+
+--------
+v2.2-RC4
+--------
+
+[cjh] Fix editing contacts that were accessed by UID (Bug #6672).
+[cjh] Apply fix for http://dev.rubyonrails.org/ticket/11473 to prototype.js
+      (Request #6590).
+[cjh] Add an upgrade script for the new SQL share driver (Request #6109).
+[cjh] Include composite fields in data exports (Bug #6517).
+[gwr] Add distribution list support to the Kolab driver.
+[cjh] Add vCard/syncing support for a large number of additional attributes
+      (horde@ssn.at, Request #6573).
+[cjh] Update composite fields in LDAP DNs (horde@ssn.at, Bug #6575).
+[mjr] Fix paging in search results.
+[cjh] Allow setting default values for attributes.
+[cjh] Show a browse link in the address book list for each address book
+      (thomas.jarosch@intra2net.com, Request #6613).
+[mjr] Fixed a bug that caused field values to get mismatched with the column
+      names when a single DB field is mapped to multiple Turba fields.
+[mjr] Fix changing sort order on the search view.
+[jan] Add preference to choose address books for synchronization.
+[jan] Improved importing of names from vCards (Bug #6568).
+[jan] Fix incomplete copying and moving of attributes to composite fields
+      (Bug #6565).
+[gwr] Fix the relation of key/uid within the Kolab driver.
+[gwr] Export/import of the emails attribute (Bug #6504).
+[mas] Encode DN correctly when exporting to LDIF. (Bug #6518).
+[gwr] Fix virtual address books when using shares.
+[gwr] Fix searching for the Kolab driver.
+[cjh] Replace the address book column sorter with a Scriptaculous-based one;
+      fixes re-ordering columns in some cases (Bug #6444).
+[jan] Always return to the last view after saving a contact.
+[jan] Correctly determine default address books in the API (SyncML, WebDAV).
+[jan] Add categories imported through the API (SyncML, WebDAV).
+[jan] Store categories as strings.
+[cjh] Show who created or made the last change to a contact along with the date
+      (Request #6305).
+[mjr] Prevent overwriting contact entries with the upgrade script (Bug #6308).
+
+
+--------
+v2.2-RC3
+--------
+
+[cjh] SECURITY: Fix unchecked access to contacts in the same SQL table
+      (Bug #6208) (CVE-2008-0807).
+[jan] Add configuration to more flexibly parse full names into the name parts.
+
+
+--------
+v2.2-RC2
+--------
+
+[jan] SECURITY: Fix privilege escalation in Horde API.
+[mjr] Degrade gracefully when no VFS is configured.
+[cjh] Fixed the share flattening upgrade script.
+[mjr] Fixed issue that caused mangling of composite fields when moving or
+      copying contacts from one address book to another (Bug #6058).
+[mjr] Fixed issue that caused listTimeObjects to only return objects from a
+      single address book when using a shared SQL source.
+[cjh] Update address book management UI to match other groupware apps.
+[jan] Trim composite field values before saving to the backend (Bug #5979).
+[mjr] Fixed issue where composite fields with 'attribute' value set were not
+      getting set in the backend when being imported via the API. (Bug #5978)
+[mjr] Time object categories are now automatically detected.
+[mjr] Fix issue that caused listTimeObjects API to miss returning objects when
+      the date range crosses over into the next year.
+[jan] Improved portability of the upgrade script (Bug #5949).
+[mjr] Added anniversary support to the listTimeObjects API.
+
+
+--------
+v2.2-RC1
+--------
+
+[jan] Fix birthday calculation on years before 1970 with DST (Bug #5791).
+[jan] Implement WebDAV DELETE.
+[jan] Change default SQL scheme to match with RFC 2426 (vCard 3.0) as closely
+      as possible.
+[cjh] Add $matchBegin to the clientSearch API method (duck@obala.net,
+      Request #5860).
+[cjh] Avoid variable names that might interfere with function variables in
+      sources.php.dist examples (Bug #5840).
+[jan] Add clientFields() API method.
+[mjr] More efficient fetching of entries when using the listTimeObjects API.
+[jan] Move all Turba-specific hook examples from Horde's config/ directory.
+[cjh] Fix generation of UIDs with PHP 5.2+.
+[cjh] Handle categories when converting to and from vCards
+      (rsalmon@mbpgroup.com, Bug #5648).
+[cjh] Catch searches that seem non-empty but really aren't (Bug #5612).
+[mjr] Fix fatal errors when no share enabled sources are present.
+[mjr] Fix issue with naming new contact lists that was causing database errors,
+      missing part of the contact list name, and other oddities.
+
+
+----------
+v2.2-ALPHA
+----------
+
+[cjh] Add support for approximate searches, if the underlying backend and Horde
+      code support them (Request #2901).
+[cjh] Add a print link for contacts (Request #2800).
+[cjh] Shared Address Books are now stored in a flat namespace so that they
+      do not rely on the hierarchical (i.e. DataTree) properties of the
+      Horde_Share API (Bug #4960).
+[cjh] If names are displayed "Lastname, Firstname", sort composite name
+      fields by lastname (Request #3909).
+[cjh] Show an overlay while running a search (Request #3154).
+[cjh] Add Anniversary, Spouse, and Children fields and support them in
+      vCard import/export (ntai@smartfruit.com, Request #5059).
+[cjh] Add LDIF import/export support (ritaselsky@gmail.com, Request #2506).
+[jan] Provide birthdays as events to external calendars (Request #723).
+[mjr] Add driver to create address books from current user's Horde_Group
+      memberships.
+[jan] Allow to search through API for matches at word boundaries only
+      (requires Horde 3.2).
+[cjh] Phase out old ObjectView class in favor of proper forms in
+      lib/Forms and views in lib/Views.
+[cjh] Support for dereferencing LDAP aliases (aubert@femto-st.fr,
+      Request #4532).
+[mas] Conform to WCAG 1.0 Priority 2/Section 508 accessibility guidelines.
+      (Request #4080)
+[cjh] Support vCard initials and salutation fields if present in the Turba
+      backend (s.heuer@hicom.de, Request #4248).
+[cjh] Don't show empty tabs if a contact does not have a full name (Bug #4243).
+[mjr] Add support for removing user data from backend storage when user is
+      removed from Horde.
+[jmf] Sort listings on multiple columns.
+[cjh] Show numeric and alpha pagers at the top of listings, not the bottom
+      (Bug #1312).
+[jan] Add multidomain support for Kolab servers (tokoe@kde.org, Request #3579).
+[jan] Use the same rendering code for contact details in the list views like
+      in the contact views.
+[jan] Allow editing of composite fields (horde@olen.net,
+      rkean@keanconsulting.com, Request #2529).
+[mjr] IMSP driver now has Horde_Share support.
+[cjh] Add dynamic filtering of lists of contacts.
+[mdj] Add support for split read/write database.
+[mdj] Add failover support for SQL backend.
+[mjr] Add virtual address book support.
+[jan] Add driver to list most favourite recipients.
+
+
+------
+v2.1.7
+------
+
+[cjh] SECURITY: Fix unchecked access to contacts in the same SQL table
+      (Bug #6208) (CVE-2008-0807).
+
+
+------
+v2.1.6
+------
+
+[jan] SECURITY: Fix privilege escalation in Horde API.
+
+
+------
+v2.1.5
+------
+
+[mjr] Fix some fatal errors caused by the IMSP driver when deleting certain
+      contacts and while adding contacts to lists in certain cases.
+[mjr] Fix adding contacts to a new contact list in a source other than the
+      source the contacts being added are from.
+[jan] Fix paging through search results from another than the default address
+      book (Bug #5137).
+[cjh] Fix copy/moving contacts to a new contact list (Bug #5144).
+
+
+------
+v2.1.4
+------
+
+[jan] Fix character set encoding of exported vCards.
+[mjr] Fix fatal error when exporting to vCard.
+[cjh] Organize basic search form from left to right (Request #4914).
+[jan] Fix links to only show contacts or lists, or both.
+[mjr] Don't remember the lastly selected address book in the session, if it
+      was not browseable.
+[mjr] Fix bug that caused counting the number of contacts in a shared SQL
+      source to return the count of the user's default address book instead.
+[mjr] Fix bug that caused the wrong address book to be deleted when replacing
+      an address book during import.
+
+
+------
+v2.1.3
+------
+
+[jan] Support departments in vCard's ORG properties (martin@matuska.org,
+      Request #4285).
+[cjh] Fix LDAP driver check for whether objects need to be renamed (Bug #4468).
+[jan] Fix generation of mailto: links if IMP is not installed (Bug #4334).
+[jan] Show error message if imported file didn't contain contacts (Bug #4260).
+[jan] Remember the lastly selected address book during the session.
+[jan] Add categories from imported contacts to the user's categories.
+
+
+------
+v2.1.2
+------
+
+[mjr] Fix addressbook.php script - don't attempt to submit the form with
+      invalid addressbook selections.
+[cjh] Add documentation for the filter parameter in sources.php.dist and an
+      example for retrieving data from two different tables (Manilal K M
+      <manilal.krishnapillai@ejyothi.com>).
+[cjh] Centralize code for building RDNs (Request #3966).
+[cjh] Pass objects by reference to hooks so modifications can stick (Bug
+      #3957).
+[jan] Fix compose links in portal if using compose popups in IMP (Bug #3923).
+
+
+------
+v2.1.1
+------
+
+[cjh] Be consistent in working with lowercase attribute names for the
+      LDAP driver (Bug #2440).
+[mjr] Fix create_default_histories.php and public_to_horde_share.php scripts
+      to prevent creation of bogus shares.
+[mjr] Fix create_default_histories.php script to work with shared sources.
+[jan] Add 1.2 to 2.x upgrade script for Oracle.
+[jan] Fix script to create default histories, necessary for synchronization.
+[jan] Fix loading of CLI library in the public_to_horde_share.php script.
+[mjr] Fix losing session when editing address books with disabled cookies.
+[cjh] Show the copy/move dropdown any time there is an editable address book
+      that's not the current one (Bug #3588).
+[jan] Don't show warning after dealing with contacts from a non-browseable
+      address book (Bug #3587).
+[jan] Fix configuration example for birthday fields.
+
+
+----
+v2.1
+----
+
+[ben] Better support for MS-SQL
+
+
+--------
+v2.1-RC1
+--------
+
+[mjr] Default to showing the 'A' page when browsing address books that contain
+      more than the 'perpage' number of entries.
+[jan] Add Icelandic translation (Bjorn Davidsson <bjossi@snerpa.is>).
+[mjr] Fix paging when viewing search results.
+[mjr] Only show actions that make sense for the current source.
+[mjr] All IMSP address books, including dynamically configured sources are now
+      uniquely identified across all users internally.
+[jan] Reverse sorting order if clicking on column name (t.zell@gmx.de,
+      Request #2484).
+[jan] Add option to keep name field unformatted (m.zdila@episoftware.com,
+      Request #2441).
+[mas] Use summary notifications for contact changes instead of one notice for
+      each change. (Bug #2764)
+[jan] Add CLI script to import vCard data.
+[cjh] Split checking of LDAP field syntax and checking of required fields
+      (tevans@tachometry.com, Bug #2626).
+[mjr] Horde_Share support added. SQL Driver only for now.
+[cjh] Update objectclasses when saving LDAP entries created by other clients
+      (m.zdila@episoftware.com, Bug #2405).
+[cjh] Charset-aware handling of LDAP DNs (Bug #2395).
+[cjh] Get rid of cached search results entirely, and move more display
+      code into Turba_ListView, simplifying a number of different
+      codepaths and avoiding servercide when using Advanced Search.
+[mjr] Turba_Object and Turba_Driver objects are now responsible for
+      checking permissions for the sources they represent.  This allows
+      concrete Turba_Driver objects to override Horde Perms and perform
+      their own permission checking (by checking ACLs for example).
+[cjh] "readonly" and "admin" source hash entries are deprecated. Permissons
+      are set through the Horde Perms UI now.
+[cjh] Avoid adding exact duplicates during import
+      (kevin_myer@iu13.org, Bug #1892).
+[cjh] Honor the delete confirmation preference when displaying a
+      contact (Bug #1315).
+[cjh] If the comments API is available, comments can be attached to
+      contacts (Request #1492).
+[cjh] Users can select which address books they wish to use, and in
+      which order they will be displayed (Request #1650).
+[cjh] Contacts can now be added to lists stored in any address book
+      (Request #1561).
+[cjh] Introduce a "browse" setting on sources, seperate from the "export"
+      setting, to allow differentiation of browseable and exportable
+      sources.
+[jan] Add permissions to restrict number of contacts per address book.
+[cjh] Add exporting of multiple vCards in one file through the export
+      interface (Frank Rosquin <frank.rosquin@gmail.com>).
+[mjr] Added support for adding and deleting IMSP addressbooks via the options
+      interface (Request #1578)
+[mjr] Show previous search results whenever returning to the search page.
+[cjh] Handle encoding of postalAddress fields to use $ for newlines, going
+      either by attributes.php or by the LDAP schema itself (Edward Rudd
+      <eddie@omegaware.com>, Request #2).
+[mjr] Search terms on composite fields are now taken as a space delimited
+      list of strings that are each OR'd against each field making up the
+      composite field  and then cumulatively AND'd together.
+[jan] Show warnings from CSV imports.
+[jan] Add "Add" and "Search" entries to sidebar menu.
+[jan] Return to original browse view after finishing group editing.
+[jan] Add submenu with address books to sidebar.
+[jan] Allow to specify charset of imported CSV files.
+[cjh] Pass the Turba_AbstractObject to attribute hooks to allow access to
+      other attribute values (for example, to build a field's value out of
+      other fields).
+[jan] Show list of edited contacts below edit form when editing several
+      contacts at once.
+[jan] Add VFS support to attach files to contacts.
+[jan] Allow to edit several contacts at once.
+[jan] Retrieve only required fields from backend.
+
+
+------
+v2.0.5
+------
+
+[cjh] Close several XSS vulnerabilities with address book and contact data.
+
+
+------
+v2.0.4
+------
+
+[jan] Fix source selection in some API methods (tevans@tachometry.com,
+      Bug #2623).
+[jan] Fix warnings in columns preference screen.
+[mjr] Check for global IMSP configuration and use if present.
+[mas] Restore BC in searching using SQL driver. (Bug #2419)
+
+
+------
+v2.0.3
+------
+
+[jan] Add Turkish translation (Servet Güney <sguney@metu.edu.tr>, Ahmet Öztürk
+      <oahmet@metu.edu.tr>).
+
+
+----------
+v2.0.3-RC1
+----------
+
+[jan] Don't show "Add" icon if no writeable address books exist.
+[jan] Don't show "Browse" icon and list if no browseable address books exist.
+[jan] Add example how to use a field for Horde's category system.
+[cjh] Allow uid to be used in key generation (especially useful for LDAP
+      backends that want to use uid in the DN) (Bug #2027).
+[mjr] Fix bug where search results are not displayed when no browseable
+      addressbooks exist and bug where the browse attribute is ignored for
+      addressbooks that are set as default, allowing a non-browseable
+      addressbook to be browsed (Bug #1959).
+[jan] Import and export of birthdays with vCards (thomas@gelf.net, Bug #1269).
+[jan] Fix mini search portal block with non-ascii search strings (Bug #1605).
+[cjh] Add a generic SQL upgrade script, replacing the MySQL-specific
+      version (Bug #1781).
+[mjr] Use addressbook name as part of cache key to prevent breaking similar
+      searches on different IMSP addressbooks.
+[cjh] Use bind variables in the SQL driver (selsky@columbia.edu, Bug #1651).
+[mjr] Fix API search() method to correctly deal with contacts containing
+      multiple email-type fields (Bug #1284).
+[cjh] Fix _read() for multiple objects in the LDAP driver (Bug #1520).
+[mjr] Cache IMSP search results when sending multiple IMSP searchaddress
+      commands for the same search.
+[cjh] Show actions at the top and bottom of contact listings (Bug #1458).
+[jan] Add shortcut icon (favicon.ico).
+[mjr] Show Contacts and Show Groups links now work correctly with IMSP driver.
+[jan] Don't include names in email fields of distribution lists retrieved
+      through the "search" API method (Bug #1384).
+
+
+------
+v2.0.2
+------
+
+[jan] Fixed warning in browse view (Bug #1363).
+
+
+------
+v2.0.1
+------
+
+[jan] Fixed some javascript errors when clicking on the column headers to
+      resort contact listings (Bug #1313).
+[cjh] Quote LDAP DN entries according to RFC 1485 (Bug #1146).
+[cjh] When importing vCard 3.0 ADR fields, try to build a composite entry for
+      workAddress or homeAddress, and keep the street address in workStreet or
+      homeStreet (Bug #1109).
+[jan] Implement OR searches in IMSP driver (Michael Rubinsky
+      <mike@theupstairsroom.com>, Bug #1256).
+
+
+----------
+v2.0.1-RC1
+----------
+
+[jan] Create compose links for all email addresses at once in contact listings
+      (requires IMP 4.0.2).
+[jan] Open compose windows from the portal's minisearch block in the correct
+      frame (Bug #1293).
+[jan] Several performance optimizations.
+[jan] Don't return empty result sets in search API (Bug #1210).
+[cjh] Support TLS connections to LDAP servers (Bug #1149).
+
+
+----
+v2.0
+----
+
+[cjh] UIDs need to be stored in the History system with a turba: prefix and
+      with the contact owner so as not to confuse different instances of the
+      same contact (if two users both have a contact in their seperate
+      addressbooks in a private source, they should have unique histories for
+      those contacts).
+[cjh] Improve error and permission checking.
+
+
+--------
+v2.0-RC3
+--------
+
+[cjh] Prevent copying/moving of groups (Bug #935).
+[cjh] Fix IMSP groups (Michael Rubinsky <mike@theupstairsroom.com>)
+[jan] Fix propagating of monthdayyear fields (Bug #920).
+[jan] Fix SOAP namespace for API method signatures.
+[cjh] Change to Turba::getMenu(), fixes the menu on the Options screen (Bug
+      #898).
+[jan] Fix some javascript errors with IE 5.0.
+
+
+--------
+v2.0-RC2
+--------
+
+[cjh] Don't overwrite form data with object defaults when editing if
+      validation fails (Bug #883).
+[cjh] Use source permissions if they are present, and if not, fall back to the
+      old source admin array (Bug #853).
+[cjh] Ignore any __-prefixed attribute in building search criteria (Bug #877).
+
+
+--------
+v2.0-RC1
+--------
+
+[mms] Fixed the delete API to not exit with error if the item to be deleted
+      is not found in the first source provided.
+[cjh] Removed miniwindow.php; it simply provided a frame around Turba
+      with a close button.
+
+
+---------
+v2.0-BETA
+---------
+
+[jan] Allow to group fields into tabs.
+[mms] Link email address in object view.
+[cjh] Merge the code for Turba_Source and Turba_Driver into simply
+      Turba_Driver.
+[jan] Add Persian (Western) translation (Vahid Ghafarpour
+      <vahid@ghafarpour.com>).
+[jan] Add configuration option to require certain fields in the LDAP driver.
+      (Tarjei Huse <tarjei+a_lists.phpgw@nu.no>).
+[cjh] Support custom field mappings in CSV exports, and add an Outlook export
+      type.
+[cjh] Allow replacing your addressbook with an imported one (Francois Marier
+      <francois@nit.ca>).
+[cjh] Don't show source selection dropdowns in cases where there would only be
+      one choice (Francois Marier <francois@nit.ca>).
+[cjh] Turba's API has been consolidated somewhat, with a unified import method
+      replacing add, addContact, and import_vcard.
+[jan] Add access keys.
+[cjh] Add Kolab drivers (Stuart Bingë <s.binge@codefusion.co.za>).
+[cjh] The alphabetic pager now has an "All" option.
+
+
+----------
+v2.0-ALPHA
+----------
+
+[cjh] Show an alphabetic pager for browsing address books (Mike Bydalek
+      <mbydalek@zivix.com>).
+[cjh] Rename LDAP objects when their DN changes (Tarjei Huse
+      <tarjei+a_lists.phpgw@nu.no>).
+[cjh] Add exporting of VCards from the browse/search view (Mike Bydalek
+      <mbydalek@zivix.com>).
+[cjh] Initial IMSP driver (Michael Rubinsky <mike@theupstairsroom.com>).
+[cjh] Use Horde_UI_Pager to page browse results (Joel Vandal
+      <joel@scopserv.com>).
+[cjh] Basic support for setting permissions on Turba sources (Joel Vandal
+      <joel@scopserv.com>).
+[cjh] Unify search and advanced search code to use a much more similar
+      interface (Joel Vandal <joel@scopserv.com>).
+[cjh] Javascript delete confirmation is now available as a preference ("W.
+      David Betts" <david@populus.com>).
+[cjh] Searching composite fields, and other complex generated searching, now
+      works with the LDAP driver.
+[cjh] Track addition, modification, and deletion of contacts with the Horde
+      History:: API.
+[cjh] Use arbitrary search support to include searching of composite fields.
+[cjh] Turba_Drivers are now capable of arbitrary searches, including unlimited
+      nested combinations of AND and OR searches.
+[cjh] Add the ability to link fields in the backend into a composite field,
+      which is not editable, but which displays the correct value.
+[cjh] Add the ability to move or copy contacts to a separate addressbook.
+[cjh] Display multiple email addresses more intelligently (John Dalbec
+      <jpdalbec@ysu.edu>).
+[cjh] Allow setting a limit on the number of queries returned by an LDAP
+      search (Andrew Morgan <morgan@orst.edu>).
+[cjh] Add edit/delete links in browse views.
+[cjh] Preference for default directory for searches, etc. (Richard Heggs
+      <Richard.Heggs@nottinghamcity.gov.uk>).
+[mms] Add support for listing/adding/retrieval of public keys.
+[cjh] Use the new PrefsUI class.
+[jon] Adapt to the new Horde::img() syntax.
+[cjh] Use the new Notification system.
+[jan] Remove the standard value for the language preference. The language to
+      fall back to should be set Horde wide in lang.php instead.
+
+
+------
+v1.2.5
+------
+
+[jan] Close XSS when setting the parent frame's page title by javascript (cjh).
+[jan] Fix warning with LDAP backends.
+
+
+------
+v1.2.4
+------
+
+[jan] Fix distribution lists.
+
+
+------
+v1.2.3
+------
+
+[cjh] Check permission when adding and deleting objects (Bug #671).
+[jan] Fix bug in LDAP driver with dn values not being UTF8 encoded (Bug #378).
+[jan] Fix sorting by columns in browse view.
+[cjh] Use prepare/execute in the SQL driver to support large fields on Oracle
+      and other databases (Matt Selsky <selsky@columbia.edu>).
+[jan] Don't create distribution list if process gets cancelled (Bug #377).
+
+
+------
+v1.2.2
+------
+
+[jan] Add Galician translation (Rafael Varela Pet <srrafa@usc.es>, Guillermo
+      Mendez <guille@usc.es>).
+
+
+------
+v1.2.1
+------
+
+[jan] Fix importing of vCard 2.1 data that contains commas (needs Horde 2.2.4).
+[jan] Make sorting order dependent of the name format (Sergey Zhukov
+      <sergey@intellij.net>).
+[jan] Add Arabic (Syria) translation (Platinum Development Team
+      <devteam@platinum-sy.net>).
+[jan] Add Macedonian translation (Stojan Pesov <ssp@eureka.com.mk>).
+[jan] Add Romanian translation (Eugen Hoanca <eugenh@urban-grafx.ro>, Marius
+      Dragulescu <mariusd@urban-grafx.ro>).
+[cjh] Remove dependency on class not in Horde 2.x.
+
+
+----
+v1.2
+----
+
+[cjh] Use the 'objectclass' entry from LDAP sources instead of defaulting to
+      'objectclass=*'.
+[jan] Add Catalan translation (Angels Guimerà <angels.Guimera@uab.es>).
+[jan] Add a preference for viewing names as Lastname, Firstname (Marc Jauvin
+      <marc@register4less.com>).
+[jan] Add Latvian translation (Kaspars Kapenieks <kaspars@rcc.lv>).
+[cjh] Close several small XSS vulnerabilities (Mitja Kolsek
+      <mitja.kolsek@acros.si>).
+[cjh] Fix problems with cached search results from different backends.
+[jan] If an LDAP directory is configured to use utf8 encoding, encode
+      attributes when adding them to the directory (cjh).
+[jan] Add Turba_List::remove() (cjh).
+[jan] Add Turba_Object::fromvCard() (cjh).
+[jan] Add a registry script for Turba (Michael Cochrane
+      <mike@graftonhall.co.nz>).
+[jan] Add distribution list support (Michael Cochrane
+      <mike@graftonhall.co.nz>).
+[jan] Add personal LDAP address book HOWTO and example (cjh).
+[jan] Add generic add, delete, get, list API functions for specific fields
+      (mms).
+[jan] Add Turba::addParameter().
+[jan] Add Lithuanian translation (Darius Matuliauskas <darius@lnk.lt>).
+[cjh] Add a miniwindow interface that can be used in popups from other
+      applications.
+[cjh] Add preferences-based addressbook capability for small, private
+      addressbooks.
+[cjh] Make sure vCard email addresses are imported as just the email address,
+      not as Personal Info <address@example.com>.
+[cjh] Add Turba::getBareAddress() for converting "Personal Info
+      <address@example.com>" into just address@example.com.
+[jan] Add Bulgarian translation (Miroslav Pendev <pendev@hotmail.com>).
+[cjh] Add links to MapQuest from address fields.
+[jan] Pass contact name to compose link in display view.
+[jan] Replace <?= with <?php echo to remove the short_open_tags requirement
+      (cjh).
+[jan] Fix preference for default view.
+[jan] Add import/export filter for TSV, Mulberry and Pine (Liam Hoekenga
+      <liamr@umich.edu>).
+
+
+----
+v1.1
+----
+
+[jan] Add Hungarian translation (Laszlo L. Tornoci <torlasz@xenia.sote.hu>).
+[jan] Add Norwegian Nynorsk translation (Per-Stian Vatne <psv@orsta.org>).
+[jan] Add Slovenian translation (Jure Krasovic <jurek@rcc-irc.si>).
+[jan] Add Japanese translation (B.J. Black <william.black@sun.com>).
+[cjh] Add an optional parameter to set the LDAP protocol version.
+[cjh] Close a potential problem with register_globals On and $js_onLoad.
+[jan] Add Portugal Portugues translation (Nuno Loureiro <nuno@eth.pt>).
+[cjh] Add a Browse interface for easily listing all contacts.
+[cjh] Change some button inputs to submits and remove some javascript.
+[cjh] Source-wide filters with LDAP are always AND-ed.
+[cjh] Remove awkward To:, Cc:, Bcc: message composition interface and clean
+      up UI.
+[cjh] Delete empty attributes instead of just leaving them unchanged.
+[cjh] Log SQL and LDAP queries at LOG_DEBUG.
+[cjh] Don't generate LDAP searches with 'attr=**' in them for empty values
+      (use attr=*).
+[cjh] Say "Edit 'entry'" instead of just "entry" in the mouseover text for
+      search results which are editable.
+[cjh] Add a local LDAP directory example.
+[cjh] Don't store objects in the search results session cache; a bit slower,
+      but seems to be much more reliable.
+[cjh] Vastly improve search results handling - store them in the session,
+      don't add duplicate results, let people use the back button, etc.
+[cjh] Fix the column select javascript.
+[cjh] Add list mouseover effect (Ronnie Garcia <ronnie@mk2.net>).
+[cjh] Fix results problem with advanced.php and old results.
+[cjh] Patches to tweak the LDAP driver to handle things a bit more correctly
+      (HiCkS <hicks@666.hn.org>).
+[cjh] Add and use TURBA_TEMPLATES constant.
+[cjh] Use $registry->get() for all Registry information.
+[jan] Add 'admin' entry to the sources hash to give write access on readonly
+      addressbooks to certain logged in users.
+[jon] Enable the "portability" option in the SQL driver.
+[jan] Add preferences page and user preference to select the columns that shall
+      be displayed in the search results.
+[jan] Add Estonian translation (Toomas Aas <toomas.aas@raad.tartu.ee>).
+[jan] Add Slovak translation (Leo Mrafko <leo@oel.sk>).
+[jon] Enable the "portability" option in the SQL driver.
+[jan] Add Ukrainian translation (Andriy Kopystyansky <anri@polynet.lviv.ua>).
+[jan] Add Danish translation (Martin List-Petersen <martin@list-petersen.dk>).
+[jan] Fix bug "This person is already in your addressbook.".
+
+
+----
+v1.0
+----
+
+[jan] Add Norwegian Bookmal translation (Oystein Steimler <oystein@rexta.net>).
+[avsm] Add .htaccess files to deny access to data directories.
+[jan] Add Finnish translation (Leena Heino <liinu@uta.fi>).
+[cjh] Avoid adding duplicate entries through the add API method.
+
+
+--------
+v1.0-RC4
+--------
+
+[rich] Include rewritten and reorganized documentation.
+[rich] License under Horde APL.
+[cjh] Make email addresses clickable in displayed objects.
+[bjn] Change 'en' and 'en_EN' locales to 'en_US' (default).
+[cjh] Vastly improve error reporting when adding an object fails.
+[jan] Add Brazilian Portuguese translation (Carlos Daniel Kibrit
+      <kibrit@terra.com.br>).
+[jan] Add Greek translation (Stefanos I. Dimitriou <sdimitri@teiath.gr>).
+[jan] Add Swedish translation (Andreas Dahlén <andreas@dahlen.ws>).
+[jan] Add Korean translation (J.I Kim <aporie@netian.com>).
+[cjh] Remove duplicate entries from multiple sources from
+      turbaExpandAddresses() results.
+[cjh] Don't show the addressbook select widget on the search page if there's
+      just one to search from.
+
+
+------
+v0.0.3
+------
+
+[cjh] Add an optional 'strict' configuration array definining fields which
+      must always be matched exactly.
+[jan] Add API function to get info about the fields.
+[jan] Add source configuration to select which fields should be searchable by
+      default.
+[cjh] Allow OR searches.
+[cjh] Pass full email addresses (with names) to messages being composed
+      (Lars Nummedal <largs@nummedal.net>).
+[jan] Add Polish translation.
+[jan] Add mapping of date/time fields to the import feature.
+[jan] Add support for date fields (e.g. birthdays).
+[jan] turbaExpandAddresses() now returns all email addresses that belong
+      to a contact.
+[jan] Show the fields in edit and display view dynamically based on what's
+      provided by the backend.
+[jan] Add Italian translation (Giovanni Meneghetti <gmeneghetti@infvic.it>).
+[jan] Add import/export ui based on the new Data class.
+[cjh] Add Traditional Chinese translation (David Chang <david@thbuo.gov.tw>).
+[cjh] Add Czech translation (pchytil@asp.ogi.edu).
+[cjh] Add Russian translation (Ignat Ikryanov <ignat@ibd.ru>).
+[cjh] Add $conf['menu']['apps'] support and a help link.
+[cjh] Make incremental building up of search results works again in both
+      search and advanced search.
+[cjh] Add Alias to default fields (Marc Jauvin <marc@register4less.com>).
+[cjh] Use the *url() functions more consistently to make sure that
+      cookie-less sessions work.
+
+
+------
+v0.0.2
+------
+
+[cjh] Add some more error checking to the searching and LDAP driver.
+[cjh] Add config/attributes.php to provide nice labels for directory
+      attributes.
+[cjh] Adding German translation from Jan Schneider <janmailing@gmx.de>.
+[cjh] Allow LDAP Sources to define a filter always included in searches
+      (rbarnett@neuromics.com).
+[jon] Preserve the search parameters after a search is performed.
+[jon] Allow the registry to handle Turba's configuration values.
+[jon] HORDE_BASE is now defined in lib/base.php instead of config/conf.php.
+[max] Adding source retrieval API function.
+[cjh] Adding Dutch translation from Jan Kuipers <jrkuipers@lauwerscollege.nl>.
+[jon] Adding French translation from Sam Przyswa <samp@arial-concept.com>.
+[cjh] Add gettext infrastructure.
+[cjh] Define the HORDE_BASE constant in config/conf.php, and use it when
+      referring to any of Horde's files.
+[cjh] Bring the advanced search page up to date, and add it to the menu.
+[jon] Retired config/menu.txt in favor of config/menu.php.  This file follows
+      a new format based on native PHP data structures.
+[max] Expand API to allow adding addresses to an addressbook.
+[cjh] Add the first API function (expanding addresses) for Turba in
+      lib/api.php.
+[cjh] Add and Delete now work for the LDAP driver.
+[cjh] Fix wap contacts searching.
+[cjh] Turba now uses Horde authentication instead of its own. This means
+      that whatever auth method you are using for Horde will be used to
+      authenticate to Turba, and in return you get single sign-on with any
+      other apps using Horde authentication.
+[cjh] Working addObject() and removeObject() SQL driver methods.
+[cjh] Move Turba_Source::getMyObject() to Turba_Source::getObject(); nothing
+      was using the old getObject() call anymore.
+[cjh] If you set $params['bind_dn'] and $params['bind_password'] for an LDAP
+      source, Turba will bind as the specified dn to the LDAP server,
+      letting you add/edit entries.
+[cjh] Update capatilization to match Horde/PEAR standards.
+[cjh] register_globals = Off fixes.
+[cmc] Add a display object page, fix a ldap bug with the dn, add
+      a read function to the turba source class (Done by Christian
+      M. Couder (cmc) <christian@alcove.fr>).
+[cjh] Add an advanced search page contributed by Christian Couder
+      <christian@alcove.fr>.
+[cjh] Bring the WML templates up to date with recent changes.
+[cjh] Make the LDAP server port configurable and make sure the parameter
+      appears in the example sources.
+[cjh] Implemented edit functionality for the SQL driver.
+[cjh] Moved the filter() functionality (and supporting functions) into
+      Turba_List, where it really belongs.
+[cjh] We now actually use Turba_List, Turba_AbstractObject, Turba_ListView,
+      and many other pieces of the class hierarchy that were previously only
+      referenced in the object model.
+[cjh] Clean up the sql Driver implementation a bit. Now, if the source is
+      private, the __owner criteria must match the current user, instead of
+      using __key. __key should uniquely identify each object, and shouldn't
+      be what user that object belongs to.
+[cjh] Reorganize the class hierarchy a bit - use Object instead of Contact,
+      and a few other naming changes.
+[cjh] Merged WAP functionality into search.php. If a WAP browser is
+      detected, a slimmed-down wml interface will be used that only displays
+      names and (callable) phone numbers.
+
+
+------
+v0.0.1
+------
+
+[cjh] Fix bug where searches with no results would tack on an empty row.
+[cjh] Conversion to CSS.
+[cjh] Cleanup, modernization.
+[jon] Silence session_start warnings.
+[jon] Use Horde::url() in place of the deprecated buildURL() function.
+[cjh] Use new session model and $horde['session_name'].
+[cjh] Fixed message sending javascript to work with multiple addresses.
+[jon] Allow directory sources to be set 'read-only' (non-editable).
+[jon] Added a 'public' flag to the $cfgSources entries.
+[jon] Contact attributes are configurable via config/attributes.php.
+[jon] Renamed the source configuration hash to $cfgSources (from just
+      $sources).
+[jon] Moved from config/ldap.php to config/sources.php.
+[jon] Converted Chuck's existing class stubs into a PEAR-style lib/ tree.
diff --git a/turba/docs/CREDITS b/turba/docs/CREDITS
new file mode 100644 (file)
index 0000000..dbfd5e1
--- /dev/null
@@ -0,0 +1,107 @@
+========================
+ Turba Development Team
+========================
+
+
+Core Developers
+===============
+
+- Chuck Hagenbuch <chuck@horde.org>
+- Jan Schneider <jan@horde.org>
+- Michael J. Rubinsky <mrubinsk@horde.org>
+
+
+Localization
+============
+
+=====================   ======================================================
+Arabic (Syria)          Platinum Development Team <devteam@platinum-sy.net>
+Basque                  Euskal Herriko Unibertsitatea <xabier.arrieta@ehu.es>
+Brazilian Portuguese    Carlos Daniel Kibrit <kibrit@terra.com.br>
+                        Fabio Gomes <flgoms@uol.com.br>
+                        Luis Felipe Marzagao <duli@fedoraproject.org>
+                        Eduardo de Carli <carliedu@ig.com.br>
+Bulgarian               Miroslav Pendev <pendev@hotmail.com>
+Catalan                 Angels Guimerà <angels.Guimera@uab.es>
+                        Jordi Giralt <projecte.k2@upcnet.es>
+Chinese (Simplified)    WangHengWen <whw@my169.com>
+                        Anna Chen <annachen2008@yahoo.com.cn>
+Chinese (Traditional)   David Chang <david@tmv.gov.tw>
+Czech                   Pavel Chytil <pchytil@asp.ogi.edu>
+                        Jan Krivanek <honza@atack.cz>
+Danish                  Martin List-Petersen <martin@list-petersen.dk>
+                        Brian Truelsen <horde+i18n@briantruelsen.dk>
+                        Niels Baggesen <nba@users.sourceforge.net>
+Dutch                   Jan Kuipers <jrkuipers@lauwerscollege.nl>
+                        Han Spruyt <han.spruyt@ijsselgroep.nl>
+Estonian                Toomas Aas <toomas.aas@raad.tartu.ee>
+                        Alar Sing <alar.sing@err.ee>
+Finnish                 Leena Heino <liinu@uta.fi>
+French                  Sam Przyswa <samp@arial-concept.com>
+                        Ronnie Garcia <ronnie@mk2.net>
+                        Benoit St-André <ben@benoitst-andre.net>
+                        Pierre Lachance <pl@pierrelachance.net>
+                        Vincent Vinet <vvinet@revolutionlinux.com>
+                        Yannick Sebastia <yannick.sebastia@ecole-navale.fr>
+Galician                Rafael Varela Pet <rafael.varela@usc.es>
+                        Guillermo Mendez <guille@usc.es>
+German                  Jan Schneider <jan@horde.org>
+Greek                   Stefanos I. Dimitriou <support@teiath.gr>
+                        Silligardos Xristoforos
+                        Anagnostopoulos Apostolis
+                        Konstantinos C. Milosis <kmilosis@yahoo.com>
+Hungarian               Laszlo L. Tornoci <torlasz@xenia.sote.hu>
+Icelandic               Bjorn Davidsson <bjossi@snerpa.is>
+Italian                 Giovanni Meneghetti <gmeneghetti@infvic.it>
+                        Marco Pirovano <marco.pirovano@unibocconi.it>
+                        Cristian Manoni <cristian.manoni@nethesis.it>
+Japanese                B.J. Black <william.black@sun.com>
+                        Takeshi Morishima <tm@onepost.net>
+                        Hiromi Kimura <hiromi@tac.tsukuba.ac.jp>
+Korean                  J.I Kim <aporie@netian.com>
+                        Jinhyok Heo <novembre@ournature.org>
+Latvian                 Kaspars Kapenieks <kaspars@rcc.lv>
+Lithuanian              Darius Matuliauskas <darius@lnk.lt>
+                        Vilius Šumskas <vilius@lnk.lt>
+Macedonian              Stojan Pesov <ssp@eureka.com.mk>
+Norwegian Bokmaal       Oystein Steimler <oystein@rexta.net>
+                        Torstein S. Hansen <huleboer@techbee.no>
+                        Andreas Gunleikskaas <andreas@gunleikskaas.no>
+                        Trond Bjørstad <trb@ndn.no>
+                        Thomas Chr. Dahl <tcd@ndn.no>
+Norwegian Nynorsk       Per-Stian Vatne <psv@orsta.org>
+Persian                 MetaNET Amirkabir <persian-horde@metanetworking.com>
+Polish                  Piotr Roszatycki <dexter@debian.pl>
+                        Mateusz Kaminski <matipl@pld-linux.org>
+                        Krzysztof Kozlowski <kozik1@o2.pl>
+                        Piotr Adamcio <adamcios@o2.pl>
+                        Tadeusz Lesiecki <lesiecki@tmtsystem.pl>
+                        Piotr Tarnowski <drfugazi@drfugazi.eu.org>
+Portuguese              Nuno Loureiro <nuno@eth.pt>
+                        Jose' Carlos <horde.i18n@abismo.org>
+                        Manuel Menezes de Sequeira <Manuel.Sequeira>
+Romanian                Eugen Hoanca <eugenh@urban-grafx.ro>
+                        Marius Dragulescu <mariusd@urban-grafx.ro>
+Russian                 Ignat Ikryanov <ignat@ibd.ru>
+                        Anton Nekhoroshih <anton@valuehost.ru>
+                        Fedor A. Fetisov <faf@ssc.ru>
+                        Alexey Zakharov <baber@mosga.net>
+Slovak                  Leo Mrafko <leo@oel.sk>
+                        Ivan Noris <noris@bgs.sk>
+                        Martin Matuška <martin@matuska.org>
+Slovenian               Jure Krasovic <jurek@rcc-irc.si>
+                        Matic Dolar <matic@medium.si>
+Spanish                 Julian Jares <jjares@techie.com>
+                        Raúl Alvarez Venegas <rav@tecoman.ucol.mx>
+                        Manuel Perez Ayala <mperaya@alcazaba.unex.es>
+Swedish                 Andreas Dahlén <andreas@dahlen.ws>
+Turkish                 Middle East Technical University <horde-tr@metu.edu.tr>
+Ukrainian               Andriy Kopystyansky <anri@polynet.lviv.ua>
+=====================   ======================================================
+
+
+Inactive Developers
+===================
+
+- Jon Parise <jon@csh.rit.edu>
+- Rich Lafferty <rich@horde.org>
diff --git a/turba/docs/INSTALL b/turba/docs/INSTALL
new file mode 100644 (file)
index 0000000..da49273
--- /dev/null
@@ -0,0 +1,252 @@
+======================
+ Installing Turba 3.0
+======================
+
+:Contact: turba@lists.horde.org
+
+.. contents:: Contents
+.. section-numbering::
+
+This document contains instructions for installing the Turba contact manager
+on your system.
+
+For information on the capabilities and features of Turba, see the file
+README_ in the top-level directory of the Turba distribution.
+
+
+Obtaining Turba
+===============
+
+Turba can be obtained from the Horde website and FTP server, at
+
+   http://www.horde.org/turba/
+
+   ftp://ftp.horde.org/pub/turba/
+
+Or use the mirror closest to you:
+
+   http://www.horde.org/mirrors.php
+
+Bleeding-edge development versions of Turba are available via CVS; see the
+file `docs/HACKING`_ in the Horde distribution, or the website
+http://www.horde.org/source/, for information on accessing the Horde CVS
+repository.
+
+
+Prerequisites
+=============
+
+To function properly, Turba **requires** the following:
+
+1. A working Horde installation.
+
+   Turba runs within the `Horde Application Framework`_, a set of common tools
+   for Web applications written in PHP. You must install Horde before
+   installing Turba.
+
+   .. Important:: Turba 3.0 requires version 4.0+ of the Horde Framework -
+                  earlier versions of Horde will **not** work.
+
+   The Horde Framework can be obtained from the Horde website and FTP server,
+   at
+
+      http://www.horde.org/horde/
+
+      ftp://ftp.horde.org/pub/horde/
+
+   Many of Turba's prerequisites are also Horde prerequisites.
+
+   .. Important:: Be sure to have completed all of the steps in the
+                  `horde/docs/INSTALL`_ file for the Horde Framework before
+                  installing IMP.
+
+   .. _`Horde Application Framework`: http://www.horde.org/horde/
+
+The following are not required, but are strongly recommended:
+
+1. SQL and/or LDAP support in PHP.
+
+   Turba can store its contacts entries in either an SQL or an LDAP database,
+   and can query public (read-only) LDAP databases for contacts as well.
+   Build PHP with whichever LDAP or SQL drivers you require; see the Horde
+   INSTALL_ file for details.
+
+2. The following PEAR packages:
+   (See `horde/docs/INSTALL`_ for instructions on installing PEAR packages)
+
+   a. Net_LDAP [OPTIONAL]
+
+      Net_LDAP is required when doing schema checks with LDAP address books.
+
+
+Installing Turba
+================
+
+Turba is written in PHP, and must be installed in a web-accessible directory.
+The precise location of this directory will differ from system to
+system. Conventionally, Turba is installed directly underneath Horde in the
+webserver's document tree.
+
+Since Turba is written in PHP, there is no compilation necessary; simply
+expand the distribution where you want it to reside and rename the root
+directory of the distribution to whatever you wish to appear in the URL.  For
+example, with the Apache webserver's default document root of
+``/usr/local/apache/htdocs``, you would type::
+
+   cd /usr/local/apache/htdocs/horde
+   tar zxvf /path/to/turba-x.y.z.tar.gz
+   mv turba-x.y.z turba
+
+and would then find Turba at the URL::
+
+   http://your-server/horde/turba/
+
+
+Configuring Turba
+=================
+
+1. Configuring Horde for Turba
+
+   a. Register the application
+
+      In ``horde/config/registry.php``, find the ``applications['turba']``
+      stanza.  The default settings here should be okay, but you can change
+      them if desired.  If you have changed the location of Turba relative to
+      Horde, either in the URL, in the filesystem or both, you must update the
+      ``fileroot`` and ``webroot`` settings to their correct values.
+
+   b. Optional: Provide Turba access from IMP
+
+      If you wish to have Turba appear in IMP's menubar, edit IMP's
+      configuration and select Turba in ``Administration/Configuration/Menu
+      Settings``.
+
+2. Creating databases
+
+   The specific steps to create Turba databases depend on which database
+   you've chosen to use.
+
+   First, look in ``scripts/sql/`` to see if a script already exists for your
+   database type (SQL or LDAP).  If so, you should be able to simply execute
+   that script as superuser in your database.  (Note that executing the script
+   as the "horde" user will probably fail when granting privileges.)
+
+   If such a script does not exist, you'll need to build your own, using the
+   file ``turba.sql`` as a starting point.  If you need assistance in creating
+   databases, you may wish to let us know on the Turba mailing list.
+
+3. Configuring Turba.
+
+   To configure Turba, change to the ``config/`` directory of the installed
+   distribution, and make copies of all of the configuration ``dist`` files
+   without the ``dist`` suffix::
+
+      cd config/
+      for foo in *.dist; do cp $foo `basename $foo .dist`; done
+
+   Or on Windows::
+
+      copy *.dist *.
+
+   Documentation on the format and purpose of those files can be found in each
+   file.  You may edit these files if you wish to customize Turba's appearance
+   and behaviour.  With the exception of the ``sources.php`` file the defaults
+   will be correct for most sites.
+
+   You must configure ``sources.php`` to list your data sources (both SQL and
+   LDAP if necessary).  This configuration file contains a large number of
+   **examples**.  Please remove or comment out those examples that **you don't
+   need**.
+
+   A few advanced attribute definitions have been commented out in
+   ``config/attributes.php`` by default because they require Horde 3.2 or
+   later to be installed. If you have a sufficiently recent Horde version you
+   can uncomment those lines in ``attributes.php``.
+
+   You must login to Horde as a Horde Administrator to finish the
+   configuration of Turba.  Use the Horde ``Administration`` menu item to get
+   to the administration page, and then click on the ``Configuration`` icon to
+   get the configuration page.  Select ``Address Book`` from the selection
+   list of applications.  Fill in or change any configuration values as
+   needed.  When done click on ``Generate Address Book Configuration`` to
+   generate the ``conf.php`` file.  If your web server doesn't have write
+   permissions to the Turba configuration directory or file, it will not be
+   able to write the file.  In this case, go back to ``Configuration`` and
+   choose one of the other methods to create the configuration file
+   ``turba/config/conf.php``.
+
+   Note for international users: IMP uses GNU gettext to provide local
+   translations of text displayed by applications; the translations are found
+   in the po/ directory.  If a translation is not yet available for your
+   locale (and you wish to create one), see the ``horde/po/README`` file, or
+   if you're having trouble using a provided translation, please see the
+   `horde/docs/TRANSLATIONS`_ file for instructions.
+
+4. Securing Turba
+
+   Before you can secure IMP, you need a secure Horde installation.  Please
+   read the file in `horde/docs/SECURITY`_ for Horde security information
+   before proceeding.
+
+   Some of Turba's configuration files contain passwords which local users
+   could use to access your database.  It is recommended to ensure that at
+   least the Turba configuration files (in ``config/``) are not readable to
+   system users.  There are ``.htaccess`` files restricting access to
+   directories that do not need to be accessed directly; before relying on
+   those, ensure that your webserver supports ``.htaccess`` and is configured
+   to use them, and that the files in those directories are in fact
+   inaccessible via the browser.
+
+   An additional approach is to make Turba's configuration files owned by the
+   user ``root`` and by a group which only the webserver user belongs to, and
+   then making them readable only to owner and group.  For example, if your
+   webserver runs as ``www.www``, do as follows::
+
+      chown root.www config/*
+      chmod 0440 config/*
+
+5. Testing Turba
+
+   To verify that Turba is working correctly, attempt to look up a known
+   existing and a known nonexisting entry in each of your data sources, and to
+   create and then look up a new entry in each data source which allows users
+   to create new entries.
+
+   If appropriate, ensure that Turba appears in the IMP menu bar.
+
+
+Obtaining Support
+=================
+
+If you encounter problems with Turba, help is available!
+
+The Horde Frequently Asked Questions List (FAQ), available on the Web at
+
+  http://www.horde.org/faq/
+
+The Horde Project runs a number of mailing lists, for individual applications
+and for issues relating to the project as a whole.  Information, archives, and
+subscription information can be found at
+
+  http://www.horde.org/mail/
+
+Lastly, Horde developers, contributors and users may also be found on IRC,
+on the channel #horde on the Freenode Network (irc.freenode.net).
+
+Please keep in mind that Turba is free software written by volunteers.  For
+information on reasonable support expectations, please read
+
+  http://www.horde.org/support.php
+
+Thanks for using Turba!
+
+The Horde team
+
+
+.. _README: ?f=README.html
+.. _INSTALL:
+.. _`horde/docs/INSTALL`: ../../horde/docs/?f=INSTALL.html
+.. _`docs/HACKING`: ../../horde/docs/?f=HACKING.html
+.. _`horde/docs/PERFORMANCE`: ../../horde/docs/?f=PERFORMANCE.html
+.. _`horde/docs/SECURITY`: ../../horde/docs/?f=SECURITY.html
+.. _`horde/docs/TRANSLATIONS`: ../../horde/docs/?f=TRANSLATIONS.html
diff --git a/turba/docs/LDAP b/turba/docs/LDAP
new file mode 100644 (file)
index 0000000..9287276
--- /dev/null
@@ -0,0 +1,148 @@
+Turba LDAP personal addressbook HOWTO
+=====================================
+
+This HOWTO is a bare bones list of what has to be done to implement a personal
+adressbook through ldap for turba.
+
+The howto is based on a setup where both the addressbook and the users are
+stored on the same LDAP server.
+
+This is not comprehensive, but it notes how some users have implemented
+personal LDAP address books.
+
+1. Configure ``turba/config/sources.php``.
+
+   Note that OpenLDAP and some other LDAP servers use UTF8 to encode its data,
+   so you should have ``encoding = 'utf8'`` set in the parameters for your
+   LDAP address book source.
+
+   There is an example of personal address books in
+   ``turba/config/sources.php.dist``.  You will have to modify it to to match
+   the fields, settings, and schema of your LDAP server, but it's a solid
+   place to start.
+
+2. Enforce ACLs to personal address books.
+
+   Add this to your LDAP ACL so users can only see their own address book::
+
+     access to dn="ou=(.+), ou=personal_addressbook, dc=example, dc=com"
+         by dn="uid=$1, dc=example, dc=com" write
+         by * none
+
+   .. Note:: This assumes that you store your users in the same LDAP
+             directory. If not, modify appropriately for your setup.
+
+3. Make ``ou``'s for all of your users.
+
+   You'll also have to add this to the script you use to add users to your
+   LDAP directory.
+
+   ``turba/scripts/ldap/addou.pl`` is a starting point; you will need to edit
+   it to fit your needs. Copy both it and the ``addou`` shell script to
+   ``/home``.  Then run ``./addou`` and all the different names of the
+   catalogues will be added to the ldap tree as new ``ou``'s to store
+   addresses in. You should probably delete any entries that do not belong
+   there (for instance, ``/home`` directories for mysql and other daemons
+   created by some distributions).
+
+
+Entries for Turba-specific information (contact groups) from horde/scripts/ldap/horde.schema::
+
+   #
+   # Turba attribute branch 1.3.6.1.4.1.13040.4.1.*
+   #
+   attributetype ( 1.3.6.1.4.1.13040.4.1.2
+     NAME 'turbaType'
+     DESC 'Turba Object Type: Contact/List'
+     EQUALITY caseIgnoreIA5Match
+     SUBSTR caseIgnoreIA5SubstringsMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{8} )
+
+   attributetype ( 1.3.6.1.4.1.13040.4.1.3
+     NAME 'turbaMembers'
+     DESC 'Encoded members of a Turba list'
+     EQUALITY caseIgnoreIA5Match
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4000} )
+
+   attributetype ( 1.3.6.1.4.1.13040.4.1.4
+     NAME 'turbaPGPPublicKey'
+     DESC 'PGP/GPG Public Key'
+     EQUALITY caseIgnoreIA5Match
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{4000} )
+
+
+Entries for calendaring information (free/busy, etc.) from RFC 2739::
+
+   attribute (1.2.840.113556.1.4.478
+     NAME 'calCalURI'
+     DESC 'Snapshot of users entire default calendar'
+     EQUALITY caseIgnoreMatch
+     SUBSTR caseIgnoreMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+    )
+
+   attribute (1.2.840.113556.1.4.479
+     NAME 'calFBURL'
+     DESC 'URI of the uses free and busy information'
+     EQUALITY caseIgnoreMatch
+     SUBSTR caseIgnoreMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+    )
+
+   attribute (1.2.840.113556.1.4.480
+     NAME 'calCAPURI'
+     DESC 'URI used to communicate with the users calendar'
+     EQUALITY caseIgnoreMatch
+     SUBSTR caseIgnoreMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+    )
+
+   attribute (1.2.840.113556.1.4.481
+     NAME 'calCalAdrURI'
+     DESC 'URI to which event requests should be sent for the user'
+     EQUALITY caseIgnoreMatch
+     SUBSTR caseIgnoreMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+    )
+
+   attribute (1.2.840.113556.1.4.482
+     NAME 'calOtherCalURIs'
+     DESC 'URIs to non-default calendars belonging to the user'
+     EQUALITY caseIgnoreMatch
+     SUBSTR caseIgnoreMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+    )
+
+   attribute (1.2.840.113556.1.4.483
+     NAME 'calOtherFBURLs'
+     DESC 'URIs to non-default free and busy information files'
+     EQUALITY caseIgnoreMatch
+     SUBSTR caseIgnoreMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+    )
+
+   attribute (1.2.840.113556.1.4.484
+     NAME 'calOtherCAPURIs'
+     DESC 'URIs for communicating with non-default calendars'
+     EQUALITY caseIgnoreMatch
+     SUBSTR caseIgnoreMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+    )
+
+   attribute (1.2.840.113556.1.4.485
+     NAME 'calOtherCalAdrURIs'
+     DESC 'Destinations for event requests to non-default calendars'
+     EQUALITY caseIgnoreMatch
+     SUBSTR caseIgnoreMatch
+     SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+    )
+
+   objectclass (1.2.840.113556.1.5.87
+    NAME 'calEntry'
+    DESC 'Calendering and Free Busy information'
+    SUP top AUXILIARY
+    MAY (calCalURI $ calFBURL $ calCAPURI $ calCalAdrURI $
+         calOtherCalURIs $ calOtherFBURLs $ calOtherCAPURIs $
+         calOtherCalAdrURIs
+        )
+    )
diff --git a/turba/docs/RELEASE_NOTES b/turba/docs/RELEASE_NOTES
new file mode 100644 (file)
index 0000000..4a11b4d
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Release focus. Possible values:
+ * 0 - N/A
+ * 1 - Initial freshmeat announcement
+ * 2 - Documentation
+ * 3 - Code cleanup
+ * 4 - Minor feature enhancements
+ * 5 - Major feature enhancements
+ * 6 - Minor bugfixes
+ * 7 - Major bugfixes
+ * 8 - Minor security fixes
+ * 9 - Major security fixes
+ */
+$this->notes['fm']['focus'] = 4;
+
+/* Mailing list release notes. */
+$this->notes['ml']['changes'] = <<<ML
+The Horde Team is pleased to announce the first release candidate of the Turba
+Contact Manager version H3 (2.2).
+
+Turba is the Horde contact management application. It is a production level
+address book, and makes heavy use of the Horde framework to provide
+integration with IMP and other Horde applications. It supports SQL, LDAP,
+Kolab, and IMSP address books.
+
+This is a preview version that should not be used on production systems. This
+version is considered feature complete but a few bugs may still exist in the
+code.
+
+We encourage widespread testing and feedback via the mailing lists or our bug
+tracking system.  Updated translations are very welcome, though some strings
+might still change before the final release.
+
+The major changes compared to the Turba version H3 (2.2-ALPHA) are:
+    * Improved default address book scheme.
+    * Improved vCard support.
+    * Improved birthday support.
+    * Further bugfixes and improvements.
+ML;
+
+/* Freshmeat release notes, not more than 600 characters. */
+$this->notes['fm']['changes'] = <<<FM
+The default address book scheme, the vCard support, and the birthday support have been improved. Further bugfixes and improvements have been made.
+FM;
+
+$this->notes['name'] = 'Turba';
+$this->notes['fm']['project'] = 'turba';
+$this->notes['fm']['branch'] = 'Horde 3';
diff --git a/turba/docs/UPGRADING b/turba/docs/UPGRADING
new file mode 100644 (file)
index 0000000..776a7fd
--- /dev/null
@@ -0,0 +1,298 @@
+=================
+ Upgrading Turba
+=================
+
+:Contact: turba@lists.horde.org
+
+
+These are instructions to upgrade from earlier Turba versions. Please backup
+your existing data before running any of the steps described below. You can't
+use the updated data with your old Turba version anymore.
+
+
+Upgrading Turba from 2.2.1 to 2.3
+=================================
+
+
+Share Table Updates
+-------------------
+
+Some fields in the SQL share driver tables have been changed. Execute the
+provided SQL script to update your database if you are using the native SQL
+share driver.
+
+   mysql --user=root --password=<MySQL-root-password>  <db name> < scripts/upgrades/2.2.1_to_2.3.sql
+
+
+New fields
+----------
+
+Examples for a few new fields have been added to
+``config/attributes.php.dist`` and ``config/sources.php.dist``. These field
+require Horde 3.3 or later though, so they are disabled by default. If you
+update your ``attributes.php`` and ``sources.php`` files and are using a
+sufficiently recent Horde version, you may want to uncomment those
+examples. These are the ``photo``, ``phototype``, ``logo``, ``logotype``,
+``pgpPublicKey`` and ``smimePublicKey`` fields.
+
+
+Upgrading to Turba 2.2
+======================
+
+These are notes on upgrading from Turba 2.1.x to Turba 2.2.x.
+
+.. Important:: These upgrade instructions assume that you are upgrading from
+               at least Turba 2.1.  If you have an older version of Turba,
+               follow the upgrade steps described in `Upgrading to Turba 2.1`_
+               first.
+
+
+New Default Schema
+------------------
+
+The default database address book schema has been changed to better match
+other address book applications and to ease synchronization with those.
+
+You can still use your old address book schema without any restrictions, but
+if you want to migrate existing address books to the new default scheme, you
+can use the provided upgrade script. This script assumes that you use the old
+default schema from Turba 2.1 and doesn't permanently change any data unless
+you edit it.
+
+To run the script you have to open it in any text editor and change the three
+variables at the top of the script ``$db_user``, ``$db_pass`` and
+``$db_table`` to fit your current Turba installation. You can then run the
+script to see how the data //would// be changed::
+
+   php scripts/upgrades/2.1_to_2.2_sql_schema.php
+
+If you are happy with the results, you can edit the script again and change
+the ``$for_real`` variable::
+
+   $for_real = true;
+
+As always make sure you have a recent backup before running the script once
+more, this time the changes will be permanent. Don't forget to update your
+configuration files or to re-create them from the ``.php.dist`` examples.
+
+A few advanced attribute definitions have been commented out in
+``config/attributes.php`` by default because they require Horde 3.2 or later
+to be installed. If you have a sufficiently recent Horde version you can
+uncomment those lines in ``attributes.php``.
+
+As part of the new default schema, the various address fields have been split
+into individual fields (such as homeStreet, homeProvince etc...). If you still
+wish to display an individual composite address field (which will give you the
+map links) you must add a composite field (such as homeAddress). There is an
+example entry in the sources.php.dist file.
+
+The new schema also uses the "phone" field type that has been introduced with
+Horde 3.2. If you still run earlier Horde versions, change the phone field
+types in ``attributes.php`` to anything that fits your needs, e.g "cellphone"
+or "text".
+
+
+New Beta SQL Share Driver Support
+---------------------------------
+
+A new beta-level SQL Horde_Share driver has been added in Horde 3.2. This
+driver offers significant performance improvements over the existing Datatree
+driver but it has not received the same level of testing, thus the beta
+designation.  In order to make use of this driver, you must be running Horde
+3.2-RC3 or later. To add the new SQL tables for this driver, execute the sql
+script ``2.1_to_2.2_add_sql_share_tables`` that is appropriate for your
+RDBMS. You then must execute the ``convert_datatree_shares_to_sql.php``
+upgrade script to migrate your existing share data.  Both of these scripts can
+be found in the ``scripts/upgrades`` folder.
+
+
+Flattened Horde Shares
+----------------------
+
+Shared address books are now stored in a flat namespace in order
+to remove dependency on the hierarchal properties of the Horde_Share api.  You
+must run the upgrade script ``scripts/upgrades/2007-06-17_flatten_shares.php``.
+
+.. Important:: You must run these scripts BEFORE any user logs in to your
+               upgraded installation to avoid the creation of any duplicate
+               shares.
+
+All user preferences related to address books will be checked and updated by
+Turba transparently during each user's first login after the update.
+
+Additionally, if you are currently using the configuration setting,
+``Name of Client Address Book`` and have it set to a share enabled source, you
+will most likely have to change the entry.  The correct share key to enter here
+is the share name and can be found by browsing the datatree via the
+administration UI if using datatree shares, or by looking in the turba_shares
+table if using SQL based shares.
+
+
+IMSP Driver and Share Support
+-----------------------------
+
+Share support has been added to the IMSP driver.  This support requires at
+least a Horde 3.2 install.  With this change, any IMSP address books the user
+has rights to will be represented internally as a Horde share.  Permissions
+changed on the share will be reflected back to the IMSP server.  If you set
+the configuration setting ``Name of source for creating new shares`` to
+``imsp`` then any shares created by the user will result in a new IMSP address
+book being created on the IMSP server.  Likewise, any IMSP address book
+deleted in Turba will be removed from the IMSP server.
+
+To enable this support, make sure you are using at least Horde 3.2, set the
+``use_shares`` attribute to true, and uncomment the IMSP
+``_horde_hook_share_*`` functions in ``horde/config/hooks.php``.
+
+With this change, the ``IMSP Address Book Administration`` option page has
+been removed, as the creation/deletion of address books is now handled with
+shares.
+
+.. Important:: IMSP contacts contained in contact groups that are not from an
+               IMSP source may not be visible within that group when migrating
+               an IMSP source to a share.
+
+
+Application Hooks
+-----------------
+
+All hooks that are specific to Turba have been moved from the
+``horde/config/hooks.php`` file. Move your existing Turba Hooks from there to
+``turba/config/hooks.php``.
+
+
+Upgrading to Turba 2.1
+======================
+
+
+These are notes on upgrading from Turba 2.0.x to Turba 2.1.
+
+.. Important:: These upgrade instructions assume that you are upgrading from
+               at least Turba 2.0.  If you have an older version of Turba,
+               follow the upgrade steps described in `Upgrading to Turba 2.0`_
+               first.
+
+
+Synchronization Support
+-----------------------
+
+Synchronization with SyncML capable devices is possible now if you have at
+least Horde 3.1.  You need to create a History backend with
+``horde/scripts/sql/horde_histories.sql`` to allow synchronization.  You also
+need to create default history entries for existing contacts by running the
+script ``scripts/upgrades/create_default_histories.php``.
+
+
+New Hook Parameters
+-------------------
+
+The ``_turba_hook_encode_{attribute}`` and ``_turba_hook_decode_{attribute}``
+functions are now passed an additional parameter - the object that is being
+loaded/saved. This enables you to create more powerful custom hooks that build
+a field from several other field's values (the opposite of composite fields),
+or otherwise modify a value based on other properties of the object.
+
+
+Share Support
+-------------
+
+Share support has been added to Turba.  This allows the sharing, adding, and
+deleting of addressbooks for those sources that support it.  Currently, this
+is supported by the SQL driver.  With this change, the ``public`` attribute of
+the params array has been removed in favor of the ``use_share`` attribute.  If
+you are currently using a SQL source as a public source, you must run the
+upgrade script ``scripts/upgrades/public_to_horde_share.php``.  Be sure to
+read the script comments and backup all data before conversion.  This script
+will create a new share that is viewable by all users.  If you choose not to
+use shares, set the ``use_shares`` attribute to ``false`` and the SQL driver
+will behave as in previous versions, that is, a seperate, private addressbook
+for each user.
+
+.. Important:: If you are currently using two seperate ``turba_objects`` tables
+               - one for personal address books and one for a public address
+               book, you should run the upgrade script on the public table,
+               then merge the public table into the private table and enable
+               share support on the private table.  There is no longer any
+               need for maintaining the two seperate tables. If you desire not
+               to enable share support, you may still use seperate tables and
+               set permissions via the administration interface.
+
+
+Upgrading to Turba 2.0
+======================
+
+These are instructions to upgrade from Turba 1.2.x to Turba 2.0.  Please
+backup your existing data before running any of the steps described below.
+You can't use the updated data with your old Turba version anymore.
+
+.. Important:: These upgrade instructions assume that you are upgrading from
+               at least Turba 1.2.  If you have an older version of Turba,
+               follow the upgrade steps described in `Upgrading to Turba 1.2`_
+               first.
+
+
+SQL Backends
+------------
+
+Four new fields have been added to the default SQL table layout, one being
+mandatory.  The new ``object_uid`` field provides a global unique ID to
+objects.
+
+Execute the provided SQL script to update your data to the new Turba version::
+
+   mysql --user=root --password=<MySQL-root-password> <db name> < 1.2_to_2.0.sql
+   psql <db name> -f 1.2_to_2.0.sql
+
+
+History
+-------
+
+The contacts history is now being maintained by the global Horde History
+backend.  To create default history entries execute the provided PHP script::
+
+   php scripts/upgrades/create_default_histories.php
+
+
+Upgrading to Turba 1.2
+======================
+
+These are instructions to upgrade from Turba 1.1 to Turba 1.2.  Please backup
+your existing data before running any of the steps described below.  You will
+no longer be able to use your data with older versions of Turba.
+
+
+SQL Backends
+------------
+
+The SQL schema for the SQL address book has changed. Please update your SQL
+table to the new schema after you update to Turba 1.2.  The fields
+``object_type`` and ``object_members`` have been added (needed for
+distribution lists) and the fields ``object_homeaddress``,
+``object_workaddress``, ``object_homephone``, ``object_workphone`` and
+``object_cellphone`` have changed to all lowercase.
+
+If you are using a MySQL or PostgreSQL database you can also use the update
+script available in ``scripts/upgrades/1.1_to_1.2.sql``.
+
+
+LDAP Backends
+-------------
+
+The LDAP schema for the shared LDAP address book has changed. Please update
+your LDAP directory to use the new schema after you update to Turba 1.2, and
+also update ``config/sources.php`` accordingly.
+
+The ``objectclass`` entry for LDAP address book definitions in
+``config/sources.php`` is respected in Turba 1.2 but wasn't before, so you
+should make sure that you use a correct setting here.
+
+
+IMP Integration
+---------------
+
+If you were using IMP_ 3.1 you should also upgrade to IMP 3.2; distribution
+list support in Turba 1.2/IMP 3.2 is not compatible with how the contacts
+window in IMP 3.1 worked. However, IMP 3.0 did not have this window, and will
+probably play nicely with Turba 1.2.
+
+.. _IMP: http://www.horde.org/imp/
diff --git a/turba/docs/vcf/README b/turba/docs/vcf/README
new file mode 100644 (file)
index 0000000..1117d9b
--- /dev/null
@@ -0,0 +1,3 @@
+This directory contains some example .vcf files - vCards - for use in
+testing importing/exporting of data from Turba and for developers who
+need examples to work with the format.
diff --git a/turba/docs/vcf/brad.vcf b/turba/docs/vcf/brad.vcf
new file mode 100644 (file)
index 0000000..f2aa86d
--- /dev/null
@@ -0,0 +1,11 @@
+begin:vcard 
+n:Kieser;Bradley
+x-mozilla-html:TRUE
+org:Kieser Consultancy Limited
+adr:;;;;;;
+version:2.1
+email;internet:brad@kieser.demon.co.uk
+title:Director
+x-mozilla-cpt:;18656
+fn:Bradley Kieser
+end:vcard
diff --git a/turba/docs/vcf/dimitris.vcf b/turba/docs/vcf/dimitris.vcf
new file mode 100644 (file)
index 0000000..5a9bd25
--- /dev/null
@@ -0,0 +1,15 @@
+begin:vcard 
+n:Daskopoulos;Dimitris
+tel;fax:+30 31 998492
+tel;work:+30 31 998490
+x-mozilla-html:FALSE
+url:http://www.auth.gr/noc
+org:Aristotle Univeristy of Thessaloniki;Network Operation Center
+version:2.1
+email;internet:dimitris@ccf.auth.gr
+title:Network Services Manager
+adr;quoted-printable:;;Biology Building, 1st Floor=0D=0A(or PO Box 888)=0D=0A;Thessaloniki;Macedonia;540 06;Greece
+x-mozilla-cpt:;-6096
+fn:Dimitris Daskopoulos
+end:vcard
+
diff --git a/turba/docs/vcf/dwalt.vcf b/turba/docs/vcf/dwalt.vcf
new file mode 100644 (file)
index 0000000..394f6e4
--- /dev/null
@@ -0,0 +1,17 @@
+begin:vcard 
+n:Waltermire;David
+tel;pager:(717) 305-3489
+tel;fax:(717) 738-7030
+tel;home:(717) 661-7913
+tel;work:(717) 738-7071
+x-mozilla-html:TRUE
+url:http://www.supernet.com
+org:D&E SuperNet, a OneMain.com company;Systems Administration
+adr:;;4139 Oregon Pike;Ephrata;PA;17522;USA
+version:2.1
+email;internet:dwalt@supernet.com
+title:Systems Administration Manager
+x-mozilla-cpt:;30848
+fn:David Waltermire
+end:vcard
+
diff --git a/turba/docs/vcf/foo.vcf b/turba/docs/vcf/foo.vcf
new file mode 100644 (file)
index 0000000..610e90e
--- /dev/null
@@ -0,0 +1,28 @@
+BEGIN:VCARD
+VERSION:2.1
+N:Norris;David;L.;
+FN:David L. Norris
+ORG:Midwest Spectrum Management Alliance, Inc.
+TITLE:Web Master
+NOTE:ICQ - 412039
+TEL;HOME;VOICE:+1 (317) 291-5774
+EMAIL;PREF;INTERNET:kg9ae@geocities.com
+FBURL:http://illusionary.dyn.ml.org/busy/kg9ae-AT-geocities.com.vfb
+ADR;HOME:;;4532 W 30th St.;Indianapolis;IN;46222-1504;United States of America
+URL:http://www.geocities.com/CapeCanaveral/Lab/1652/
+REV:19980530T082127Z
+END:VCARD
+
+begin:vcard 
+n:Sica;Lawrence
+tel;fax:858-793-4069
+tel;work:858-793-4060
+x-mozilla-html:FALSE
+url:http://www.interactivate.com
+org:Interactivate, Inc.
+adr:;;2444b Carmel Valley Rd;Del Mar;CA;92014;USA
+version:2.1
+email;internet:larry@interactivate.com
+title:Systems Administrator
+fn:Lawrence Sica
+end:vcard
diff --git a/turba/docs/vcf/larry.vcf b/turba/docs/vcf/larry.vcf
new file mode 100644 (file)
index 0000000..59af2a9
--- /dev/null
@@ -0,0 +1,14 @@
+begin:vcard 
+n:Sica;Lawrence
+tel;fax:858-793-4069
+tel;work:858-793-4060
+x-mozilla-html:FALSE
+url:http://www.interactivate.com
+org:Interactivate, Inc.
+adr:;;2444b Carmel Valley Rd;Del Mar;CA;92014;USA
+version:2.1
+email;internet:larry@interactivate.com
+title:Systems Administrator
+fn:Lawrence Sica
+end:vcard
+
diff --git a/turba/docs/vcf/multiple.vcf b/turba/docs/vcf/multiple.vcf
new file mode 100644 (file)
index 0000000..a9eb64f
--- /dev/null
@@ -0,0 +1,24 @@
+BEGIN:VCARD
+VERSION:2.1
+N:Norris;David
+FN:David Norris
+TITLE:Web Master
+ORG:Midwest Spectrum Management Alliance, Inc.
+ADR:;;4532 W 30th St.;Indianapolis;IN;46222-1504;United States of America
+NOTE:ICQ - 412039
+TEL;HOME:+1 (317) 291-5774
+EMAIL:kg9ae@geocities.com
+END:VCARD
+
+BEGIN:VCARD
+VERSION:2.1
+N:Sica;Lawrence
+FN:Lawrence Sica
+TITLE:Systems Administrator
+ORG:Interactivate, Inc.
+ADR:;;2444b Carmel Valley Rd;Del Mar;CA;92014;USA
+TEL;FAX:858-793-4069
+TEL;WORK:858-793-4060
+EMAIL:larry@interactivate.com
+END:VCARD
+
diff --git a/turba/docs/vcf/palm.vcf b/turba/docs/vcf/palm.vcf
new file mode 100644 (file)
index 0000000..a9eb64f
--- /dev/null
@@ -0,0 +1,24 @@
+BEGIN:VCARD
+VERSION:2.1
+N:Norris;David
+FN:David Norris
+TITLE:Web Master
+ORG:Midwest Spectrum Management Alliance, Inc.
+ADR:;;4532 W 30th St.;Indianapolis;IN;46222-1504;United States of America
+NOTE:ICQ - 412039
+TEL;HOME:+1 (317) 291-5774
+EMAIL:kg9ae@geocities.com
+END:VCARD
+
+BEGIN:VCARD
+VERSION:2.1
+N:Sica;Lawrence
+FN:Lawrence Sica
+TITLE:Systems Administrator
+ORG:Interactivate, Inc.
+ADR:;;2444b Carmel Valley Rd;Del Mar;CA;92014;USA
+TEL;FAX:858-793-4069
+TEL;WORK:858-793-4060
+EMAIL:larry@interactivate.com
+END:VCARD
+
diff --git a/turba/docs/vcf/sfg.vcf b/turba/docs/vcf/sfg.vcf
new file mode 100644 (file)
index 0000000..5b86f6e
--- /dev/null
@@ -0,0 +1,21 @@
+BEGIN:VCARD
+X-EVOLUTION-FILE-AS:Guthrie, Stuart
+FN:Stuart Guthrie
+N:Guthrie;Stuart
+ADR;WORK;QUOTED-PRINTABLE:;Rozelle=0ANSW 2039=0AAustralia;4 Moore St
+LABEL;QUOTED-PRINTABLE;WORK:4 Moore St=0ARozelle=0ANSW 2039=0AAustralia
+TEL;WORK;VOICE:+61 2 9555 4022
+TEL;HOME:+61 2 9818 4668
+TEL;CELL:0403 470 123
+EMAIL;INTERNET:sfg@eurekait.com
+URL:www.eurekait.com
+ORG:Eureka IT
+TITLE:Principal
+NICKNAME:stu
+FBURL:http://www.eurekait.com/sfg.ifb
+NOTE:IT Consultant based in Sydney Australia. Writes jical.  Codes Java, J2EE and does Linux Pilots in Australia.
+X-EVOLUTION-LAST-USE:2002-08-21
+X-EVOLUTION-USE-SCORE:8.000000
+UID:pas-id-3D62D39A00000000
+END:VCARD
+
diff --git a/turba/docs/vcf/test.vcf b/turba/docs/vcf/test.vcf
new file mode 100644 (file)
index 0000000..7731238
--- /dev/null
@@ -0,0 +1,14 @@
+BEGIN:VCARD
+VERSION:2.1
+N:Norris;David;L.;
+FN:David L. Norris
+ORG:Midwest Spectrum Management Alliance, Inc.
+TITLE:Web Master
+NOTE:ICQ - 412039
+TEL;HOME;VOICE:+1 (317) 291-5774
+EMAIL;PREF;INTERNET:kg9ae@geocities.com
+FBURL:http://illusionary.dyn.ml.org/busy/kg9ae-AT-geocities.com.vfb
+ADR;HOME:;;4532 W 30th St.;Indianapolis;IN;46222-1504;United States of America
+URL:http://www.geocities.com/CapeCanaveral/Lab/1652/
+REV:19980530T082127Z
+END:VCARD
\ No newline at end of file
diff --git a/turba/edit.php b/turba/edit.php
new file mode 100644 (file)
index 0000000..419356b
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+/**
+ * Turba edit.php.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+require_once TURBA_BASE . '/lib/Forms/EditContact.php';
+
+$listView = null;
+$vars = Horde_Variables::getDefaultVariables();
+$source = $vars->get('source');
+$original_source = $vars->get('original_source');
+$key = $vars->get('key');
+$groupedit = $vars->get('actionID') == 'groupedit';
+$objectkeys = $vars->get('objectkeys');
+$url = Horde_Util::getFormData('url', Horde::applicationUrl($prefs->getValue('initial_page'), true));
+
+/* Edit the first of a list of contacts? */
+if ($groupedit && (!$key || $key == '**search')) {
+    if (!count($objectkeys)) {
+        $notification->push(_("You must select at least one contact first."), 'horde.warning');
+        header('Location: ' . $url);
+        exit;
+    }
+    if ($key == '**search') {
+        $original_source = $key;
+    }
+    list($source, $key) = explode(':', $objectkeys[0], 2);
+    if (empty($original_source)) {
+        $original_source = $source;
+    }
+    $vars->set('key', $key);
+    $vars->set('source', $source);
+    $vars->set('original_source', $original_source);
+}
+
+if ($source === null || !isset($cfgSources[$source])) {
+    $notification->push(_("Not found"), 'horde.error');
+    header('Location: ' . $url);
+    exit;
+}
+
+$driver = Turba_Driver::singleton($source);
+
+/* Set the contact from the requested key. */
+$contact = $driver->getObject($key);
+if (is_a($contact, 'PEAR_Error')) {
+    $notification->push($contact, 'horde.error');
+    header('Location: ' . $url);
+    exit;
+}
+
+/* Check permissions on this contact. */
+if (!$contact->hasPermission(PERMS_EDIT)) {
+    if (!$contact->hasPermission(PERMS_READ)) {
+        $notification->push(_("You do not have permission to view this contact."), 'horde.error');
+        header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+        exit;
+    } else {
+        $notification->push(_("You only have permission to view this contact."), 'horde.error');
+        header('Location: ' . $contact->url('Contact', true));
+        exit;
+    }
+}
+
+/* Create the edit form. */
+if ($groupedit) {
+    $form = new Turba_EditContactGroupForm($vars, $contact);
+} else {
+    $form = new Turba_EditContactForm($vars, $contact);
+}
+
+/* Execute() checks validation first. */
+$edited = $form->execute();
+if (!is_a($edited, 'PEAR_Error')) {
+    $url = Horde_Util::getFormData('url');
+    header('Location: ' . (empty($url) ? $contact->url('Contact', true) : $url));
+    exit;
+}
+
+$title = sprintf(_("Edit \"%s\""), $contact->getValue('name'));
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+$form->setTitle($title);
+$form->renderActive(new Horde_Form_Renderer(), $vars, 'edit.php', 'post');
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/index.php b/turba/index.php
new file mode 100644 (file)
index 0000000..20566c7
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+/**
+ * Turba index page.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you did
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.load.php';
+$turba_configured = (is_readable(TURBA_BASE . '/config/conf.php') &&
+                     is_readable(TURBA_BASE . '/config/attributes.php') &&
+                     is_readable(TURBA_BASE . '/config/prefs.php') &&
+                     is_readable(TURBA_BASE . '/config/mime_drivers.php') &&
+                     is_readable(TURBA_BASE . '/config/sources.php'));
+
+if (!$turba_configured) {
+    require HORDE_BASE . '/lib/Test.php';
+    Horde_Test::configFilesMissing('Turba', TURBA_BASE,
+        array('conf.php', 'prefs.php', 'mime_drivers.php', 'sources.php'),
+        array('attributes.php' => 'This file defines the Turba global attribute names and types - names, email addresses, etc.'));
+}
+
+require_once TURBA_BASE . '/lib/base.php';
+require TURBA_BASE . '/' . ($browse_source_count
+                            ? basename($prefs->getValue('initial_page'))
+                            : 'search.php');
diff --git a/turba/js/src/contact_tabs.js b/turba/js/src/contact_tabs.js
new file mode 100644 (file)
index 0000000..c25e661
--- /dev/null
@@ -0,0 +1,19 @@
+var contactTabs = null;
+function ShowTab(tab)
+{
+    if (contactTabs == null) {
+        contactTabs = $('page').select('.tabset')[0].down();
+    }
+
+    contactTabs.select('li').each(function(item) {
+        if (item.id == 'tab' + tab) {
+            item.addClassName('activeTab');
+            $(item.id.substring(3)).show();
+        } else {
+            item.removeClassName('activeTab');
+            $(item.id.substring(3)).hide();
+        }
+    });
+
+    return false;
+}
diff --git a/turba/lib/.htaccess b/turba/lib/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/turba/lib/Block/minisearch.php b/turba/lib/Block/minisearch.php
new file mode 100644 (file)
index 0000000..0de9eba
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+
+$block_name = _("Contact Search");
+
+/**
+ * This is an implementation of the Horde_Block API that allows searching of
+ * address books from the portal.
+ *
+ * @package Horde_Block
+ */
+class Horde_Block_turba_minisearch extends Horde_Block {
+
+    var $_app = 'turba';
+
+    /**
+     * The title to go in this block.
+     *
+     * @return string  The title text.
+     */
+    function _title()
+    {
+        return Horde::link(Horde::url($GLOBALS['registry']->getInitialPage(),
+                                      true))
+            . _("Contact Search") . '</a>';
+    }
+
+    /**
+     * The content to go in this block.
+     *
+     * @return string  The block content.
+     */
+    function _content()
+    {
+        require_once dirname(__FILE__) . '/../base.php';
+
+        if ($GLOBALS['browser']->hasFeature('iframes')) {
+            Horde::addScriptFile('prototype.js', 'horde', true);
+            return Horde_Util::bufferOutput(
+                'include',
+                TURBA_TEMPLATES . '/block/minisearch.inc');
+        } else {
+            return '<em>' . _("A browser that supports iframes is required")
+                . '</em>';
+        }
+    }
+
+}
diff --git a/turba/lib/Block/tree_menu.php b/turba/lib/Block/tree_menu.php
new file mode 100644 (file)
index 0000000..1bb8afc
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+$block_name = _("Menu List");
+$block_type = 'tree';
+
+/**
+ * @package Horde_Block
+ */
+class Horde_Block_turba_tree_menu extends Horde_Block {
+
+    var $_app = 'turba';
+
+    function _buildTree(&$tree, $indent = 0, $parent = null)
+    {
+        global $registry;
+
+        require_once dirname(__FILE__) . '/../base.php';
+
+        $browse = Horde::applicationUrl('browse.php');
+        $add = Horde::applicationUrl('add.php');
+        $icondir = $registry->getImageDir() . '/menu';
+
+        if ($GLOBALS['addSources']) {
+            $tree->addNode($parent . '__new',
+                           $parent,
+                           _("New Contact"),
+                           $indent + 1,
+                           false,
+                           array('icon' => 'new.png',
+                                 'icondir' => $icondir,
+                                 'url' => $add));
+
+            foreach ($GLOBALS['addSources'] as $addressbook => $config) {
+                $tree->addNode($parent . $addressbook . '__new',
+                               $parent . '__new',
+                               sprintf(_("in %s"), $config['title']),
+                               $indent + 2,
+                               false,
+                               array('icon' => 'new.png',
+                                     'icondir' => $icondir,
+                                     'url' => Horde_Util::addParameter($add, array('source' => $addressbook))));
+            }
+        }
+
+        foreach (Turba::getAddressBooks() as $addressbook => $config) {
+            if (!empty($config['browse'])) {
+                $tree->addNode($parent . $addressbook,
+                               $parent,
+                               $config['title'],
+                               $indent + 1,
+                               false,
+                               array('icon' => 'browse.png',
+                                     'icondir' => $icondir,
+                                     'url' => Horde_Util::addParameter($browse, array('source' => $addressbook))));
+            }
+        }
+
+        $tree->addNode($parent . '__search',
+                       $parent,
+                       _("Search"),
+                       $indent + 1,
+                       false,
+                       array('icon' => 'search.png',
+                             'icondir' => $registry->getImageDir('horde'),
+                             'url' => Horde::applicationUrl('search.php')));
+    }
+
+}
diff --git a/turba/lib/Data/ldif.php b/turba/lib/Data/ldif.php
new file mode 100644 (file)
index 0000000..831c1d6
--- /dev/null
@@ -0,0 +1,297 @@
+<?php
+/**
+ * Horde_Data implementation for LDAP Data Interchange Format (LDIF).
+ *
+ * Copyright 2007-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @author  Rita Selsky <ritaselsky@gmail.com>
+ * @package Horde_Data
+ */
+class Horde_Data_Ldif extends Horde_Data
+{
+    var $_extension = 'ldif';
+
+    var $_contentType = 'text/ldif';
+
+    /**
+     * Useful Mozilla address book attribute names.
+     *
+     * @private
+     * @var array
+     */
+    var $_mozillaAttr = array('cn', 'givenName', 'sn', 'mail', 'mozillaNickname',
+                             'homeStreet', 'mozillaHomeStreet2', 'mozillaHomeLocalityName',
+                             'mozillaHomeState', 'mozillaHomePostalCode',
+                             'mozillaHomeCountryName', 'street',
+                             'mozillaWorkStreet2', 'l', 'st', 'postalCode',
+                             'c', 'homePhone', 'telephoneNumber', 'mobile',
+                             'fax', 'title', 'company', 'description', 'mozillaWorkUrl',
+                              'department', 'mozillaNickname');
+
+    /**
+     * Useful Turba address book attribute names.
+     *
+     * @private
+     * @var array
+     */
+    var $_turbaAttr = array('name', 'firstname', 'lastname', 'email', 'alias',
+                            'homeAddress', 'homeStreet', 'homeCity',
+                            'homeProvince', 'homePostalCode', 'homeCountry',
+                            'workAddress', 'workStreet', 'workCity', 'workProvince',
+                            'workPostalCode', 'workCountry',
+                            'homePhone', 'workPhone', 'cellPhone',
+                            'fax', 'title', 'company', 'notes', 'website',
+                            'department', 'nickname');
+    /**
+     * Turba address book attribute names and the corresponding Mozilla name.
+     *
+     * @private
+     * @var array
+     */
+    var $_turbaMozillaMap = array('name' => 'cn',
+                                  'firstname' => 'givenName',
+                                  'lastname' => 'sn',
+                                  'email' => 'mail',
+                                  'alias' => 'mozillaNickname',
+                                  'homePhone' => 'homePhone',
+                                  'workPhone' => 'telephoneNumber',
+                                  'cellPhone' => 'mobile',
+                                  'fax' => 'fax',
+                                  'title' => 'title',
+                                  'company' => 'company',
+                                  'notes' => 'description',
+                                  'homeAddress' => 'homeStreet',
+                                  'homeStreet' => 'mozillaHomeStreet2',
+                                  'homeCity' => 'mozillaHomeLocalityName',
+                                  'homeProvince' => 'mozillaHomeState',
+                                  'homePostalCode' => 'mozillaHomePostalCode',
+                                  'homeCountry' => 'mozillaHomeCountryName',
+                                  'workAddress' => 'street',
+                                  'workStreet' => 'mozillaWorkStreet2',
+                                  'workCity' => 'l',
+                                  'workProvince' => 'st',
+                                  'workPostalCode' => 'postalCode',
+                                  'workCountry' => 'c',
+                                  'website' => 'mozillaWorkUrl',
+                                  'department' => 'department',
+                                  'nickname' => 'mozillaNickname');
+
+    /**
+     * Check if a string is safe according to RFC 2849, or if it needs to be
+     * base64 encoded.
+     *
+     * @private
+     *
+     * @param string $str  The string to check.
+     *
+     * @return boolean  True if the string is safe, false otherwise.
+     */
+    function _is_safe_string($str)
+    {
+        /*  SAFE-CHAR         = %x01-09 / %x0B-0C / %x0E-7F
+         *                     ; any value <= 127 decimal except NUL, LF,
+         *                     ; and CR
+         *
+         *  SAFE-INIT-CHAR    = %x01-09 / %x0B-0C / %x0E-1F /
+         *                     %x21-39 / %x3B / %x3D-7F
+         *                     ; any value <= 127 except NUL, LF, CR,
+         *                     ; SPACE, colon (":", ASCII 58 decimal)
+         *                     ; and less-than ("<" , ASCII 60 decimal) */
+        if (!strlen($str)) {
+            return true;
+        }
+        if ($str[0] == ' ' || $str[0] == ':' || $str[0] == '<') {
+            return false;
+        }
+        for ($i = 0; $i < strlen($str); ++$i) {
+            if (ord($str[$i]) > 127 || $str[$i] == NULL || $str[$i] == "\n" ||
+                $str[$i] == "\r") {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    function importData($contents, $header = false)
+    {
+        $data = array();
+        $records = preg_split('/(\r?\n){2}/', $contents);
+        foreach ($records as $record) {
+            if (trim($record) == '') {
+                /* Ignore empty records */
+                continue;
+            }
+            /* one key:value pair per line */
+            $lines = preg_split('/\r?\n/', $record);
+            $hash = array();
+            foreach ($lines as $line) {
+                list($key, $delimiter, $value) = preg_split('/(:[:<]?) */', $line, 2, PREG_SPLIT_DELIM_CAPTURE);
+                if (in_array($key, $this->_mozillaAttr)) {
+                    $hash[$key] = ($delimiter == '::' ? base64_decode($value) : $value);
+                }
+            }
+            $data[] = $hash;
+        }
+
+        return $data;
+    }
+
+    /**
+     * Builds a LDIF file from a given data structure and triggers its download.
+     * It DOES NOT exit the current script but only outputs the correct headers
+     * and data.
+     *
+     * @param string $filename  The name of the file to be downloaded.
+     * @param array $data       A two-dimensional array containing the data
+     *                          set.
+     * @param boolean $header   If true, the rows of $data are associative
+     *                          arrays with field names as their keys.
+     */
+    function exportFile($filename, $data, $header = false)
+    {
+        $export = $this->exportData($data, $header);
+        $GLOBALS['browser']->downloadHeaders($filename, 'text/ldif', false, strlen($export));
+        echo $export;
+    }
+
+    /**
+     * Builds a LDIF file from a given data structure and returns it as a
+     * string.
+     *
+     * @param array $data      A two-dimensional array containing the data set.
+     * @param boolean $header  If true, the rows of $data are associative
+     *                         arrays with field names as their keys.
+     *
+     * @return string  The LDIF data.
+     */
+    function exportData($data, $header = false)
+    {
+        if (!is_array($data) || !count($data)) {
+            return '';
+        }
+        $export = '';
+        $mozillaTurbaMap = array_flip($this->_turbaMozillaMap) ;
+        foreach ($data as $row) {
+            $recordData = '';
+            foreach ($this->_mozillaAttr as $value) {
+                if (isset($row[$mozillaTurbaMap[$value]])) {
+                    // Base64 encode each value as necessary and store it.
+                    // Store cn and mail separately for use in record dn
+                    if (!$this->_is_safe_string($row[$mozillaTurbaMap[$value]])) {
+                        $recordData .= $value . ':: ' . base64_encode($row[$mozillaTurbaMap[$value]]) . "\n";
+                    } else {
+                        $recordData .= $value . ': ' . $row[$mozillaTurbaMap[$value]] . "\n";
+                    }
+                }
+            }
+
+            $dn = 'cn=' . $row[$mozillaTurbaMap['cn']] . ',mail=' . $row[$mozillaTurbaMap['mail']];
+            if (!$this->_is_safe_string($dn)) {
+                $export .= 'dn:: ' . base64_encode($dn) . "\n";
+            } else {
+                $export .= 'dn: ' . $dn . "\n";
+            }
+
+            $export .= "objectclass: top\n"
+                . "objectclass: person\n"
+                . "objectclass: organizationalPerson\n"
+                . "objectclass: inetOrgPerson\n"
+                . "objectclass: mozillaAbPersonAlpha\n"
+                . $recordData . "modifytimestamp: 0Z\n\n";
+        }
+
+        return $export;
+    }
+
+    /**
+     * Takes all necessary actions for the given import step, parameters and
+     * form values and returns the next necessary step.
+     *
+     * @param integer $action  The current step. One of the IMPORT_* constants.
+     * @param array $param     An associative array containing needed
+     *                         parameters for the current step.
+     *
+     * @return mixed  Either the next step as an integer constant or imported
+     *                data set after the final step.
+     */
+    function nextStep($action, $param = array())
+    {
+        switch ($action) {
+        case Horde_Data::IMPORT_FILE:
+            $next_step = parent::nextStep($action, $param);
+            if (is_a($next_step, 'PEAR_Error')) {
+                return $next_step;
+            }
+
+            $_SESSION['import_data']['data'] = $this->importFile($_FILES['import_file']['tmp_name']);
+            $data = array();
+            foreach ($_SESSION['import_data']['data'] as $record) {
+                $turbaHash = array();
+                foreach ($this->_turbaAttr as $value) {
+                    switch ($value) {
+                    case 'homeAddress':
+                        // These are the keys we're interested in.
+                        $keys = array('homeStreet', 'mozillaHomeStreet2',
+                                      'mozillaHomeLocalityName', 'mozillaHomeState',
+                                      'mozillaHomePostalCode', 'mozillaHomeCountryName');
+
+                        // Grab all of them that exist in $record.
+                        $values = array_intersect_key($record, array_flip($keys));
+
+                        // Special handling for State if both State
+                        // and Locality Name are set.
+                        if (isset($values['mozillaHomeLocalityName'])
+                            && isset($values['mozillaHomeState'])) {
+                            $values['mozillaHomeLocalityName'] .= ', ' . $values['mozillaHomeState'];
+                            unset($values['mozillaHomeState']);
+                        }
+
+                        if ($values) {
+                            $turbaHash[$value] = implode("\n", $values);
+                        }
+                        break;
+
+                    case 'workAddress':
+                        // These are the keys we're interested in.
+                        $keys = array('street', 'mozillaWorkStreet2', 'l',
+                                      'st', 'postalCode', 'c');
+
+                        // Grab all of them that exist in $record.
+                        $values = array_intersect_key($record, array_flip($keys));
+
+                        // Special handling for "st" if both "st" and
+                        // "l" are set.
+                        if (isset($values['l']) && isset($values['st'])) {
+                            $values['l'] .= ', ' . $values['st'];
+                            unset($values['st']);
+                        }
+
+                        if ($values) {
+                            $turbaHash[$value] = implode("\n", $values);
+                        }
+                        break;
+
+                    default:
+                        if (isset($record[$this->_turbaMozillaMap[$value]])) {
+                            $turbaHash[$value] = $record[$this->_turbaMozillaMap[$value]];
+                        }
+                        break;
+                    }
+                }
+
+                $data[] = $turbaHash;
+            }
+
+            unset($_SESSION['import_data']['data']);
+            return $data;
+
+        default:
+            return parent::nextStep($action, $param);
+        }
+    }
+
+}
diff --git a/turba/lib/Driver.php b/turba/lib/Driver.php
new file mode 100644 (file)
index 0000000..028384f
--- /dev/null
@@ -0,0 +1,2176 @@
+<?php
+/**
+ * The Turba_Driver:: class provides a common abstracted interface to the
+ * various directory search drivers.  It includes functions for searching,
+ * adding, removing, and modifying directory entries.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@csh.rit.edu>
+ * @package Turba
+ */
+class Turba_Driver
+{
+    /**
+     * The internal name of this source.
+     *
+     * @var string
+     */
+    var $name;
+
+    /**
+     * The symbolic title of this source.
+     *
+     * @var string
+     */
+    var $title;
+
+    /**
+     * Hash describing the mapping between Turba attributes and
+     * driver-specific fields.
+     *
+     * @var array
+     */
+    var $map = array();
+
+    /**
+     * Hash with all tabs and their fields.
+     *
+     * @var array
+     */
+    var $tabs = array();
+
+    /**
+     * List of all fields that can be accessed in the backend (excludes
+     * composite attributes, etc.).
+     *
+     * @var array
+     */
+    var $fields = array();
+
+    /**
+     * Array of fields that must match exactly.
+     *
+     * @var array
+     */
+    var $strict = array();
+
+    /**
+     * Array of fields to search "approximately" (@see
+     * config/sources.php.dist).
+     *
+     * @var array
+     */
+    var $approximate = array();
+
+    /**
+     * The name of a field to store contact list names in if not the default.
+     *
+     * @var string
+     */
+    var $listNameField = null;
+
+    /**
+     * The name of a field to use as an alternative to the name field if that
+     * one is empty.
+     *
+     * @var string
+     */
+    var $alternativeName = null;
+
+    /**
+     * Hash holding the driver's additional parameters.
+     *
+     * @var array
+     */
+    var $_params = array();
+
+    /**
+     * What can this backend do?
+     *
+     * @var array
+     */
+    var $_capabilities = array();
+
+    /**
+     * Number of contacts in this source.
+     *
+     * @var integer
+     */
+    var $_count = null;
+
+    /**
+     * Hold the value for the owner of this address book.
+     *
+     * @var string
+     */
+    var $_contact_owner = '';
+
+    /**
+     * Constructs a new Turba_Driver object.
+     *
+     * @param array $params  Hash containing additional configuration
+     *                       parameters.
+     */
+    function Turba_Driver($params)
+    {
+        $this->_params = $params;
+    }
+
+    /**
+     * Returns the current driver's additional parameters.
+     *
+     * @return array  Hash containing the driver's additional parameters.
+     */
+    function getParams()
+    {
+        return $this->_params;
+    }
+
+    /**
+     * Checks if this backend has a certain capability.
+     *
+     * @param string $capability  The capability to check for.
+     *
+     * @return boolean  Supported or not.
+     */
+    function hasCapability($capability)
+    {
+        return !empty($this->_capabilities[$capability]);
+    }
+
+    /**
+     * Returns the attributes that are blob types.
+     *
+     * @return array  List of blob attributes in the array keys.
+     */
+    function getBlobs()
+    {
+        global $attributes;
+
+        $blobs = array();
+        foreach (array_keys($this->fields) as $attribute) {
+            if (isset($attributes[$attribute]) &&
+                $attributes[$attribute]['type'] == 'image') {
+                $blobs[$attribute] = true;
+            }
+        }
+
+        return $blobs;
+    }
+
+    /**
+     * Translates the keys of the first hash from the generalized Turba
+     * attributes to the driver-specific fields. The translation is based on
+     * the contents of $this->map.
+     *
+     * @param array $hash  Hash using Turba keys.
+     *
+     * @return array  Translated version of $hash.
+     */
+    function toDriverKeys($hash)
+    {
+        /* Handle category. */
+        if (!empty($hash['category'])) {
+            if (!empty($hash['category']['new'])) {
+                require_once 'Horde/Prefs/CategoryManager.php';
+                $cManager = new Prefs_CategoryManager();
+                $cManager->add($hash['category']['value']);
+            }
+            $hash['category'] = $hash['category']['value'];
+        }
+
+        // Add composite fields to $hash if at least one field part exists
+        // and the composite field will be saved to storage.
+        // Otherwise composite fields won't be computed during an import.
+        foreach ($this->map as $key => $val) {
+            if (!is_array($val) || empty($this->map[$key]['attribute']) ||
+                array_key_exists($key, $hash)) {
+                continue;
+            }
+
+            foreach ($this->map[$key]['fields'] as $mapfields) {
+                if (isset($hash[$mapfields])) {
+                    // Add composite field
+                    $hash[$key] = null;
+                    break;
+                }
+            }
+        }
+
+        if (!empty($hash['name']) && !empty($this->listNameField) &&
+            !empty($hash['__type']) && is_array($this->map['name']) &&
+            $hash['__type'] == 'Group') {
+                $hash[$this->listNameField] = $hash['name'];
+                unset($hash['name']);
+        }
+
+        $fields = array();
+        foreach ($hash as $key => $val) {
+            if (isset($this->map[$key])) {
+                if (!is_array($this->map[$key])) {
+                    $fields[$this->map[$key]] = $val;
+                } elseif (!empty($this->map[$key]['attribute'])) {
+                    $fieldarray = array();
+                    foreach ($this->map[$key]['fields'] as $mapfields) {
+                        if (isset($hash[$mapfields])) {
+                            $fieldarray[] = $hash[$mapfields];
+                        } else {
+                            $fieldarray[] = '';
+                        }
+                    }
+                    $fields[$this->map[$key]['attribute']] = trim(vsprintf($this->map[$key]['format'], $fieldarray), " \t\n\r\0\x0B,");
+                } else {
+                    // If 'parse' is not specified, use 'format' and 'fields'.
+                    if (!isset($this->map[$key]['parse'])) {
+                        $this->map[$key]['parse'] = array(
+                            array('format' => $this->map[$key]['format'],
+                                  'fields' => $this->map[$key]['fields']));
+                    }
+                    foreach ($this->map[$key]['parse'] as $parse) {
+                        $splitval = sscanf($val, $parse['format']);
+                        $count = 0;
+                        $tmp_fields = array();
+                        foreach ($parse['fields'] as $mapfield) {
+                            if (isset($hash[$mapfield])) {
+                                // If the compositing fields are set
+                                // individually, then don't set them at all.
+                                break 2;
+                            }
+                            $tmp_fields[$this->map[$mapfield]] = $splitval[$count++];
+                        }
+                        // Exit if we found the best match.
+                        if ($splitval[$count - 1] !== null) {
+                            break;
+                        }
+                    }
+                    $fields = array_merge($fields, $tmp_fields);
+                }
+            }
+        }
+
+        return $fields;
+    }
+
+    /**
+     * Takes a hash of Turba key => search value and return a (possibly
+     * nested) array, using backend attribute names, that can be turned into a
+     * search by the driver. The translation is based on the contents of
+     * $this->map, and includes nested OR searches for composite fields.
+     *
+     * @param array  $hash          Hash of criteria using Turba keys.
+     * @param string $search_type   OR search or AND search?
+     * @param array  $strict        Fields that must be matched exactly.
+     * @param boolean $match_begin  Whether to match only at beginning of
+     *                              words.
+     *
+     * @return array  An array of search criteria.
+     */
+    function makeSearch($criteria, $search_type, $strict, $match_begin = false)
+    {
+        $search = array();
+        $strict_search = array();
+        $search_terms = array();
+        $subsearch = array();
+        $temp = '';
+        $lastChar = '\"';
+        $glue = '';
+
+        foreach ($criteria as $key => $val) {
+            if (isset($this->map[$key])) {
+                if (is_array($this->map[$key])) {
+                    /* Composite field, break out the search terms. */
+                    $parts = explode(' ', $val);
+                    if (count($parts) > 1) {
+                        /* Only parse if there was more than 1 search term and
+                         * 'AND' the cumulative subsearches. */
+                        for ($i = 0; $i < count($parts); $i++) {
+                            $term = $parts[$i];
+                            $firstChar = substr($term, 0, 1);
+                            if ($firstChar == '"') {
+                                $temp = substr($term, 1, strlen($term) - 1);
+                                $done = false;
+                                while (!$done && $i < count($parts) - 1) {
+                                    $lastChar = substr($parts[$i + 1], -1);
+                                    if ($lastChar == '"') {
+                                        $temp .= ' ' . substr($parts[$i + 1], 0, -1);
+                                        $done = true;
+                                        $i++;
+                                    } else {
+                                        $temp .= ' ' . $parts[$i + 1];
+                                        $i++;
+                                    }
+                                }
+                                $search_terms[] = $temp;
+                            } else {
+                                $search_terms[] = $term;
+                            }
+                        }
+                        $glue = 'AND';
+                    } else {
+                        /* If only one search term, use original input and
+                           'OR' the searces since we're only looking for 1
+                           term in any of the composite fields. */
+                        $search_terms[0] = $val;
+                        $glue = 'OR';
+                    }
+                    foreach ($this->map[$key]['fields'] as $field) {
+                        $field = $this->toDriver($field);
+                        if (!empty($strict[$field])) {
+                            /* For strict matches, use the original search
+                             * vals. */
+                            $strict_search[] = array(
+                                'field' => $field,
+                                'op' => '=',
+                                'test' => $val,
+                            );
+                        } else {
+                            /* Create a subsearch for each individual search
+                             * term. */
+                            if (count($search_terms) > 1) {
+                                /* Build the 'OR' search for each search term
+                                 * on this field. */
+                                $atomsearch = array();
+                                for ($i = 0; $i < count($search_terms); $i++) {
+                                    $atomsearch[] = array(
+                                        'field' => $field,
+                                        'op' => 'LIKE',
+                                        'test' => $search_terms[$i],
+                                        'begin' => $match_begin,
+                                        'approximate' => !empty($this->approximate[$field]),
+                                    );
+                                }
+                                $atomsearch[] = array(
+                                    'field' => $field,
+                                    'op' => '=',
+                                    'test' => '',
+                                    'begin' => $match_begin,
+                                    'approximate' => !empty($this->approximate[$field])
+                                );
+
+                                $subsearch[] = array('OR' => $atomsearch);
+                                unset($atomsearch);
+                                $glue = 'AND';
+                            } else {
+                                /* $parts may have more than one element, but
+                                 * if they are all quoted we will only have 1
+                                 * $subsearch. */
+                                $subsearch[] = array(
+                                    'field' => $field,
+                                    'op' => 'LIKE',
+                                    'test' => $search_terms[0],
+                                    'begin' => $match_begin,
+                                    'approximate' => !empty($this->approximate[$field]),
+                                );
+                                $glue = 'OR';
+                            }
+                        }
+                    }
+                    if (count($subsearch)) {
+                        $search[] = array($glue => $subsearch);
+                    }
+                } else {
+                    /* Not a composite field. */
+                    if (!empty($strict[$this->map[$key]])) {
+                        $strict_search[] = array(
+                            'field' => $this->map[$key],
+                            'op' => '=',
+                            'test' => $val,
+                        );
+                    } else {
+                        $search[] = array(
+                            'field' => $this->map[$key],
+                            'op' => 'LIKE',
+                            'test' => $val,
+                            'begin' => $match_begin,
+                            'approximate' => !empty($this->approximate[$this->map[$key]]),
+                        );
+                    }
+                }
+            }
+        }
+
+        if (count($strict_search) && count($search)) {
+            return array('AND' => array($search_type => $strict_search,
+                                        array($search_type => $search)));
+        } elseif (count($strict_search)) {
+            return array('AND' => $strict_search);
+        } elseif (count($search)) {
+            return array($search_type => $search);
+        } else {
+            return array();
+        }
+    }
+
+    /**
+     * Translates a single Turba attribute to the driver-specific
+     * counterpart. The translation is based on the contents of
+     * $this->map. This ignores composite fields.
+     *
+     * @param string $attribute  The Turba attribute to translate.
+     *
+     * @return string  The driver name for this attribute.
+     */
+    function toDriver($attribute)
+    {
+        if (!isset($this->map[$attribute])) {
+            return null;
+        }
+
+        if (is_array($this->map[$attribute])) {
+            return $this->map[$attribute]['fields'];
+        } else {
+            return $this->map[$attribute];
+        }
+    }
+
+    /**
+     * Translates an array of hashes from being keyed on driver-specific
+     * fields to being keyed on the generalized Turba attributes. The
+     * translation is based on the contents of $this->map.
+     *
+     * @param array $objects  Array of hashes using driver-specific keys.
+     *
+     * @return array  Translated version of $objects.
+     */
+    function toTurbaKeys($objects)
+    {
+        $attributes = array();
+        foreach ($objects as $entry) {
+            $new_entry = array();
+
+            foreach ($this->map as $key => $val) {
+                if (!is_array($val)) {
+                    $new_entry[$key] = null;
+                    if (isset($entry[$val]) && strlen($entry[$val])) {
+                        $new_entry[$key] = trim($entry[$val]);
+                    }
+                }
+            }
+
+            $attributes[] = $new_entry;
+        }
+        return $attributes;
+    }
+
+    /**
+     * Searches the source based on the provided criteria.
+     *
+     * @todo Allow $criteria to contain the comparison operator (<, =, >,
+     *       'like') and modify the drivers accordingly.
+     *
+     * @param array $search_criteria  Hash containing the search criteria.
+     * @param string $sort_order      The requested sort order which is passed
+     *                                to Turba_List::sort().
+     * @param string $search_type     Do an AND or an OR search (defaults to
+     *                                AND).
+     * @param array $return_fields    A list of fields to return; defaults to
+     *                                all fields.
+     * @param array $custom_strict    A list of fields that must match exactly.
+     * @param boolean $match_begin    Whether to match only at beginning of
+     *                                words.
+     *
+     * @return  The sorted, filtered list of search results.
+     */
+    function &search($search_criteria, $sort_order = null,
+                     $search_type = 'AND', $return_fields = array(),
+                     $custom_strict = array(), $match_begin = false)
+    {
+        /* If we are not using Horde_Share, enforce the requirement that the
+         * current user must be the owner of the addressbook. */
+        $search_criteria['__owner'] = $this->getContactOwner();
+        $strict_fields = array($this->toDriver('__owner') => true);
+
+        /* Add any fields that must match exactly for this source to the
+         * $strict_fields array. */
+        foreach ($this->strict as $strict_field) {
+            $strict_fields[$strict_field] = true;
+        }
+        foreach ($custom_strict as $strict_field) {
+            $strict_fields[$this->map[$strict_field]] = true;
+        }
+
+        /* Translate the Turba attributes to driver-specific attributes. */
+        $fields = $this->makeSearch($search_criteria, $search_type,
+                                    $strict_fields, $match_begin);
+
+        if (count($return_fields)) {
+            $return_fields_pre = array_unique(array_merge(array('__key', '__type', '__owner', 'name'), $return_fields));
+            $return_fields = array();
+            foreach ($return_fields_pre as $field) {
+                $result = $this->toDriver($field);
+                if (is_array($result)) {
+                    foreach ($result as $composite_field) {
+                        $composite_result = $this->toDriver($composite_field);
+                        if ($composite_result) {
+                            $return_fields[] = $composite_result;
+                        }
+                    }
+                } elseif ($result) {
+                    $return_fields[] = $result;
+                }
+            }
+        } else {
+            /* Need to force the array to be re-keyed for the (fringe) case
+             * where we might have 1 DB field mapped to 2 or more Turba
+             * fields */
+            $return_fields = array_values(
+                array_unique(array_values($this->fields)));
+        }
+
+        /* Retrieve the search results from the driver. */
+        $objects = $this->_search($fields, $return_fields);
+        if (is_a($objects, 'PEAR_Error')) {
+            return $objects;
+        }
+
+        $results = $this->_toTurbaObjects($objects, $sort_order);
+        return $results;
+    }
+
+    /**
+     * Takes an array of object hashes and returns a Turba_List
+     * containing the correct Turba_Objects
+     *
+     * @param array $objects      An array of object hashes (keyed to backend).
+     * @param string $sort_order  Desired sort order to pass to
+     *                            Turba_List::sort()
+     *
+     * @return Turba_List containing requested Turba_Objects
+     */
+    function _toTurbaObjects($objects, $sort_order = null)
+    {
+        /* Translate the driver-specific fields in the result back to the more
+         * generalized common Turba attributes using the map. */
+        $objects = $this->toTurbaKeys($objects);
+
+        $list = new Turba_List();
+        foreach ($objects as $object) {
+            $done = false;
+            if (!empty($object['__type']) &&
+                ucwords($object['__type']) != 'Object') {
+                $type = ucwords($object['__type']);
+                $class = 'Turba_Object_' . $type;
+                if (!class_exists($class)) {
+                    require_once TURBA_BASE . '/lib/Object/' . $type . '.php';
+                }
+
+                if (class_exists($class)) {
+                    $list->insert(new $class($this, $object));
+                    $done = true;
+                }
+            }
+            if (!$done) {
+                $list->insert(new Turba_Object($this, $object));
+            }
+        }
+        $list->sort($sort_order);
+        /* Return the filtered (sorted) results. */
+        return $list;
+    }
+
+    /**
+     * Returns a list of birthday or anniversary hashes from this source for a
+     * certain period.
+     *
+     * @param Horde_Date $start  The start date of the valid period.
+     * @param Horde_Date $end    The end date of the valid period.
+     * @param $category          The timeObjects category to return.
+     *
+     * @return mixed  A list of timeObject hashes || PEAR_Error
+     */
+    function listTimeObjects($start, $end, $category)
+    {
+        $res = $this->_getTimeObjectTurbaList($start, $end, $category);
+        if (is_a($res, 'PEAR_Error')) {
+            /* Try the default implementation before returning an error */
+            $res = $this->_getTimeObjectTurbaListFallback($start, $end, $category);
+            if (is_a($res, 'PEAR_Error')) {
+                return $res;
+            }
+        }
+
+        $t_objects = array();
+        while ($ob = $res->next()) {
+            $t_object = $ob->getValue($category);
+            if (empty($t_object) ||
+                $t_object == '0000-00-00' ||
+                !preg_match('/(\d{4})-(\d{2})-(\d{2})/', $t_object, $match)) {
+                continue;
+            }
+
+            $t_object = new Horde_Date(array('mday' => $match[3],
+                                             'month' => $match[2],
+                                             'year' => $match[1]));
+            if ($t_object->compareDate($end) > 0) {
+                continue;
+            }
+
+            $t_object_end = new Horde_Date($t_object);
+            ++$t_object_end->mday;
+            $key = $ob->getValue('__key');
+
+            // Calculate the age of the time object
+            if ($start->year == $end->year) {
+                $age = $start->year - $t_object->year;
+            } elseif ($t_object->month <= $end->month) {
+                // t_object must be in later year
+                $age = $end->year - $t_object->year;
+            } else {
+                // t_object must be in earlier year
+                $age = $start->year - $t_object->year;
+            }
+
+            $title = sprintf(_("%d. %s of %s"),
+                             $age,
+                             $GLOBALS['attributes'][$category]['label'],
+                             $ob->getValue('name'));
+
+            $t_objects[] = array(
+                'id' => $key,
+                'title' => $title,
+                'start' => sprintf('%d-%02d-%02dT00:00:00',
+                                   $t_object->year,
+                                   $t_object->month,
+                                   $t_object->mday),
+                'end' => sprintf('%d-%02d-%02dT00:00:00',
+                                 $t_object_end->year,
+                                 $t_object_end->month,
+                                 $t_object_end->mday),
+                'category' => $ob->getValue('category'),
+                // @todo: This should really be Horde_Date_Recurrence::RECUR_YEARLY_DATE.
+                'recurrence' => array('type' => 5,
+                                      'interval' => 1),
+                'params' => array('source' => $this->name, 'key' => $key),
+                'link' => Horde_Util::addParameter(Horde::applicationUrl('contact.php', true), array('source' => $this->name, 'key' => $key)));
+       }
+
+        return $t_objects;
+    }
+
+    /**
+     * Default implementation for obtaining a Turba_List to get TimeObjects
+     * out of.
+     *
+     * @param Horde_Date $start  The starting date.
+     * @param Horde_Date $end    The ending date.
+     * @param string $field      The address book field containing the
+     *                           timeObject information (birthday, anniversary)
+     *
+     * @return mixed  A Tubra_List of objects || PEAR_Error
+     */
+    function _getTimeObjectTurbaList($start, $end, $field)
+    {
+        return $this->_getTimeObjectTurbaListFallback($start, $end, $field);
+    }
+
+    /**
+     * Default implementation for obtaining a Turba_List to get TimeObjects
+     * out of.
+     *
+     * @param Horde_Date $start  The starting date.
+     * @param Horde_Date $end    The ending date.
+     * @param string $field      The address book field containing the
+     *                           timeObject information (birthday, anniversary)
+     *
+     * @return mixed  A Tubra_List of objects || PEAR_Error
+     */
+    function _getTimeObjectTurbaListFallback($start, $end, $field)
+    {
+        $res = $this->search(array(), null, 'AND',
+                             array('name', $field, 'category'));
+
+        return $res;
+    }
+
+    /**
+     * Retrieves a set of objects from the source.
+     *
+     * @param array $objectIds  The unique ids of the objects to retrieve.
+     *
+     * @return array  The array of retrieved objects (Turba_Objects).
+     */
+    function &getObjects($objectIds)
+    {
+        $objects = $this->_read($this->map['__key'], $objectIds,
+                                $this->getContactOwner(),
+                                array_values($this->fields),
+                                $this->toDriverKeys($this->getBlobs()));
+        if (is_a($objects, 'PEAR_Error')) {
+            return $objects;
+        }
+        if (!is_array($objects)) {
+            $result = PEAR::raiseError(_("Requested object not found."));
+            return $result;
+        }
+
+        $results = array();
+        $objects = $this->toTurbaKeys($objects);
+        foreach ($objects as $object) {
+            $done = false;
+            if (!empty($object['__type']) &&
+                ucwords($object['__type']) != 'Object') {
+
+                $type = ucwords($object['__type']);
+                $class = 'Turba_Object_' . $type;
+                if (!class_exists($class)) {
+                    require_once TURBA_BASE . '/lib/Object/' . $type . '.php';
+                }
+
+                if (class_exists($class)) {
+                    $results[] = new $class($this, $object);
+                    $done = true;
+                }
+            }
+            if (!$done) {
+                $results[] = new Turba_Object($this, $object);
+            }
+        }
+
+        return $results;
+    }
+
+    /**
+     * Retrieves one object from the source.
+     *
+     * @param string $objectId  The unique id of the object to retrieve.
+     *
+     * @return Turba_Object  The retrieved object.
+     */
+    function &getObject($objectId)
+    {
+        $result = &$this->getObjects(array($objectId));
+        if (is_a($result, 'PEAR_Error')) {
+            // Fall through.
+        } elseif (empty($result[0])) {
+            $result = PEAR::raiseError('No results');
+        } else {
+            $result = $result[0];
+            if (!isset($this->map['__owner'])) {
+                $result->attributes['__owner'] = $this->getContactOwner();
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Adds a new entry to the contact source.
+     *
+     * @param array $attributes  The attributes of the new object to add.
+     *
+     * @return mixed  The new __key value on success, or a PEAR_Error object
+     *                on failure.
+     */
+    function add($attributes)
+    {
+        /* Only set __type and __owner if they are not already set. */
+        if (!isset($attributes['__type'])) {
+            $attributes['__type'] = 'Object';
+        }
+        if (isset($this->map['__owner']) && !isset($attributes['__owner'])) {
+            $attributes['__owner'] = $this->getContactOwner();
+        }
+
+        if (!isset($attributes['__uid'])) {
+            $attributes['__uid'] = $this->generateUID();
+        }
+
+        $key = $attributes['__key'] = $this->_makeKey($this->toDriverKeys($attributes));
+        $uid = $attributes['__uid'];
+
+        $attributes = $this->toDriverKeys($attributes);
+        $result = $this->_add($attributes, $this->toDriverKeys($this->getBlobs()));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        /* Log the creation of this item in the history log. */
+        $history = &Horde_History::singleton();
+        $history->log('turba:' . $this->getName() . ':' . $uid,
+                      array('action' => 'add'), true);
+
+        return $key;
+    }
+
+    /**
+     * Deletes the specified entry from the contact source.
+     *
+     * @param string $object_id  The ID of the object to delete.
+     */
+    function delete($object_id)
+    {
+        $object = &$this->getObject($object_id);
+        if (is_a($object, 'PEAR_Error')) {
+            return $object;
+        }
+
+        if (!$object->hasPermission(PERMS_DELETE)) {
+            return PEAR::raiseError(_("Permission denied"));
+        }
+
+        $result = $this->_delete($this->toDriver('__key'), $object_id);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $own_contact = $GLOBALS['prefs']->getValue('own_contact');
+        if (!empty($own_contact)) {
+            @list($source, $id) = explode(';', $own_contact);
+            if ($id == $object_id) {
+                $GLOBALS['prefs']->setValue('own_contact', '');
+            }
+        }
+
+        /* Log the deletion of this item in the history log. */
+        if ($object->getValue('__uid')) {
+            $history = Horde_History::singleton();
+            $history->log($object->getGuid(),
+                          array('action' => 'delete'), true);
+        }
+
+        return true;
+    }
+
+    /**
+     * Deletes all contacts from an address book.
+     *
+     * @param string  $sourceName  The identifier of the address book to
+     *                             delete.  If omitted, will clear the current
+     *                             user's 'default' address book for this source
+     *                             type.
+     *
+     * @return mixed  True on success, PEAR_Error on failure.
+     */
+    function deleteAll($sourceName = null)
+    {
+        if (!$this->hasCapability('delete_all')) {
+            return PEAR::raiseError('Not supported');
+        } else {
+            return $this->_deleteAll($sourceName);
+        }
+    }
+
+    /**
+     * Modifies an existing entry in the contact source.
+     *
+     * @param Turba_Object $object  The object to update.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function save($object)
+    {
+        list($object_key, $object_id) = each($this->toDriverKeys(array('__key' => $object->getValue('__key'))));
+
+        $object_id = $this->_save($object_key, $object_id,
+                                  $this->toDriverKeys($object->getAttributes()),
+                                  $this->toDriverKeys($this->getBlobs()));
+        if (is_a($object_id, 'PEAR_Error')) {
+            return $object_id;
+        }
+
+        /* Log the modification of this item in the history log. */
+        if ($object->getValue('__uid')) {
+            $history = &Horde_History::singleton();
+            $history->log($object->getGuid(),
+                          array('action' => 'modify'), true);
+        }
+        return $object_id;
+    }
+
+    /**
+     * Returns the number of contacts of the current user in this address book.
+     *
+     * @return integer  The number of contacts that the user owns.
+     */
+    function count()
+    {
+        if (is_null($this->_count)) {
+            $count = $this->_search(array('AND' => array(array('field' => $this->toDriver('__owner'), 'op' => '=', 'test' => $this->getContactOwner()))), array($this->toDriver('__key')));
+            if (is_a($count, 'PEAR_Error')) {
+                return $count;
+            }
+            $this->_count = count($count);
+        }
+
+        return $this->_count;
+    }
+
+    /**
+     * Returns the criteria available for this source except '__key'.
+     *
+     * @return array  An array containing the criteria.
+     */
+    function getCriteria()
+    {
+        $criteria = $this->map;
+        unset($criteria['__key']);
+        return $criteria;
+    }
+
+    /**
+     * Returns all non-composite fields for this source. Useful for importing
+     * and exporting data, etc.
+     *
+     * @return array  The field list.
+     */
+    function getFields()
+    {
+        return array_flip($this->fields);
+    }
+
+    /**
+     * Generates a universal/unique identifier for a contact. This is NOT
+     * something that we expect to be able to parse into an addressbook and a
+     * contactId.
+     *
+     * @return string  A nice unique string (should be 255 chars or less).
+     */
+    function generateUID()
+    {
+        return date('YmdHis') . '.'
+            . substr(str_pad(base_convert(microtime(), 10, 36), 16, uniqid(mt_rand()), STR_PAD_LEFT), -16)
+            . '@' . $GLOBALS['conf']['server']['name'];
+    }
+
+    /**
+     * Exports a given Turba_Object as an iCalendar vCard.
+     *
+     * @param Turba_Object $object    A Turba_Object.
+     * @param string       $version   The vcard version to produce.
+     *
+     * @static
+     *
+     * @return Horde_iCalendar_vcard  A Horde_iCalendar_vcard object.
+     */
+    function tovCard($object, $version = '2.1')
+    {
+        $hash = $object->getAttributes();
+        $vcard = new Horde_iCalendar_vcard($version);
+        $formattedname = false;
+        $charset = $version == '2.1' ? array('CHARSET' => Horde_Nls::getCharset()) : array();
+        $geo = null;
+
+        foreach ($hash as $key => $val) {
+            if (!strlen($val)) {
+                continue;
+            }
+            if ($version != '2.1') {
+                $val = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'utf-8');
+            }
+
+            switch ($key) {
+            case 'name':
+                $vcard->setAttribute('FN', $val, Horde_Mime::is8bit($val) ? $charset : array());
+                $formattedname = true;
+                break;
+            case 'nickname':
+            case 'alias':
+                $vcard->setAttribute('NICKNAME', $val,
+                                     Horde_Mime::is8bit($val) ? $charset : array());
+                break;
+
+            case 'homeAddress':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('LABEL', $val, array('HOME' => null));
+                } else {
+                    $vcard->setAttribute('LABEL', $val, array('TYPE' => 'HOME'));
+                }
+                break;
+            case 'workAddress':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('LABEL', $val, array('HOME' => null));
+                } else {
+                    $vcard->setAttribute('LABEL', $val, array('TYPE' => 'WORK'));
+                }
+                break;
+            case 'otherAddress':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('LABEL', $val);
+                } else {
+                    $vcard->setAttribute('LABEL', $val);
+                }
+                break;
+
+            case 'phone':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val);
+                } else {
+                    $vcard->setAttribute('TEL', $val);
+                }
+                break;
+            case 'homePhone':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('HOME' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'HOME'));
+                }
+                break;
+            case 'workPhone':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('WORK' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'WORK'));
+                }
+                break;
+            case 'cellPhone':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('CELL' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'CELL'));
+                }
+                break;
+            case 'homeCellPhone':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('CELL' => null, 'HOME' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'CELL', 'TYPE' => 'HOME'));
+                }
+                break;
+            case 'workCellPhone':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('CELL' => null, 'WORK' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'CELL', 'TYPE' => 'WORK'));
+                }
+                break;
+
+            case 'videoCall':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('VIDEO' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'VIDEO'));
+                }
+                break;
+            case 'homeVideoCall':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('VIDEO' => null, 'HOME' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'VIDEO', 'TYPE' => 'HOME'));
+                }
+                break;
+            case 'workVideoCall':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('VIDEO' => null, 'WORK' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'VIDEO', 'TYPE' => 'WORK'));
+                }
+                break;
+
+            case 'sip':
+                $vcard->setAttribute('X-SIP', $val);
+                break;
+            case 'ptt':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('X-SIP', $val, array('POC' => null));
+                } else {
+                    $vcard->setAttribute('X-SIP', $val, array('TYPE' => 'POC'));
+                }
+                break;
+            case 'voip':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('X-SIP', $val, array('VOIP' => null));
+                } else {
+                    $vcard->setAttribute('X-SIP', $val, array('TYPE' => 'VOIP'));
+                }
+                break;
+            case 'shareView':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('X-SIP', $val, array('SWIS' => null));
+                } else {
+                    $vcard->setAttribute('X-SIP', $val, array('TYPE' => 'SWIS'));
+                }
+                break;
+
+            case 'instantMessenger':
+                $vcard->setAttribute('X-WV-ID', $val);
+                break;
+
+            case 'fax':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('FAX' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'FAX'));
+                }
+                break;
+            case 'homeFax':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('FAX' => null, 'HOME' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'FAX', 'TYPE' => 'HOME'));
+                }
+                break;
+            case 'workFax':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('FAX' => null, 'WORK' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'FAX', 'TYPE' => 'WORK'));
+                }
+                break;
+
+            case 'pager':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('TEL', $val, array('PAGER' => null));
+                } else {
+                    $vcard->setAttribute('TEL', $val, array('TYPE' => 'PAGER'));
+                }
+                break;
+
+            case 'email':
+                $vcard->setAttribute('EMAIL',
+                                     Horde_iCalendar_vcard::getBareEmail($val));
+                break;
+            case 'homeEmail':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('EMAIL',
+                                         Horde_iCalendar_vcard::getBareEmail($val),
+                                         array('HOME' => null));
+                } else {
+                    $vcard->setAttribute('EMAIL',
+                                         Horde_iCalendar_vcard::getBareEmail($val),
+                                         array('TYPE' => 'HOME'));
+                }
+                break;
+            case 'workEmail':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('EMAIL',
+                                         Horde_iCalendar_vcard::getBareEmail($val),
+                                         array('WORK' => null));
+                } else {
+                    $vcard->setAttribute('EMAIL',
+                                         Horde_iCalendar_vcard::getBareEmail($val),
+                                         array('TYPE' => 'WORK'));
+                }
+                break;
+            case 'emails':
+                $emails = explode(',', $val);
+                foreach ($emails as $email) {
+                    $vcard->setAttribute('EMAIL',
+                                         Horde_iCalendar_vcard::getBareEmail($email));
+                }
+                break;
+
+            case 'title':
+                $vcard->setAttribute('TITLE', $val,
+                                     Horde_Mime::is8bit($val) ? $charset : array());
+                break;
+            case 'role':
+                $vcard->setAttribute('ROLE', $val,
+                                     Horde_Mime::is8bit($val) ? $charset : array());
+                break;
+
+            case 'notes':
+                $vcard->setAttribute('NOTE', $val,
+                                     Horde_Mime::is8bit($val) ? $charset : array());
+                break;
+
+            case 'businessCategory':
+            case 'category':
+                if (!empty($val)) {
+                    $vcard->setAttribute('CATEGORIES', $val);
+                }
+                break;
+
+            case 'anniversary':
+                $vcard->setAttribute('X-ANNIVERSARY', $val);
+                break;
+
+            case 'spouse':
+                $vcard->setAttribute('X-SPOUSE', $val);
+                break;
+
+            case 'children':
+                $vcard->setAttribute('X-CHILDREN', $val);
+                break;
+
+            case 'website':
+                $vcard->setAttribute('URL', $val);
+                break;
+            case 'homeWebsite':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('URL', $val, array('HOME' => null));
+                } else {
+                    $vcard->setAttribute('URL', $val, array('TYPE' => 'HOME'));
+                }
+                break;
+            case 'workWebsite':
+                if ($version == '2.1') {
+                    $vcard->setAttribute('URL', $val, array('WORK' => null));
+                } else {
+                    $vcard->setAttribute('URL', $val, array('TYPE' => 'WORK'));
+                }
+                break;
+
+            case 'birthday':
+                $vcard->setAttribute('BDAY', $val);
+                break;
+
+            case 'timezone':
+                $vcard->setAttribute('TZ', $val, array('VALUE' => 'text'));
+                break;
+
+            case 'latitude':
+                if (isset($hash['longitude'])) {
+                    $vcard->setAttribute('GEO',
+                                         array('latitude' => $val,
+                                               'longitude' => $hash['longitude']));
+                }
+                break;
+            case 'homeLatitude':
+                if (isset($hash['homeLongitude'])) {
+                    if ($version == '2.1') {
+                        $vcard->setAttribute('GEO',
+                                             array('latitude' => $val,
+                                                   'longitude' => $hash['homeLongitude']),
+                                             array('HOME' => null));
+                   } else {
+                        $vcard->setAttribute('GEO',
+                                             array('latitude' => $val,
+                                                   'longitude' => $hash['homeLongitude']),
+                                             array('TYPE' => 'HOME'));
+                   }
+                }
+                break;
+            case 'workLatitude':
+                if (isset($hash['workLongitude'])) {
+                    if ($version == '2.1') {
+                        $vcard->setAttribute('GEO',
+                                             array('latitude' => $val,
+                                                   'longitude' => $hash['workLongitude']),
+                                             array('WORK' => null));
+                   } else {
+                        $vcard->setAttribute('GEO',
+                                             array('latitude' => $val,
+                                                   'longitude' => $hash['workLongitude']),
+                                             array('TYPE' => 'WORK'));
+                   }
+                }
+                break;
+
+            case 'photo':
+            case 'logo':
+                $params = array('ENCODING' => 'b');
+                if (isset($hash[$key . 'type'])) {
+                    $params['TYPE'] = $hash[$key . 'type'];
+                }
+                $vcard->setAttribute(Horde_String::upper($key),
+                                     base64_encode($val),
+                                     $params);
+                break;
+            }
+        }
+
+        // No explicit firstname/lastname in data source: we have to guess.
+        if (!isset($hash['lastname']) && isset($hash['name'])) {
+            $i = strpos($hash['name'], ',');
+            if (is_int($i)) {
+                // Assume Last, First
+                $hash['lastname'] = Horde_String::substr($hash['name'], 0, $i);
+                $hash['firstname'] = trim(Horde_String::substr($hash['name'], $i + 1));
+            } elseif (is_int(strpos($hash['name'], ' '))) {
+                // Assume everything after last space as lastname
+                $i = strrpos($hash['name'], ' ');
+                $hash['lastname'] = trim(Horde_String::substr($hash['name'], $i + 1));
+                $hash['firstname'] = Horde_String::substr($hash['name'], 0, $i);
+            } else {
+                $hash['lastname'] = $hash['name'];
+                $hash['firstname'] = '';
+            }
+        }
+
+        $a = array(
+            VCARD_N_FAMILY => isset($hash['lastname']) ? $hash['lastname'] : '',
+            VCARD_N_GIVEN  => isset($hash['firstname']) ? $hash['firstname'] : '',
+            VCARD_N_ADDL   => isset($hash['middlenames']) ? $hash['middlenames'] : '',
+            VCARD_N_PREFIX => isset($hash['namePrefix']) ? $hash['namePrefix'] : '',
+            VCARD_N_SUFFIX => isset($hash['nameSuffix']) ? $hash['nameSuffix'] : '',
+        );
+        $val = implode(';', $a);
+        if ($version != '2.1') {
+            $val = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'utf-8');
+            $a = Horde_String::convertCharset($a, Horde_Nls::getCharset(), 'utf-8');
+        }
+        $vcard->setAttribute('N', $val, Horde_Mime::is8bit($val) ? $charset : array(), false, $a);
+
+        if (!$formattedname) {
+            $val = empty($hash['firstname']) ? $hash['lastname'] : $hash['firstname'] . ' ' . $hash['lastname'];
+            $vcard->setAttribute('FN', $val, Horde_Mime::is8bit($val) ? $charset : array());
+        }
+
+        $org = array();
+        if (isset($hash['company'])) {
+            $org[] = $hash['company'];
+        }
+        if (isset($hash['department'])) {
+            $org[] = $hash['department'];
+        }
+        if (count($org)) {
+            $val = implode(';', $org);
+            if ($version != '2.1') {
+                $val = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'utf-8');
+                $org = Horde_String::convertCharset($org, Horde_Nls::getCharset(), 'utf-8');
+            }
+            $vcard->setAttribute('ORG', $val, Horde_Mime::is8bit($val) ? $charset : array(), false, $org);
+        }
+
+        if (isset($hash['commonAddress']) || isset($hash['commonStreet']) ||
+            isset($hash['commonPOBox']) || isset($hash['commonExtended']) ||
+            isset($hash['commonStreet']) || isset($hash['commonCity']) ||
+            isset($hash['commonProvince']) ||
+            isset($hash['commonPostalCode']) || isset($hash['commonCountry'])) {
+            /* We can't know if this particular Turba source uses a single
+             * address field or multiple for
+             * street/city/province/postcode/country. Try to deal with
+             * both. */
+            if (isset($hash['commonAddress']) &&
+                !isset($hash['commonStreet'])) {
+                $hash['commonStreet'] = $hash['commonAddress'];
+            }
+            $a = array(
+                VCARD_ADR_POB      => isset($hash['commonPOBox'])
+                    ? $hash['commonPOBox'] : '',
+                VCARD_ADR_EXTEND   => isset($hash['commonExtended'])
+                    ? $hash['commonExtended'] : '',
+                VCARD_ADR_STREET   => isset($hash['commonStreet'])
+                    ? $hash['commonStreet'] : '',
+                VCARD_ADR_LOCALITY => isset($hash['commonCity'])
+                    ? $hash['commonCity'] : '',
+                VCARD_ADR_REGION   => isset($hash['commonProvince'])
+                    ? $hash['commonProvince'] : '',
+                VCARD_ADR_POSTCODE => isset($hash['commonPostalCode'])
+                    ? $hash['commonPostalCode'] : '',
+                VCARD_ADR_COUNTRY  => isset($hash['commonCountry'])
+                    ? Turba_Driver::getCountry($hash['commonCountry']) : '',
+            );
+
+            $val = implode(';', $a);
+            if ($version == '2.1') {
+                $params = array();
+                if (Horde_Mime::is8bit($val)) {
+                    $params['CHARSET'] = Horde_Nls::getCharset();
+                }
+            } else {
+                $params = array('TYPE' => '');
+                $val = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'utf-8');
+                $a = Horde_String::convertCharset($a, Horde_Nls::getCharset(), 'utf-8');
+            }
+            $vcard->setAttribute('ADR', $val, $params, true, $a);
+        }
+
+        if (isset($hash['homeAddress']) || isset($hash['homeStreet']) ||
+            isset($hash['homePOBox']) || isset($hash['homeExtended']) ||
+            isset($hash['homeStreet']) || isset($hash['homeCity']) ||
+            isset($hash['homeProvince']) || isset($hash['homePostalCode']) ||
+            isset($hash['homeCountry'])) {
+            if (isset($hash['homeAddress']) && !isset($hash['homeStreet'])) {
+                $hash['homeStreet'] = $hash['homeAddress'];
+            }
+            $a = array(
+                VCARD_ADR_POB      => isset($hash['homePOBox'])
+                    ? $hash['homePOBox'] : '',
+                VCARD_ADR_EXTEND   => isset($hash['homeExtended'])
+                    ? $hash['homeExtended'] : '',
+                VCARD_ADR_STREET   => isset($hash['homeStreet'])
+                    ? $hash['homeStreet'] : '',
+                VCARD_ADR_LOCALITY => isset($hash['homeCity'])
+                    ? $hash['homeCity'] : '',
+                VCARD_ADR_REGION   => isset($hash['homeProvince'])
+                    ? $hash['homeProvince'] : '',
+                VCARD_ADR_POSTCODE => isset($hash['homePostalCode'])
+                    ? $hash['homePostalCode'] : '',
+                VCARD_ADR_COUNTRY  => isset($hash['homeCountry'])
+                    ? Turba_Driver::getCountry($hash['homeCountry']) : '',
+            );
+
+            $val = implode(';', $a);
+            if ($version == '2.1') {
+                $params = array('HOME' => null);
+                if (Horde_Mime::is8bit($val)) {
+                    $params['CHARSET'] = Horde_Nls::getCharset();
+                }
+            } else {
+                $params = array('TYPE' => 'HOME');
+                $val = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'utf-8');
+                $a = Horde_String::convertCharset($a, Horde_Nls::getCharset(), 'utf-8');
+            }
+            $vcard->setAttribute('ADR', $val, $params, true, $a);
+        }
+
+        if (isset($hash['workAddress']) || isset($hash['workStreet']) ||
+            isset($hash['workPOBox']) || isset($hash['workExtended']) ||
+            isset($hash['workStreet']) || isset($hash['workCity']) ||
+            isset($hash['workProvince']) || isset($hash['workPostalCode']) ||
+            isset($hash['workCountry'])) {
+            if (isset($hash['workAddress']) && !isset($hash['workStreet'])) {
+                $hash['workStreet'] = $hash['workAddress'];
+            }
+            $a = array(
+                VCARD_ADR_POB      => isset($hash['workPOBox'])
+                    ? $hash['workPOBox'] : '',
+                VCARD_ADR_EXTEND   => isset($hash['workExtended'])
+                    ? $hash['workExtended'] : '',
+                VCARD_ADR_STREET   => isset($hash['workStreet'])
+                    ? $hash['workStreet'] : '',
+                VCARD_ADR_LOCALITY => isset($hash['workCity'])
+                    ? $hash['workCity'] : '',
+                VCARD_ADR_REGION   => isset($hash['workProvince'])
+                    ? $hash['workProvince'] : '',
+                VCARD_ADR_POSTCODE => isset($hash['workPostalCode'])
+                    ? $hash['workPostalCode'] : '',
+                VCARD_ADR_COUNTRY  => isset($hash['workCountry'])
+                    ? Turba_Driver::getCountry($hash['workCountry']) : '',
+            );
+
+            $val = implode(';', $a);
+            if ($version == '2.1') {
+                $params = array('WORK' => null);
+                if (Horde_Mime::is8bit($val)) {
+                    $params['CHARSET'] = Horde_Nls::getCharset();
+                }
+            } else {
+                $params = array('TYPE' => 'WORK');
+                $val = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'utf-8');
+                $a = Horde_String::convertCharset($a, Horde_Nls::getCharset(), 'utf-8');
+            }
+            $vcard->setAttribute('ADR', $val, $params, true, $a);
+        }
+
+        return $vcard;
+    }
+
+    /**
+     * Returns the (localized) country name.
+     *
+     * @param string $country  The two-letter country code.
+     *
+     * @return string  The country name or the country code if a name cannot be
+     *                 found.
+     */
+    function getCountry($country)
+    {
+        static $countries;
+        if (!isset($countries)) {
+            include 'Horde/NLS/countries.php';
+        }
+
+        return isset($countries[$country]) ? $countries[$country] : $country;
+    }
+
+    /**
+     * Function to convert a Horde_iCalendar_vcard object into a Turba
+     * Object Hash with Turba attributes suitable as a parameter for add().
+     *
+     * @see add()
+     *
+     * @param Horde_iCalendar_vcard $vcard  The Horde_iCalendar_vcard object
+     *                                      to parse.
+     *
+     * @return array  A Turba attribute hash.
+     */
+    function toHash(&$vcard)
+    {
+        if (!is_a($vcard, 'Horde_iCalendar_vcard')) {
+            return PEAR::raiseError('Invalid parameter for Turba_Driver::toHash(), expected Horde_iCalendar_vcard object.');
+        }
+
+        $hash = array();
+        $attr = $vcard->getAllAttributes();
+        foreach ($attr as $item) {
+            if (empty($item['value'])) {
+                continue;
+            }
+
+            switch ($item['name']) {
+            case 'FN':
+                $hash['name'] = $item['value'];
+                break;
+
+            case 'N':
+                $name = $item['values'];
+                if (!empty($name[VCARD_N_FAMILY])) {
+                    $hash['lastname'] = $name[VCARD_N_FAMILY];
+                }
+                if (!empty($name[VCARD_N_GIVEN])) {
+                    $hash['firstname'] = $name[VCARD_N_GIVEN];
+                }
+                if (!empty($name[VCARD_N_ADDL])) {
+                    $hash['middlenames'] = $name[VCARD_N_ADDL];
+                }
+                if (!empty($name[VCARD_N_PREFIX])) {
+                    $hash['namePrefix'] = $name[VCARD_N_PREFIX];
+                }
+                if (!empty($name[VCARD_N_SUFFIX])) {
+                    $hash['nameSuffix'] = $name[VCARD_N_SUFFIX];
+                }
+                break;
+
+            case 'NICKNAME':
+                $hash['nickname'] = $item['value'];
+                $hash['alias'] = $item['value'];
+                break;
+
+            // We use LABEL but also support ADR.
+            case 'LABEL':
+                if (isset($item['params']['HOME']) && !isset($hash['homeAddress'])) {
+                    $hash['homeAddress'] = $item['value'];
+                } elseif (isset($item['params']['WORK']) && !isset($hash['workAddress'])) {
+                    $hash['workAddress'] = $item['value'];
+                } elseif (!isset($hash['commonAddress'])) {
+                    $hash['commonAddress'] = $item['value'];
+                }
+                break;
+
+            case 'ADR':
+                if (isset($item['params']['TYPE'])) {
+                    if (!is_array($item['params']['TYPE'])) {
+                        $item['params']['TYPE'] = array($item['params']['TYPE']);
+                    }
+                } else {
+                    $item['params']['TYPE'] = array();
+                    if (isset($item['params']['WORK'])) {
+                        $item['params']['TYPE'][] = 'WORK';
+                    }
+                    if (isset($item['params']['HOME'])) {
+                        $item['params']['TYPE'][] = 'HOME';
+                    }
+                    if (count($item['params']['TYPE']) == 0) {
+                        $item['params']['TYPE'][] = 'COMMON';
+                    }
+                }
+
+                $address = $item['values'];
+                foreach ($item['params']['TYPE'] as $adr) {
+                    switch (Horde_String::upper($adr)) {
+                    case 'HOME':
+                        $prefix = 'home';
+                        break;
+
+                    case 'WORK':
+                        $prefix = 'work';
+                        break;
+
+                    default:
+                        $prefix = 'common';
+                    }
+
+                    if (isset($hash[$prefix . 'Address'])) {
+                        continue;
+                    }
+
+                    $hash[$prefix . 'Address'] = '';
+
+                    if (!empty($address[VCARD_ADR_STREET])) {
+                        $hash[$prefix . 'Street'] = $address[VCARD_ADR_STREET];
+                        $hash[$prefix . 'Address'] .= $hash[$prefix . 'Street'] . "\n";
+                    }
+                    if (!empty($address[VCARD_ADR_EXTEND])) {
+                        $hash[$prefix . 'Extended'] = $address[VCARD_ADR_EXTEND];
+                        $hash[$prefix . 'Address'] .= $hash[$prefix . 'Extended'] . "\n";
+                    }
+                    if (!empty($address[VCARD_ADR_POB])) {
+                        $hash[$prefix . 'POBox'] = $address[VCARD_ADR_POB];
+                        $hash[$prefix . 'Address'] .= $hash[$prefix . 'POBox'] . "\n";
+                    }
+                    if (!empty($address[VCARD_ADR_LOCALITY])) {
+                        $hash[$prefix . 'City'] = $address[VCARD_ADR_LOCALITY];
+                        $hash[$prefix . 'Address'] .= $hash[$prefix . 'City'];
+                    }
+                    if (!empty($address[VCARD_ADR_REGION])) {
+                        $hash[$prefix . 'Province'] = $address[VCARD_ADR_REGION];
+                        $hash[$prefix . 'Address'] .= ', ' . $hash[$prefix . 'Province'];
+                    }
+                    if (!empty($address[VCARD_ADR_POSTCODE])) {
+                        $hash[$prefix . 'PostalCode'] = $address[VCARD_ADR_POSTCODE];
+                        $hash[$prefix . 'Address'] .= ' ' . $hash[$prefix . 'PostalCode'];
+                    }
+                    if (!empty($address[VCARD_ADR_COUNTRY])) {
+                        include 'Horde/NLS/countries.php';
+                        $country = array_search($address[VCARD_ADR_COUNTRY], $countries);
+                        if ($country === false) {
+                            $country = $address[VCARD_ADR_COUNTRY];
+                        }
+                        $hash[$prefix . 'Country'] = $country;
+                        $hash[$prefix . 'Address'] .= "\n" . $address[VCARD_ADR_COUNTRY];
+                    }
+
+                    $hash[$prefix . 'Address'] = trim($hash[$prefix . 'Address']);
+                }
+                break;
+
+            case 'TZ':
+                // We only support textual timezones.
+                if (!isset($item['params']['VALUE']) ||
+                    Horde_String::lower($item['params']['VALUE']) != 'text') {
+                    break;
+                }
+                $timezones = explode(';', $item['value']);
+                $available_timezones = Horde_Nls::getTimezones();
+                foreach ($timezones as $timezone) {
+                    $timezone = trim($timezone);
+                    if (isset($available_timezones[$timezone])) {
+                        $hash['timezone'] = $timezone;
+                        break 2;
+                    }
+                }
+                break;
+
+            case 'GEO':
+                if (isset($item['params']['HOME'])) {
+                    $hash['homeLatitude'] = $item['value']['latitude'];
+                    $hash['homeLongitude'] = $item['value']['longitude'];
+                } elseif (isset($item['params']['WORK'])) {
+                    $hash['workLatitude'] = $item['value']['latitude'];
+                    $hash['workLongitude'] = $item['value']['longitude'];
+                } else {
+                    $hash['latitude'] = $item['value']['latitude'];
+                    $hash['longitude'] = $item['value']['longitude'];
+                }
+                break;
+
+            case 'TEL':
+                if (isset($item['params']['FAX'])) {
+                    if (isset($item['params']['WORK']) &&
+                        !isset($hash['workFax'])) {
+                        $hash['workFax'] = $item['value'];
+                    } elseif (isset($item['params']['HOME']) &&
+                              !isset($hash['homeFax'])) {
+                        $hash['homeFax'] = $item['value'];
+                    } elseif (!isset($hash['fax'])) {
+                        $hash['fax'] = $item['value'];
+                    }
+                } elseif (isset($item['params']['PAGER']) &&
+                          !isset($hash['pager'])) {
+                    $hash['pager'] = $item['value'];
+                } elseif (isset($item['params']['TYPE'])) {
+                    if (!is_array($item['params']['TYPE'])) {
+                        $item['params']['TYPE'] = array($item['params']['TYPE']);
+                    }
+                    // For vCard 3.0.
+                    if (in_array('CELL', $item['params']['TYPE'])) {
+                        if (in_array('HOME', $item['params']['TYPE']) &&
+                            !isset($hash['homeCellPhone'])) {
+                            $hash['homeCellPhone'] = $item['value'];
+                        } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                                  !isset($hash['workCellPhone'])) {
+                            $hash['workCellPhone'] = $item['value'];
+                        } elseif (!isset($hash['cellPhone'])) {
+                            $hash['cellPhone'] = $item['value'];
+                        }
+                    } elseif (in_array('FAX', $item['params']['TYPE'])) {
+                        if (in_array('HOME', $item['params']['TYPE']) &&
+                            !isset($hash['homeFax'])) {
+                            $hash['homeFax'] = $item['value'];
+                        } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                                  !isset($hash['workFax'])) {
+                            $hash['workFax'] = $item['value'];
+                        } elseif (!isset($hash['fax'])) {
+                            $hash['fax'] = $item['value'];
+                        }
+                    } elseif (in_array('VIDEO', $item['params']['TYPE'])) {
+                        if (in_array('HOME', $item['params']['TYPE']) &&
+                            !isset($hash['homeVideoCall'])) {
+                            $hash['homeVideoCall'] = $item['value'];
+                        } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                                  !isset($hash['workVideoCall'])) {
+                            $hash['workVideoCall'] = $item['value'];
+                        } elseif (!isset($hash['videoCall'])) {
+                            $hash['videoCall'] = $item['value'];
+                        }
+                    } elseif (in_array('PAGER', $item['params']['TYPE']) &&
+                              !isset($hash['pager'])) {
+                        $hash['pager'] = $item['value'];
+                    } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                              !isset($hash['workPhone'])) {
+                        $hash['workPhone'] = $item['value'];
+                    } elseif (in_array('HOME', $item['params']['TYPE']) &&
+                              !isset($hash['homePhone'])) {
+                        $hash['homePhone'] = $item['value'];
+                    }
+                } elseif (isset($item['params']['CELL'])) {
+                    if (isset($item['params']['WORK']) &&
+                        !isset($hash['workCellPhone'])) {
+                        $hash['workCellPhone'] = $item['value'];
+                    } elseif (isset($item['params']['HOME']) &&
+                              !isset($hash['homeCellPhone'])) {
+                        $hash['homeCellPhone'] = $item['value'];
+                    } elseif (!isset($hash['cellPhone'])) {
+                        $hash['cellPhone'] = $item['value'];
+                    }
+                } elseif (isset($item['params']['VIDEO'])) {
+                    if (isset($item['params']['WORK']) &&
+                        !isset($hash['workVideoCall'])) {
+                        $hash['workVideoCall'] = $item['value'];
+                    } elseif (isset($item['params']['HOME']) &&
+                              !isset($hash['homeVideoCall'])) {
+                        $hash['homeVideoCall'] = $item['value'];
+                    } elseif (!isset($hash['homeVideoCall'])) {
+                        $hash['videoCall'] = $item['value'];
+                    }
+                } elseif (count($item['params']) <= 1 ||
+                          isset($item['params']['VOICE'])) {
+                    // There might be e.g. SAT;WORK which must not overwrite
+                    // WORK.
+                    if (isset($item['params']['WORK']) &&
+                        !isset($hash['workPhone'])) {
+                        $hash['workPhone'] = $item['value'];
+                    } elseif (isset($item['params']['HOME']) &&
+                              !isset($hash['homePhone'])) {
+                        $hash['homePhone'] = $item['value'];
+                    } elseif ((count($item['params']) == 0 ||
+                               (count($item['params']) == 1 &&
+                                isset($item['params']['VOICE']))) &&
+                              !isset($hash['phone'])) {
+                        $hash['phone'] = $item['value'];
+                    }
+                }
+                break;
+
+            case 'EMAIL':
+                $email_set = false;
+                if (isset($item['params']['HOME']) &&
+                    (!isset($hash['homeEmail']) ||
+                     isset($item['params']['PREF']))) {
+                    $hash['homeEmail'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
+                    $email_set = true;
+                } elseif (isset($item['params']['WORK']) &&
+                          (!isset($hash['workEmail']) ||
+                           isset($item['params']['PREF']))) {
+                    $hash['workEmail'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
+                    $email_set = true;
+                } elseif (isset($item['params']['TYPE'])) {
+                    if (!is_array($item['params']['TYPE'])) {
+                        $item['params']['TYPE'] = array($item['params']['TYPE']);
+                    }
+                    if (in_array('HOME', $item['params']['TYPE']) &&
+                        (!isset($hash['homeEmail']) ||
+                         in_array('PREF', $item['params']['TYPE']))) {
+                        $hash['homeEmail'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
+                        $email_set = true;
+                    } elseif (in_array('WORK', $item['params']['TYPE']) &&
+                              (!isset($hash['workEmail']) ||
+                         in_array('PREF', $item['params']['TYPE']))) {
+                        $hash['workEmail'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
+                        $email_set = true;
+                    }
+                }
+                if (!$email_set &&
+                    (!isset($hash['email']) ||
+                     isset($item['params']['PREF']))) {
+                    $hash['email'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
+                }
+
+                if (!isset($hash['emails'])) {
+                    $hash['emails'] = Horde_iCalendar_vcard::getBareEmail($item['value']);
+                } else {
+                    $hash['emails'] .= ', ' . Horde_iCalendar_vcard::getBareEmail($item['value']);
+                }
+                break;
+
+            case 'TITLE':
+                $hash['title'] = $item['value'];
+                break;
+
+            case 'ROLE':
+                $hash['role'] = $item['value'];
+                break;
+
+            case 'ORG':
+                // The VCARD 2.1 specification requires the presence of two
+                // SEMI-COLON separated fields: Organizational Name and
+                // Organizational Unit. Additional fields are optional.
+                $hash['company'] = !empty($item['values'][0]) ? $item['values'][0] : '';
+                $hash['department'] = !empty($item['values'][1]) ? $item['values'][1] : '';
+                break;
+
+            case 'NOTE':
+                $hash['notes'] = $item['value'];
+                break;
+
+            case 'CATEGORIES':
+                $hash['businessCategory'] = $hash['category'] = str_replace('\; ', ';', $item['value']);
+                break;
+
+            case 'URL':
+                if (isset($item['params']['HOME']) &&
+                    !isset($hash['homeWebsite'])) {
+                    $hash['homeWebsite'] = $item['value'];
+                } elseif (isset($item['params']['WORK']) &&
+                          !isset($hash['workWebsite'])) {
+                    $hash['workWebsite'] = $item['value'];
+                } elseif (!isset($hash['website'])) {
+                    $hash['website'] = $item['value'];
+                }
+                break;
+
+            case 'BDAY':
+                $hash['birthday'] = $item['value']['year'] . '-' . $item['value']['month'] . '-' .  $item['value']['mday'];
+                break;
+
+            case 'PHOTO':
+            case 'LOGO':
+                if (isset($item['params']['VALUE']) &&
+                    Horde_String::lower($item['params']['VALUE']) == 'uri') {
+                    // No support for URIs yet.
+                    break;
+                }
+                if (!isset($item['params']['ENCODING']) ||
+                    (Horde_String::lower($item['params']['ENCODING']) != 'b' &&
+                     Horde_String::upper($item['params']['ENCODING']) != 'BASE64')) {
+                    // Invalid property.
+                    break;
+                }
+                $type = Horde_String::lower($item['name']);
+                $hash[$type] = base64_decode($item['value']);
+                if (isset($item['params']['TYPE'])) {
+                    $hash[$type . 'type'] = $item['params']['TYPE'];
+                }
+                break;
+
+            case 'X-SIP':
+                if (isset($item['params']['POC']) &&
+                    !isset($hash['ptt'])) {
+                    $hash['ptt'] = $item['value'];
+                } elseif (isset($item['params']['VOIP']) &&
+                          !isset($hash['voip'])) {
+                    $hash['voip'] = $item['value'];
+                } elseif (isset($item['params']['SWIS']) &&
+                          !isset($hash['shareView'])) {
+                    $hash['shareView'] = $item['value'];
+                } elseif (!isset($hash['sip'])) {
+                    $hash['sip'] = $item['value'];
+                }
+                break;
+
+            case 'X-WV-ID':
+                $hash['instantMessenger'] = $item['value'];
+                break;
+
+            case 'X-ANNIVERSARY':
+                $hash['anniversary'] = $item['value']['year'] . '-' . $item['value']['month'] . '-' . $item['value']['mday'];
+                break;
+
+            case 'X-CHILDREN':
+                $hash['children'] = $item['value'];
+                break;
+
+            case 'X-SPOUSE':
+                $hash['spouse'] = $item['value'];
+                break;
+            }
+        }
+
+        /* Ensure we have a valid name field. */
+        if (empty($hash['name'])) {
+            /* If name is a composite field, it won't be present in the
+             * $this->fields array, so check for that as well. */
+            if (isset($this->map['name']) &&
+                is_array($this->map['name']) &&
+                !empty($this->map['name']['attribute'])) {
+                $fieldarray = array();
+                foreach ($this->map['name']['fields'] as $mapfields) {
+                    $fieldarray[] = isset($hash[$mapfields]) ?
+                        $hash[$mapfields] : '';
+                }
+                $hash['name'] = trim(vsprintf($this->map['name']['format'], $fieldarray),
+                                     " \t\n\r\0\x0B,");
+            } else {
+                $hash['name'] = isset($hash['firstname']) ? $hash['firstname'] : '';
+                if (!empty($hash['lastname'])) {
+                    $hash['name'] .= ' ' . $hash['lastname'];
+                }
+                $hash['name'] = trim($hash['name']);
+            }
+        }
+
+        return $hash;
+    }
+
+    /**
+     * Checks if the current user has the requested permissions on this
+     * address book.
+     *
+     * @param integer $perm  The permission to check for.
+     *
+     * @return boolean  True if the user has permission, otherwise false.
+     */
+    function hasPermission($perm)
+    {
+        if (!$GLOBALS['perms']->exists('turba:sources:' . $this->name)) {
+            // Assume we have permissions if they're not
+            // explicitly set.
+            return true;
+        } else {
+            return $GLOBALS['perms']->hasPermission('turba:sources:' . $this->name,
+                                                    Horde_Auth::getAuth(),
+                                                    $perm);
+        }
+    }
+
+    /**
+     * Return the name of this address book.
+     * (This is the key into the cfgSources array)
+     *
+     * @string Address book name
+     */
+    function getName()
+    {
+        return $this->name;
+    }
+
+    /**
+     * Return the owner to use when searching or creating contacts in
+     * this address book.
+     *
+     * @return string
+     */
+    function getContactOwner()
+    {
+        if (empty($this->_contact_owner)) {
+           return $this->_getContactOwner();
+        }
+        return $this->_contact_owner;
+    }
+
+    function _getContactOwner()
+    {
+        return Horde_Auth::getAuth();
+    }
+
+    /**
+     * Creates a new Horde_Share for this source type.
+     *
+     * @param array $params  The params for the share.
+     *
+     * @return mixed  The share object or PEAR_Error.
+     * @since Turba 2.2
+     */
+    function &createShare($share_id, $params)
+    {
+        // If the raw address book name is not set, use the share name
+        if (empty($params['params']['name'])) {
+            $params['params']['name'] = $share_id;
+        }
+        $result = &Turba::createShare($share_id, $params);
+        return $result;
+    }
+
+    /**
+     * Creates an object key for a new object.
+     *
+     * @param array $attributes  The attributes (in driver keys) of the
+     *                           object being added.
+     *
+     * @return string  A unique ID for the new object.
+     */
+    function _makeKey($attributes)
+    {
+        return md5(mt_rand());
+    }
+
+    /**
+     * Static method to construct Turba_Driver objects. Use this so that we
+     * can return PEAR_Error objects if anything goes wrong.
+     *
+     * Should only be called by Turba_Driver::singleton().
+     *
+     * @see Turba_Driver::singleton()
+     * @access private
+     *
+     * @param string $name   String containing the internal name of this
+     *                       source.
+     * @param array $config  Array containing the configuration information for
+     *                       this source.
+     */
+    function &factory($name, $config)
+    {
+        $class = 'Turba_Driver_' . ucfirst(basename($config['type']));
+
+        if (class_exists($class)) {
+            $driver = new $class($config['params']);
+        } else {
+            $driver = PEAR::raiseError(sprintf(_("Unable to load the definition of %s."), $class));
+            return $driver;
+        }
+
+        /* Store name and title. */
+        $driver->name = $name;
+        $driver->title = $config['title'];
+
+        /* Initialize */
+        $result = $driver->_init();
+        if (is_a($result, 'PEAR_Error')) {
+            $driver = PEAR::raiseError($result->getMessage());
+            return $driver;
+        }
+
+        /* Store and translate the map at the Source level. */
+        $driver->map = $config['map'];
+        foreach ($driver->map as $key => $val) {
+            if (!is_array($val)) {
+                $driver->fields[$key] = $val;
+            }
+        }
+
+        /* Store tabs. */
+        if (isset($config['tabs'])) {
+            $driver->tabs = $config['tabs'];
+        }
+
+        /* Store remaining fields. */
+        if (isset($config['strict'])) {
+            $driver->strict = $config['strict'];
+        }
+        if (isset($config['approximate'])) {
+            $driver->approximate = $config['approximate'];
+        }
+        if (isset($config['list_name_field'])) {
+            $driver->listNameField = $config['list_name_field'];
+        }
+        if (isset($config['alternative_name'])) {
+            $driver->alternativeName = $config['alternative_name'];
+        }
+
+        return $driver;
+    }
+
+    /**
+     * Attempts to return a reference to a concrete Turba_Driver instance
+     * based on the $config array. It will only create a new instance if no
+     * Turba_Driver instance with the same parameters currently exists.
+     *
+     * This method must be invoked as:
+     *   $driver = &Turba_Driver::singleton()
+     *
+     * @param mixed $name  Either a string containing the internal name of this
+     *                     source, or a config array describing the source.
+     *
+     * @return Turba_Driver  The concrete Turba_Driver reference, or a
+     *                       PEAR_Error on error.
+     */
+    function &singleton($name)
+    {
+        static $instances = array();
+
+        if (is_array($name)) {
+            $key = md5(serialize($name));
+            $srcName = '';
+            $srcConfig = $name;
+        } else {
+            $key = $name;
+            $srcName = $name;
+            if (!empty($GLOBALS['cfgSources'][$name])) {
+                $srcConfig = $GLOBALS['cfgSources'][$name];
+            } else {
+                $error = PEAR::raiseError('Source not found');
+                return $error;
+            }
+        }
+
+        if (!isset($instances[$key])) {
+            if (!is_array($name) && !isset($GLOBALS['cfgSources'][$name])) {
+                $error = PEAR::raiseError(sprintf(_("The address book \"%s\" does not exist."), $name));
+                return $error;
+            }
+            $instances[$key] = Turba_Driver::factory($srcName, $srcConfig);
+        }
+
+        return $instances[$key];
+    }
+
+    /**
+     * Initialize the driver.
+     */
+    function _init()
+    {
+        return true;
+    }
+
+    /**
+     * Searches the address book with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty array,
+     * all records will be returned.
+     *
+     * @param array $criteria  Array containing the search criteria.
+     * @param array $fields    List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        return PEAR::raiseError(_("Searching is not available."));
+    }
+
+    /**
+     * Reads the given data from the address book and returns the results.
+     *
+     * @param string $key    The primary key field to use.
+     * @param mixed $ids     The ids of the contacts to load.
+     * @param string $owner  Only return contacts owned by this user.
+     * @param array $fields  List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _read($key, $ids, $owner, $fields)
+    {
+        return PEAR::raiseError(_("Reading contacts is not available."));
+    }
+
+    /**
+     * Adds the specified contact to the SQL database.
+     */
+    function _add($attributes)
+    {
+        return PEAR::raiseError(_("Adding contacts is not available."));
+    }
+
+    /**
+     * Deletes the specified contact from the SQL database.
+     */
+    function _delete($object_key, $object_id)
+    {
+        return PEAR::raiseError(_("Deleting contacts is not available."));
+    }
+
+    /**
+     * Saves the specified object in the SQL database.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _save($object_key, $object_id, $attributes)
+    {
+        return PEAR::raiseError(_("Saving contacts is not available."));
+    }
+
+    /**
+     * Remove all entries owned by the specified user.
+     *
+     * @param string $user  The user's data to remove.
+     *
+     * @return mixed True | PEAR_Error
+     */
+    function removeUserData($user)
+    {
+        return PEAR::raiseError(_("Removing user data is not supported in the current address book storage driver."));
+    }
+
+    /**
+     * Check if the passed in share is the default share for this source.
+     *
+     * @param Horde_Share $share  The share object e
+     * @param array $srcconfig    The cfgSource entry for the share (not used in
+     *                            this method, but a child class may need it).
+     *
+     * @return boolean
+     */
+    function checkDefaultShare(&$share, $srcconfig)
+    {
+        $params = @unserialize($share->get('params'));
+        if (!isset($params['default'])) {
+            $params['default'] = ($params['name'] == Horde_Auth::getAuth());
+            $share->set('params', serialize($params));
+            $share->save();
+        }
+
+        return $params['default'];
+    }
+
+}
diff --git a/turba/lib/Driver/Facebook.php b/turba/lib/Driver/Facebook.php
new file mode 100644 (file)
index 0000000..2f17883
--- /dev/null
@@ -0,0 +1,191 @@
+<?php
+/**
+ * Read-only Turba directory driver for Facebook friends. Requires a Horde
+ * application to be setup on Facebook and configured in horde/config/conf.php.
+ * This driver based on the favourites driver.
+ *
+ * Of limited utility since email addresses are not retrievable via the Facebook
+ * API, unless the user allows the Horde application to access it - and even
+ * then, it's a proxied email address.
+ *
+ * Copyright 2009 The Horde Project (http://www.horde.org)
+ *
+ * @author Michael J. Rubinsky <mrubinsk@horde.org>
+ * @author  Jan Schneider <jan@horde.org>
+ */
+class Turba_Driver_Facebook extends Turba_Driver
+{
+    private $_facebook;
+
+    /**
+     */
+    function _init()
+    {
+        return true;
+    }
+
+    /**
+     * Checks if the current user has the requested permissions on this
+     * source.
+     *
+     * @param integer $perm  The permission to check for.
+     *
+     * @return boolean  True if the user has permission, otherwise false.
+     */
+     function hasPermission($perm)
+     {
+         switch ($perm) {
+             case PERMS_EDIT: return false;
+             case PERMS_DELETE: return false;
+             default: return true;
+         }
+     }
+
+    /**
+     * Searches the favourites list with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty array,
+     * all records will be returned.
+     *
+     * @param array $criteria  Array containing the search criteria.
+     * @param array $fields    List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        $results = array();
+        $results = $this->_getAddressBook($fields);
+        if (is_a($results, 'PEAR_Error')) {
+            return $results;
+        }
+
+        foreach ($results as $key => $contact) {
+            $found = !isset($criteria['OR']);
+            foreach ($criteria as $op => $vals) {
+                if ($op == 'AND') {
+                    foreach ($vals as $val) {
+                        if (isset($contact[$val['field']])) {
+                            switch ($val['op']) {
+                            case 'LIKE':
+                                if (stristr($contact[$val['field']], $val['test']) === false) {
+                                    continue 4;
+                                }
+                                $found = true;
+                                break;
+                            }
+                        }
+                    }
+                } elseif ($op == 'OR') {
+                    foreach ($vals as $val) {
+                        if (isset($contact[$val['field']])) {
+                            switch ($val['op']) {
+                            case 'LIKE':
+                                if (empty($val['test']) ||
+                                    stristr($contact[$val['field']], $val['test']) !== false) {
+                                    $found = true;
+                                    break 3;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if ($found) {
+                $results[$key] = $contact;
+            }
+        }
+        return $results;
+    }
+
+    /**
+     * Reads the given data from the API method and returns the result's
+     * fields.
+     *
+     * @param array $criteria  Search criteria.
+     * @param string $id       Data identifier.
+     * @param array $fields    List of fields to return.
+     *
+     * @return  Hash containing the search results.
+     */
+    function _read($criteria, $ids, $owner, $fields)
+    {
+        $results = $this->_getEntry($ids, $fields);
+        return $results;
+    }
+
+    function _getEntry($keys, $fields)
+    {
+        if (!is_a($facebook = $this->_getFacebook(), 'PEAR_Error')) {
+            $fields = implode(', ', $fields);
+            $fql = 'SELECT ' . $fields . ' FROM user WHERE uid IN (' . implode(', ', $keys) . ')';
+
+            try {
+                $results = $facebook->fql->run($fql);
+            } catch (Horde_Service_Facebook_Exception $e) {
+                $error = PEAR::raiseError($e->getMessage(), $e->getCode());
+                Horde::logMessage($error, __FILE__, __LINE__, PEAR_LOG_ERR);
+
+                return $error;
+            }
+
+            return $results;
+        } else {
+
+            return $facebook;
+        }
+    }
+
+    function _getAddressBook($fields = array())
+    {
+        if (!is_a($facebook = $this->_getFacebook(), 'PEAR_Error')) {
+            $fields = implode(', ', $fields);
+            // For now, just try a fql query with name and email.
+            $fql = 'SELECT ' . $fields . ' FROM user WHERE uid IN ('
+                . 'SELECT uid2 FROM friend WHERE uid1=' . $facebook->auth->getUser() . ')';
+
+            try {
+                $results = $facebook->fql->run($fql);
+            } catch (Horde_Service_Facebook_Exception $e) {
+                $error = PEAR::raiseError($e->getMessage(), $e->getCode());
+                Horde::logMessage($error, __FILE__, __LINE__, PEAR_LOG_ERR);
+                return array();
+            }
+            $addressbook = array();
+            foreach ($results as $result) {
+                if (!empty($result['birthday'])) {
+                    // Make sure the birthdate is in a standard format that
+                    // listDateObjects will understand.
+                    $bday = new Horde_Date($result['birthday']);
+                    $result['birthday'] = $bday->format('Y-m-d');
+                }
+                $addressbook[$result['uid']] = $result;
+            }
+
+            return $addressbook;
+        } else {
+            return $facebook;
+        }
+    }
+
+    function _getFacebook()
+    {
+        global $conf, $prefs;
+        if (!$conf['facebook']['enabled']) {
+            return PEAR::raiseError(_("No Facebook integration exists."));
+        }
+
+        if (empty($this->_facebook)) {
+            $context = array('http_client' => new Horde_Http_Client(),
+                             'http_request' => new Horde_Controller_Request_Http());
+            $this->_facebook = new Horde_Service_Facebook($conf['facebook']['key'],
+                                                   $conf['facebook']['secret'],
+                                                   $context);
+
+            $session = unserialize($prefs->getValue('facebook'));
+            $this->_facebook->auth->setUser($session['uid'], $session['sid'], 0);
+        }
+
+        return $this->_facebook;
+    }
+
+}
diff --git a/turba/lib/Driver/Favourites.php b/turba/lib/Driver/Favourites.php
new file mode 100644 (file)
index 0000000..5c60e18
--- /dev/null
@@ -0,0 +1,137 @@
+<?php
+/**
+ * Read-only Turba directory driver implementation for favourite
+ * recipients. Relies on the contacts/favouriteRecipients API method.
+ *
+ * @author  Jan Schneider <jan@horde.org>
+ * @package Turba
+ */
+class Turba_Driver_Favourites extends Turba_Driver
+{
+    /**
+     */
+    function _init()
+    {
+        return true;
+    }
+
+    /**
+     * Checks if the current user has the requested permissions on this
+     * source.
+     *
+     * @param integer $perm  The permission to check for.
+     *
+     * @return boolean  True if the user has permission, otherwise false.
+     */
+     function hasPermission($perm)
+     {
+         switch ($perm) {
+             case PERMS_EDIT: return false;
+             case PERMS_DELETE: return false;
+             default: return true;
+         }
+     }
+
+    /**
+     * Searches the favourites list with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty array,
+     * all records will be returned.
+     *
+     * @param array $criteria  Array containing the search criteria.
+     * @param array $fields    List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        $results = array();
+        foreach ($this->_getAddressBook() as $key => $contact) {
+            $found = !isset($criteria['OR']);
+            foreach ($criteria as $op => $vals) {
+                if ($op == 'AND') {
+                    foreach ($vals as $val) {
+                        if (isset($contact[$val['field']])) {
+                            switch ($val['op']) {
+                            case 'LIKE':
+                                if (stristr($contact[$val['field']], $val['test']) === false) {
+                                    continue 4;
+                                }
+                                $found = true;
+                                break;
+                            }
+                        }
+                    }
+                } elseif ($op == 'OR') {
+                    foreach ($vals as $val) {
+                        if (isset($contact[$val['field']])) {
+                            switch ($val['op']) {
+                            case 'LIKE':
+                                if (empty($val['test']) ||
+                                    stristr($contact[$val['field']], $val['test']) !== false) {
+                                    $found = true;
+                                    break 3;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if ($found) {
+                $results[$key] = $contact;
+            }
+        }
+        return $results;
+    }
+
+    /**
+     * Reads the given data from the API method and returns the result's
+     * fields.
+     *
+     * @param array $criteria  Search criteria.
+     * @param string $id       Data identifier.
+     * @param array $fields    List of fields to return.
+     *
+     * @return  Hash containing the search results.
+     */
+    function _read($criteria, $ids, $owner, $fields)
+    {
+        $book = $this->_getAddressBook();
+        if (is_a($book, 'PEAR_Error')) {
+            return $book;
+        }
+
+        $results = array();
+        if (!is_array($ids)) {
+            $ids = array($ids);
+        }
+        foreach ($ids as $id) {
+            if (isset($book[$id])) {
+                $results[] = $book[$id];
+            }
+        }
+
+        return $results;
+    }
+
+    function _getAddressBook()
+    {
+        global $registry;
+
+        if (!$registry->hasMethod('contacts/favouriteRecipients')) {
+            return PEAR::raiseError(_("No source for favourite recipients exists."));
+        }
+
+        $addresses = $registry->call('contacts/favouriteRecipients', array($this->_params['limit']));
+        if (is_a($addresses, 'PEAR_Error')) {
+            return $addresses;
+        }
+
+        $addressbook = array();
+        foreach ($addresses as $address) {
+            $addressbook[$address] = array('email' => $address);
+        }
+
+        return $addressbook;
+    }
+
+}
diff --git a/turba/lib/Driver/Group.php b/turba/lib/Driver/Group.php
new file mode 100644 (file)
index 0000000..c070244
--- /dev/null
@@ -0,0 +1,155 @@
+<?php
+/**
+ * Read-only Turba_Driver implementation for creating a Horde_Group based
+ * address book.
+ *
+ * @author  Michael J. Rubinsky <mrubinsk@horde.org>
+ * @package Turba
+ */
+class Turba_Driver_Group extends Turba_Driver
+{
+    /**
+     * Constructor function.
+     *
+     * @param array $params  Array of parameters for this driver.
+     *                       Basically, just passes the group id.
+     *
+     */
+    public function __construct($params)
+    {
+         $this->_gid = $params['gid'];
+    }
+
+    /**
+     * Initialize the group driver.
+     */
+    function _init()
+    {
+        return true;
+    }
+
+    /**
+     * Checks if the current user has the requested permissions on this
+     * source.  This source is always read only.
+     *
+     * @param integer $perm  The permission to check for.
+     *
+     * @return boolean  True if the user has permission, otherwise false.
+     */
+    function hasPermission($perm)
+    {
+        switch ($perm) {
+        case PERMS_EDIT:
+        case PERMS_DELETE:
+            return false;
+
+        default:
+            return true;
+        }
+    }
+
+    /**
+     * Searches the group list with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty array,
+     * all records will be returned.
+     *
+     * This method 'borrowed' from the favorites driver.
+     *
+     * @param array $criteria  Array containing the search criteria.
+     * @param array $fields    List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        $results = array();
+        foreach ($this->_getAddressBook() as $key => $contact) {
+            $found = !isset($criteria['OR']);
+            foreach ($criteria as $op => $vals) {
+                if ($op == 'AND') {
+                    foreach ($vals as $val) {
+                        if (isset($contact[$val['field']])) {
+                            switch ($val['op']) {
+                            case 'LIKE':
+                                if (stristr($contact[$val['field']], $val['test']) === false) {
+                                    continue 4;
+                                }
+                                $found = true;
+                                break;
+                            }
+                        }
+                    }
+                } elseif ($op == 'OR') {
+                    foreach ($vals as $val) {
+                        if (isset($contact[$val['field']])) {
+                            switch ($val['op']) {
+                            case 'LIKE':
+                                if (empty($val['test']) ||
+                                    stristr($contact[$val['field']], $val['test']) !== false) {
+                                    $found = true;
+                                    break 3;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if ($found) {
+                $results[$key] = $contact;
+            }
+        }
+        return $results;
+    }
+
+    /**
+     * Read the data from the address book.
+     * Again, this method taken from the favorites driver.
+     *
+     * @param array $criteria  Search criteria.
+     * @param string $id       Data identifier.
+     * @param array $fields    List of fields to return.
+     *
+     * @return  Hash containing the search results.
+     */
+    function _read($criteria, $ids, $fields)
+    {
+        $book = $this->_getAddressBook();
+        $results = array();
+        if (!is_array($ids)) {
+            $ids = array($ids);
+        }
+        foreach ($ids as $id) {
+            if (isset($book[$id])) {
+                $results[] = $book[$id];
+            }
+        }
+
+        return $results;
+    }
+
+    function _getAddressBook()
+    {
+        require_once 'Horde/Group.php';
+        require_once 'Horde/Identity.php';
+
+        $groups = Group::singleton();
+        $members = $groups->listAllUsers($this->_gid);
+        $addressbook = array();
+        foreach ($members as $member) {
+            $identity = &Identity::singleton('none', $member);
+            $name = $identity->getValue('fullname');
+            $email = $identity->getValue('from_addr');
+            // We use the email as the key since we could have multiple users
+            // with the same fullname, so no email = no entry in address book.
+            if (!empty($email)) {
+                $addressbook[$email] = array(
+                                            'name' => ((!empty($name) ? $name : $member)),
+                                            'email' => $identity->getValue('from_addr')
+                                        );
+            }
+        }
+
+        return $addressbook;
+    }
+
+}
diff --git a/turba/lib/Driver/Imsp.php b/turba/lib/Driver/Imsp.php
new file mode 100644 (file)
index 0000000..5e357ec
--- /dev/null
@@ -0,0 +1,691 @@
+<?php
+/**
+ * Turba directory driver implementation for an IMSP server.
+ *
+ * @author  Michael Rubinsky <mrubinsk@horde.org>
+ * @package Turba
+ */
+class Turba_Driver_Imsp extends Turba_Driver
+{
+    /**
+     * Handle for the IMSP connection.
+     *
+     * @var Net_IMSP
+     */
+    var $_imsp;
+
+    /**
+     * The name of the addressbook.
+     *
+     * @var string
+     */
+    var $_bookName  = '';
+
+    /**
+     * Holds if we are authenticated.
+     *
+     * @var boolean
+     */
+    var $_authenticated = '';
+
+    /**
+     * Holds name of the field indicating an IMSP group.
+     *
+     * @var string
+     */
+    var $_groupField = '';
+
+    /**
+     * Holds value that $_groupField will have if entry is an IMSP group.
+     *
+     * @var string
+     */
+    var $_groupValue = '';
+
+    /**
+     * Used to set if the current search is for contacts only.
+     *
+     * @var boolean
+     */
+    var $_noGroups = '';
+
+    var $_capabilities = array(
+        'delete_all' => true,
+        'delete_addressbook' => true
+    );
+
+    /**
+     * Constructs a new Turba imsp driver object.
+     *
+     * @param array $params  Hash containing additional configuration parameters.
+     */
+    public function __construct($params)
+    {
+        $this->params       = $params;
+        $this->_groupField  = $params['group_id_field'];
+        $this->_groupValue  = $params['group_id_value'];
+        $this->_myRights    = $params['my_rights'];
+        $this->_perms       = $this->_aclToHordePerms($params['my_rights']);
+    }
+
+    /**
+     * Initialize the IMSP connection and check for error.
+     */
+    function _init()
+    {
+        global $conf;
+
+        $this->_bookName = $this->getContactOwner();
+        $this->_imsp = Net_IMSP::singleton('Book', $this->params);
+        $result = $this->_imsp->init();
+        if (is_a($result, 'PEAR_Error')) {
+            $this->_authenticated = false;
+            return $result;
+        }
+
+        if (!empty($conf['log'])) {
+            $logParams = $conf['log'];
+            $result = $this->_imsp->setLogger($conf['log']);
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            }
+        }
+
+        Horde::logMessage('IMSP Driver initialized for ' . $this->_bookName, __FILE__, __LINE__, PEAR_LOG_DEBUG);
+        $this->_authenticated = true;
+        return true;
+    }
+
+    /**
+     * Returns all entries matching $critera.
+     *
+     * @param array $criteria  Array containing the search criteria.
+     * @param array $fields    List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        $query = array();
+        $results = array();
+
+        if (!$this->_authenticated) {
+            return array();
+        }
+
+        /* Get the search criteria. */
+        if (count($criteria)) {
+            foreach ($criteria as $key => $vals) {
+                if (strval($key) == 'OR') {
+                    $names = $this->_doSearch($vals, 'OR');
+                } elseif (strval($key) == 'AND') {
+                    $names = $this->_doSearch($vals, 'AND');
+                }
+            }
+        }
+
+        /* Now we have a list of names, get the rest. */
+        $result = $this->_read('name', $names, null, $fields);
+        if (is_array($result)) {
+            $results = $result;
+        }
+
+        Horde::logMessage(sprintf('IMSP returned %s results',
+                                  count($results)), __FILE__, __LINE__, PEAR_LOG_DEBUG);
+        return array_values($results);
+    }
+
+    /**
+     * Reads the given data from the IMSP server and returns the
+     * results.
+     *
+     * @param string $key    The primary key field to use (always 'name' for IMSP).
+     * @param mixed $ids     The ids of the contacts to load.
+     * @param string $owner  Only return contacts owned by this user.
+     * @param array $fields  List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _read($key, $ids, $owner, $fields)
+    {
+        $results = array();
+        if (!$this->_authenticated) {
+            return $results;
+        }
+        $ids = array_values($ids);
+        $idCount = count($ids);
+        $members = array();
+        $tmembers = array();
+        $IMSPGroups = array();
+
+        for ($i = 0; $i < $idCount; $i++) {
+            $result = array();
+            if (!isset($IMSPGroups[$ids[$i]])) {
+                $temp = $this->_imsp->getEntry($this->_bookName, $ids[$i]);
+            } else {
+                $temp = $IMSPGroups[$ids[$i]];
+            }
+            if (is_a($temp, 'PEAR_Error')) {
+                continue;
+            } else {
+                $temp['fullname'] = $temp['name'];
+                $isIMSPGroup = false;
+                if (!isset($temp['__owner'])) {
+                    $temp['__owner'] = Horde_Auth::getAuth();
+                }
+
+                if ((isset($temp[$this->_groupField])) &&
+                    ($temp[$this->_groupField] == $this->_groupValue)) {
+                    if ($this->_noGroups) {
+                        continue;
+                    }
+                    if (!isset($IMSPGroups[$ids[$i]])) {
+                        $IMSPGroups[$ids[$i]] = $temp;
+                    }
+                    // move group ids to end of list
+                    if ($idCount > count($IMSPGroups) &&
+                        $idCount - count($IMSPGroups) > $i) {
+                        $ids[] = $ids[$i];
+                        unset($ids[$i]);
+                        $ids = array_values($ids);
+                        $i--;
+                        continue;
+                    }
+                    $isIMSPGroup = true;
+                }
+                // Get the group members that might have been added from other
+                // IMSP applications, but only if we need more information than
+                // the group name
+                if ($isIMSPGroup &&
+                    array_search('__members', $fields) !== false) {
+
+                    if (isset($temp['email'])) {
+                        $emailList = $this->_getGroupEmails($temp['email']);
+                        $count = count($emailList);
+                        for ($j = 0; $j < $count; $j++) {
+                            $needMember = true;
+                            foreach ($results as $curResult) {
+                                if (!empty($curResult['email']) &&
+                                    strtolower($emailList[$j]) ==
+                                      strtolower(trim($curResult['email']))) {
+                                    $members[] = $curResult['name'];
+                                    $needMember = false;
+                                }
+                            }
+                            if ($needMember) {
+                                $memberName = $this->_imsp->search
+                                    ($this->_bookName,
+                                     array('email' => trim($emailList[$j])));
+
+                                if (count($memberName)) {
+                                    $members[] = $memberName[0];
+                                }
+                            }
+                        }
+                    }
+                    if (!empty($temp['__members'])) {
+                        $tmembers = @unserialize($temp['__members']);
+                    }
+
+                    // TODO: Make sure that we are using the correct naming
+                    // convention for members regardless of if we are using
+                    // shares or not. This is needed to assure groups created
+                    // while not using shares won't be lost when transitioning
+                    // to shares and visa versa.
+                    //$tmembers = $this->_checkMemberFormat($tmembers);
+
+                    $temp['__members'] = serialize($this->_removeDuplicated(
+                                                   array($members, $tmembers)));
+                    $temp['__type'] = 'Group';
+                    $temp['email'] = null;
+                    $result = $temp;
+                } else {
+                    // IMSP contact.
+                    $count = count($fields);
+                    for ($j = 0; $j < $count; $j++) {
+                        if (isset($temp[$fields[$j]])) {
+                            $result[$fields[$j]] = $temp[$fields[$j]];
+                        }
+                    }
+                }
+            }
+
+            $results[] = $result;
+        }
+
+        if (empty($results) && isset($temp) && is_a($temp, 'PEAR_Error')) {
+          return $temp;
+        }
+        return $results;
+    }
+
+    /**
+     * Adds the specified object to the IMSP server.
+     */
+    function _add($attributes)
+    {
+        /* We need to map out Turba_Object_Groups back to IMSP groups before
+         * writing out to the server. We need to array_values() it in
+         * case an entry was deleted from the group. */
+        if ($attributes['__type'] == 'Group') {
+            /* We may have a newly created group. */
+            $attributes[$this->_groupField] = $this->_groupValue;
+            if (!isset($attributes['__members'])) {
+                $attributes['__members'] = '';
+                $attributes['email'] = ' ';
+            }
+            $temp = unserialize($attributes['__members']);
+            if (is_array($temp)) {
+                $members = array_values($temp);
+            } else {
+                $members = array();
+            }
+
+            // This searches the current IMSP address book to see if
+            // we have a match for this member before adding to email
+            // attribute since IMSP groups in other IMSP aware apps
+            // generally require an existing conact entry in the current
+            // address book for each group member (this is necessary for
+            // those sources that may be used both in AND out of Horde).
+            $result = $this->_read('name', $members, null, array('email'));
+            if (!is_a($result, 'PEAR_Error')) {
+                $count = count($result);
+                for ($i = 0; $i < $count; $i++) {
+                    if (isset($result[$i]['email'])) {
+                        $contact = sprintf("%s<%s>\n", $members[$i],
+                                           $result[$i]['email']);
+                        $attributes['email'] .= $contact;
+                    }
+                }
+            }
+        }
+
+        unset($attributes['__type']);
+        unset($attributes['fullname']);
+        if (!$this->params['contact_ownership']) {
+            unset($attributes['__owner']);
+        }
+
+        return $this->_imsp->addEntry($this->_bookName, $attributes);
+    }
+
+    /**
+     * Deletes the specified object from the IMSP server.
+     */
+    function _delete($object_key, $object_id)
+    {
+        return $this->_imsp->deleteEntry($this->_bookName, $object_id);
+    }
+
+    /**
+     * Deletes the address book represented by this driver from the IMSP server.
+     *
+     * @return mixed  true | PEAR_Error
+     * @since Turba 2.2
+     */
+     function _deleteAll()
+     {
+         $this->_imsp->deleteAddressbook($this->_bookName);
+     }
+
+    /**
+     * Saves the specified object to the IMSP server.
+     *
+     * @param string $object_key  (Ignored) name of the field
+     *                            in $attributes[] to treat as key.
+     * @param string $object_id   The value of the key field.
+     * @param array  $attributes  Contains the field names and values of the entry.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _save($object_key, $object_id, $attributes)
+    {
+        /* Check if the key changed, because IMSP will just write out
+         * a new entry without removing the previous one. */
+        if ($attributes['name'] != $this->_makeKey($attributes)) {
+            $this->_delete($object_key, $attributes['name']);
+            $attributes['name'] = $this->_makeKey($attributes);
+            $object_id = $attributes['name'];
+        }
+        $result = $this->_add($attributes);
+        return is_a($result, 'PEAR_Error') ? $result : $object_id;
+    }
+
+    /**
+     * Create an object key for a new object.
+     *
+     * @param array $attributes  The attributes (in driver keys) of the
+     *                           object being added.
+     *
+     * @return string  A unique ID for the new object.
+     */
+    function _makeKey($attributes)
+    {
+        return $attributes['fullname'];
+    }
+
+    /**
+     * Parses out $emailText into an array of pure email addresses
+     * suitable for searching the IMSP datastore with.
+     *
+     * @param $emailText string single string containing email addressses.
+     * @return array of pure email address.
+     */
+    function _getGroupEmails($emailText)
+    {
+        $result = preg_match_all("(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})",
+                                 $emailText, $matches);
+
+        return $matches[0];
+    }
+
+    /**
+     * Parses the search criteria, requests the individual searches from the
+     * server and performs any necessary ANDs / ORs on the results.
+     *
+     * @param array  $criteria  Array containing the search criteria.
+     * @param string $glue      Type of search to perform (AND / OR).
+     *
+     * @return array  Array containing contact names that match $criteria.
+     */
+    function _doSearch($criteria, $glue)
+    {
+        $results = array();
+        $names = array();
+        foreach ($criteria as $key => $vals) {
+            if (!empty($vals['OR'])) {
+                $results[] = $this->_doSearch($vals['OR'], 'OR');
+            } elseif (!empty($vals['AND'])) {
+                $results[] = $this->_doSearch($vals['AND'], 'AND');
+            } else {
+                /* If we are here, and we have a ['field'] then we
+                 * must either do the 'AND' or the 'OR' search. */
+                if (isset($vals['field'])) {
+                    $results[] = $this->_sendSearch($vals);
+                } else {
+                    foreach ($vals as $test) {
+                        if (!empty($test['OR'])) {
+                            $results[] = $this->_doSearch($test['OR'], 'OR');
+                        } elseif (!empty($test['AND'])) {
+                            $results[] = $this->_doSearch($test['AND'], 'AND');
+                        } else {
+                            $results[] = $this->_doSearch(array($test), $glue);
+                        }
+                    }
+                }
+            }
+        }
+
+        if ($glue == 'AND') {
+            $names = $this->_getDuplicated($results);
+        } elseif ($glue == 'OR') {
+            $names = $this->_removeDuplicated($results);
+        }
+
+        return $names;
+    }
+
+    /**
+     * Sends a search request to the server.
+     *
+     * @param array $criteria  Array containing the search critera.
+     *
+     * @return array  Array containing a list of names that match the search.
+     */
+    function _sendSearch($criteria)
+    {
+        global $conf;
+
+        $names = '';
+        $imspSearch = array();
+        $searchkey = $criteria['field'];
+        $searchval = $criteria['test'];
+        $searchop = $criteria['op'];
+        $hasName = false;
+        $this->_noGroups = false;
+        $cache = &Horde_Cache::singleton($conf['cache']['driver'], Horde::getDriverConfig('cache', $conf['cache']['driver']));
+        $key = implode(".", array_merge($criteria, array($this->_bookName)));
+
+        /* Now make sure we aren't searching on a dynamically created
+         * field. */
+        switch ($searchkey) {
+        case 'fullname':
+            if (!$hasName) {
+                $searchkey = 'name';
+                $hasName = true;
+            } else {
+                $searchkey = '';
+            }
+            break;
+
+        case '__owner':
+            if (!$this->params['contact_ownership']) {
+                $searchkey = '';
+                $hasName = true;
+            }
+            break;
+        }
+
+        /* Are we searching for only Turba_Object_Groups or Turba_Objects?
+         * This is needed so the 'Show Lists' and 'Show Contacts'
+         * links work correctly in Turba. */
+        if ($searchkey == '__type') {
+            switch ($searchval) {
+            case 'Group':
+                $searchkey = $this->_groupField;
+                $searchval = $this->_groupValue;
+                break;
+
+            case 'Object':
+                if (!$hasName) {
+                    $searchkey = 'name';
+                    $searchval = '';
+                    $hasName = true;
+                } else {
+                    $searchkey = '';
+                }
+                $this->_noGroups = true;
+                break;
+            }
+        }
+
+        if (!$searchkey == '') {
+            // Check $searchval for content and for strict matches.
+            if (strlen($searchval) > 0) {
+                if ($searchop == 'LIKE') {
+                    $searchval = '*' . $searchval . '*';
+                }
+            } else {
+                $searchval = '*';
+            }
+            $imspSearch[$searchkey] = $searchval;
+        }
+        if (!count($imspSearch)) {
+            $imspSearch['name'] = '*';
+        }
+
+        /* Finally get to the command.  Check the cache first, since each 'Turba'
+           search may consist of a number of identical IMSP searchaddress calls in
+           order for the AND and OR parts to work correctly.  15 Second lifetime
+           should be reasonable for this. This should reduce load on IMSP server
+           somewhat.*/
+        $results = $cache->get($key, 15);
+
+        if ($results) {
+            $names = unserialize($results);
+        }
+
+        if (!$names) {
+            $names = $this->_imsp->search($this->_bookName, $imspSearch);
+            if (is_a($names, 'PEAR_Error')) {
+                $GLOBALS['notification']->push($names, 'horde.error');
+            } else {
+                $cache->set($key, serialize($names));
+                return $names;
+            }
+        } else {
+            return $names;
+        }
+    }
+
+    /**
+     * Returns only those names that are duplicated in $names
+     *
+     * @param array $names  A nested array of arrays containing names
+     *
+     * @return array  Array containing the 'AND' of all arrays in $names
+     */
+    function _getDuplicated($names)
+    {
+        $results = array();
+        $matched = array();
+        /* If there is only 1 array, simply return it. */
+        if (count($names) < 2) {
+            return $names[0];
+        } else {
+            for ($i = 0; $i < count($names); $i++) {
+                if (is_array($names[$i])) {
+                    $results = array_merge($results, $names[$i]);
+                }
+            }
+            $search = array_count_values($results);
+            foreach ($search as $key => $value) {
+                if ($value > 1) {
+                    $matched[] = $key;
+                }
+            }
+        }
+
+        return $matched;
+    }
+
+    /**
+     * Returns an array with all duplicate names removed.
+     *
+     * @param array $names  Nested array of arrays containing names.
+     *
+     * @return array  Array containg the 'OR' of all arrays in $names.
+     */
+    function _removeDuplicated($names)
+    {
+        $unames = array();
+        for ($i = 0; $i < count($names); $i++) {
+            if (is_array($names[$i])) {
+                $unames = array_merge($unames, $names[$i]);
+            }
+        }
+        return array_unique($unames);
+    }
+
+    /**
+     * Checks if the current user has the requested permission
+     * on this source.
+     *
+     * @param integer $perm  The permission to check for.
+     *
+     * @return boolean  true if user has permission, false otherwise.
+     */
+    function hasPermission($perm)
+    {
+        return $this->_perms & $perm;
+    }
+
+    /**
+     * Converts an acl string to a Horde Permissions bitmask.
+     *
+     * @param string $acl  A standard, IMAP style acl string.
+     *
+     * @return integer  Horde Permissions bitmask.
+     */
+    function _aclToHordePerms($acl)
+    {
+        $hPerms = 0;
+        if (strpos($acl, 'w') !== false) {
+            $hPerms |= PERMS_EDIT;
+        }
+        if (strpos($acl, 'r') !== false) {
+            $hPerms |= PERMS_READ;
+        }
+        if (strpos($acl, 'd') !== false) {
+            $hPerms |= PERMS_DELETE;
+        }
+        if (strpos($acl, 'l') !== false) {
+            $hPerms |= PERMS_SHOW;
+        }
+        return $hPerms;
+    }
+
+    /**
+     * Creates a new Horde_Share and creates the address book
+     * on the IMSP server.
+     *
+     * @param array  The params for the share.
+     *
+     * @return mixed  The share object or PEAR_Error.
+     * @since Turba 2.2
+     */
+    function &createShare($share_id, $params)
+    {
+        if (isset($params['default']) && $params['default'] === true) {
+            $params['params']['name'] = $this->params['username'];
+        } else {
+            $params['params']['name'] = $this->params['username'] . '.' . $params['name'];
+        }
+        $result = &Turba::createShare($share_id, $params);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $imsp_result = Net_IMSP_Utils::createBook($GLOBALS['cfgSources']['imsp'], $params['params']['name']);
+        if (is_a($imsp_result, 'PEAR_Error')) {
+            return $imsp_result;
+        }
+        return $result;
+    }
+
+    /**
+     * Helper function to count the occurances of the ':'
+     * delimter in group member entries.
+     *
+     * @param string $in  The group member entry.
+     *
+     * @return integer  The number of ':' in $in.
+     */
+    function _countDelimiters($in)
+    {
+        $cnt = 0;
+        $pos = 0;
+        $i = -1;
+        while (($pos = strpos($in, ':', $pos + 1)) !== false) {
+            ++$cnt;
+        }
+        return $cnt;
+    }
+
+    /**
+     * Returns the owner for this contact. For an IMSP source, this should be
+     * the name of the address book.
+     */
+    function _getContactOwner()
+    {
+       return $this->params['name'];
+    }
+
+    /**
+     * Check if the passed in share is the default share for this source.
+     *
+     * @see turba/lib/Turba_Driver#checkDefaultShare($share, $srcconfig)
+     */
+    function checkDefaultShare(&$share, $srcConfig)
+    {
+        $params = @unserialize($share->get('params'));
+        if (!isset($params['default'])) {
+            $params['default'] = ($params['name'] == $srcConfig['params']['username']);
+            $share->set('params', serialize($params));
+            $share->save();
+        }
+
+        return $params['default'];
+    }
+
+}
diff --git a/turba/lib/Driver/Kolab.php b/turba/lib/Driver/Kolab.php
new file mode 100644 (file)
index 0000000..1dbde5d
--- /dev/null
@@ -0,0 +1,1283 @@
+<?php
+/** Kolab support class. */
+require_once 'Horde/Kolab.php';
+
+/**
+ * Horde Turba driver for the Kolab IMAP Server.
+ *
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author  Thomas Jarosch <thomas.jarosch@intra2net.com>
+ * @author  Gunnar Wrobel <wrobel@pardus.de>
+ * @author  Stuart Binge <omicron@mighty.co.za>
+ * @package Turba
+ */
+class Turba_Driver_Kolab extends Turba_Driver
+{
+    /**
+     * Our Kolab server connection.
+     *
+     * @var Kolab
+     */
+    var $_kolab = null;
+
+    /**
+     * The wrapper to decide between the Kolab implementation
+     *
+     * @var Turba_Driver_kolab_wrapper
+     */
+    var $_wrapper = null;
+
+    var $_capabilities = array(
+        'delete_addressbook' => true,
+        'delete_all' => true,
+    );
+
+    /**
+     * Attempts to open a Kolab Groupware folder.
+     *
+     * @return boolean  True on success, PEAR_Error on failure.
+     */
+    function _init()
+    {
+        $this->_kolab = new Kolab();
+        if (empty($this->_kolab->version)) {
+            $wrapper = "Turba_Driver_kolab_wrapper_old";
+        } else {
+            $wrapper = "Turba_Driver_kolab_wrapper_new";
+        }
+
+        $this->_wrapper = &new $wrapper($this->name, $this->_kolab);
+    }
+
+    /**
+     * Searches the Kolab message store with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty
+     * array, all records will be returned.
+     *
+     * @param $criteria      Array containing the search criteria.
+     * @param $fields        List of fields to return.
+     *
+     * @return               Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        return $this->_wrapper->_search($criteria, $fields);
+    }
+
+    /**
+     * Read the given data from the Kolab message store and returns the
+     * results.
+     *
+     * @param string $key    The primary key field to use.
+     * @param mixed $ids     The ids of the contacts to load.
+     * @param string $owner  Only return contacts owned by this user.
+     * @param array $fields  List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _read($key, $ids, $owner, $fields)
+    {
+        return $this->_wrapper->_read($key, $ids, $fields);
+    }
+
+    /**
+     * Adds the specified object to the Kolab message store.
+     */
+    function _add($attributes)
+    {
+        return $this->_wrapper->_add($attributes);
+    }
+
+    /**
+     * Removes the specified object from the Kolab message store.
+     */
+    function _delete($object_key, $object_id)
+    {
+        return $this->_wrapper->_delete($object_key, $object_id);
+    }
+
+    /**
+     * Deletes all contacts from a specific address book.
+     *
+     * @return boolean  True if the operation worked.
+     */
+    function _deleteAll($sourceName = null)
+    {
+        return $this->_wrapper->_deleteAll($sourceName);
+    }
+
+    /**
+     * Updates an existing object in the Kolab message store.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _save($object_key, $object_id, $attributes)
+    {
+        return $this->_wrapper->_save($object_key, $object_id, $attributes);
+    }
+
+    /**
+     * Create an object key for a new object.
+     *
+     * @param array $attributes  The attributes (in driver keys) of the
+     *                           object being added.
+     *
+     * @return string  A unique ID for the new object.
+     */
+    function _makeKey($attributes)
+    {
+        if (isset($attributes['uid'])) {
+            return $attributes['uid'];
+        }
+        return $this->generateUID();
+    }
+
+    /**
+     * Create an object key for a new object.
+     *
+     * @return string  A unique ID for the new object.
+     */
+    function generateUID()
+    {
+        if (method_exists($this->_wrapper, 'generateUID')) {
+            return $this->_wrapper->generateUID();
+        } else {
+            return parent::generateUID();
+        }
+    }
+
+    /**
+     * Creates a new Horde_Share
+     *
+     * @param array  The params for the share.
+     *
+     * @return mixed  The share object or PEAR_Error.
+     * @since Turba 2.2
+     */
+    function &createShare($share_id, $params)
+    {
+        if (isset($params['params']['default']) && $params['params']['default'] === true) {
+            $share_id = Horde_Auth::getAuth();
+        }
+
+        $result = &Turba::createShare($share_id, $params);
+        return $result;
+    }
+
+    function checkDefaultShare(&$share, $srcConfig)
+    {
+        $params = @unserialize($share->get('params'));
+        return isset($params['default']) ? $params['default'] : false;
+    }
+
+}
+
+/**
+ * Horde Turba wrapper to distinguish between both Kolab driver implementations.
+ *
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author  Gunnar Wrobel <wrobel@pardus.de>
+ * @package Turba
+ */
+
+class Turba_Driver_Kolab_wrapper {
+
+    /**
+     * Indicates if the wrapper has connected or not
+     *
+     * @var boolean
+     */
+    var $_connected = false;
+
+    /**
+     * String containing the current addressbook name.
+     *
+     * @var string
+     */
+    var $_addressbook = '';
+
+    /**
+     * Our Kolab server connection.
+     *
+     * @var Kolab
+     */
+    var $_kolab = null;
+
+    /**
+     * Constructor
+     *
+     * @param string      $addressbook  The addressbook to load.
+     * @param Horde_Kolab $kolab        The Kolab connection object
+     */
+    public function __construct($addressbook, &$kolab)
+    {
+        if ($addressbook && $addressbook[0] == '_') {
+            $addressbook = substr($addressbook, 1);
+        }
+        $this->_addressbook = $addressbook;
+        $this->_kolab = &$kolab;
+    }
+
+    /**
+     * Connect to the Kolab backend
+     *
+     * @param int    $loader         The version of the XML
+     *                               loader
+     *
+     * @return mixed True on success, a PEAR error otherwise
+     */
+    function connect($loader = 0)
+    {
+        if ($this->_connected) {
+            return true;
+        }
+
+        $result = $this->_kolab->open($this->_addressbook, $loader);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $this->_connected = true;
+
+        return true;
+    }
+}
+
+/**
+ * Horde Turba driver for the Kolab IMAP Server.
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author  Gunnar Wrobel <wrobel@pardus.de>
+ * @author  Stuart Binge <omicron@mighty.co.za>
+ * @package Turba
+ */
+class Turba_Driver_Kolab_Wrapper_Old extends Turba_Driver_Kolab_Wrapper {
+
+    function _buildContact()
+    {
+        $k = &$this->_kolab;
+
+        $contact = array(
+            'uid' => $k->getUID(),
+            'owner' => Horde_Auth::getAuth(),
+            'job-title' => $k->getStr('job-title'),
+            'organization' => $k->getStr('organization'),
+            'body' => $k->getStr('body'),
+            'web-page' => $k->getStr('web-page'),
+            'nick-name' => $k->getStr('nick-name'),
+        );
+
+        $name = &$k->getRootElem('name');
+        $contact['full-name'] = $k->getElemStr($name, 'full-name');
+        $contact['given-name'] = $k->getElemStr($name, 'given-name');
+        $contact['last-name'] = $k->getElemStr($name, 'last-name');
+
+        $email = &$k->getRootElem('email');
+        $contact['smtp-address'] = $k->getElemStr($email, 'smtp-address');
+
+        $phones = &$k->getAllRootElems('phone');
+        for ($i = 0, $j = count($phones); $i < $j; $i++) {
+            $phone = &$phones[$i];
+            $type = $k->getElemStr($phone, 'type');
+
+            switch ($type) {
+            case 'home1':
+                $contact['home1'] = $k->getElemStr($phone, 'number');
+                break;
+
+            case 'business1':
+                $contact['business1'] = $k->getElemStr($phone, 'number');
+                break;
+
+            case 'mobile':
+                $contact['mobile'] = $k->getElemStr($phone, 'number');
+                break;
+
+            case 'businessfax':
+                $contact['businessfax'] = $k->getElemStr($phone, 'number');
+                break;
+            }
+        }
+
+        $addresses = &$k->getAllRootElems('address');
+        for ($i = 0, $j = count($addresses); $i < $j; $i++) {
+            $address = &$addresses[$i];
+            $type = $k->getElemStr($address, 'type');
+
+            switch ($type) {
+            case 'home':
+                $contact['home-street'] = $k->getElemStr($address, 'street');
+                $contact['home-locality'] = $k->getElemStr($address, 'locality');
+                $contact['home-region'] = $k->getElemStr($address, 'region');
+                $contact['home-postal-code'] = $k->getElemStr($address, 'postal-code');
+                $contact['home-country'] = $k->getElemStr($address, 'country');
+                break;
+
+            case 'business':
+                $contact['business-street'] = $k->getElemStr($address, 'street');
+                $contact['business-locality'] = $k->getElemStr($address, 'locality');
+                $contact['business-region'] = $k->getElemStr($address, 'region');
+                $contact['business-postal-code'] = $k->getElemStr($address, 'postal-code');
+                $contact['business-country'] = $k->getElemStr($address, 'country');
+                break;
+            }
+        }
+
+        return $contact;
+    }
+
+    function _setPhone($type, &$phone, $attributes)
+    {
+        if (empty($attributes[$type])) {
+            $this->_kolab->delRootElem($phone);
+        } else {
+            if ($phone === false) {
+                $phone = &$this->_kolab->appendRootElem('phone');
+                $this->_kolab->setElemStr($phone, 'type', $type);
+            }
+            $this->_kolab->setElemStr($phone, 'number', $attributes[$type]);
+        }
+    }
+
+    function _setAddress($type, &$address, $attributes)
+    {
+        if (empty($attributes["$type-street"]) && empty($attributes["$type-locality"]) &&
+            empty($attributes["$type-region"]) && empty($attributes["$type-postal-code"]) &&
+            empty($attributes["$type-country"])) {
+            $this->_kolab->delRootElem($address);
+        } else {
+            if ($address === false) {
+                $address = &$this->_kolab->appendRootElem('address');
+                $this->_kolab->setElemStr($address, 'type', $type);
+            }
+            $this->_kolab->setElemStr($address, 'street', $attributes["$type-street"]);
+            $this->_kolab->setElemStr($address, 'locality', $attributes["$type-locality"]);
+            $this->_kolab->setElemStr($address, 'region', $attributes["$type-region"]);
+            $this->_kolab->setElemStr($address, 'postal-code', $attributes["$type-postal-code"]);
+            $this->_kolab->setElemStr($address, 'country', $attributes["$type-country"]);
+        }
+    }
+
+    function _createContact(&$xml, $attributes)
+    {
+        $k = &$this->_kolab;
+
+        $name = &$k->initRootElem('name');
+        if (!empty($attributes['full-name'])) {
+            $k->setElemStr($name, 'full-name', $attributes['full-name']);
+        }
+        if (!empty($attributes['given-name'])) {
+            $k->setElemStr($name, 'given-name', $attributes['given-name']);
+        }
+        if (!empty($attributes['last-name'])) {
+            $k->setElemStr($name, 'last-name', $attributes['last-name']);
+        }
+
+        $email = &$k->initRootElem('email');
+        $k->setElemStr($email, 'display-name', $attributes['full-name']);
+        $k->setElemStr($email, 'smtp-address', $attributes['smtp-address']);
+
+        if (!empty($attributes['job-title'])) {
+            $k->setStr('job-title', $attributes['job-title']);
+        }
+        if (!empty($attributes['organization'])) {
+            $k->setStr('organization', $attributes['organization']);
+        }
+        if (!empty($attributes['body'])) {
+            $k->setStr('body', $attributes['body']);
+        }
+        if (!empty($attributes['web-page'])) {
+            $k->setStr('web-page', $attributes['web-page']);
+        }
+        if (!empty($attributes['nick-name'])) {
+            $k->setStr('nick-name', $attributes['nick-name']);
+        }
+
+        // Phones
+        $phones = &$k->getAllRootElems('phone');
+        $home = false;
+        $bus = false;
+        $mob = false;
+        $fax = false;
+        for ($i = 0, $j = count($phones); $i < $j; $i++) {
+            $phone = &$phones[$i];
+            $type = $k->getElemStr($phone, 'type');
+
+            switch ($type) {
+            case 'home1':
+                $home = &$phone;
+                break;
+
+            case 'business1':
+                $bus = &$phone;
+                break;
+
+            case 'mobile':
+                $mob = &$phone;
+                break;
+
+            case 'businessfax':
+                $fax = &$phone;
+                break;
+            }
+        }
+
+        $this->_setPhone('home1', $home, $attributes);
+        $this->_setPhone('business1', $bus, $attributes);
+        $this->_setPhone('mobile', $mob, $attributes);
+        $this->_setPhone('businessfax', $fax, $attributes);
+
+        // Addresses
+        $home = false;
+        $bus = false;
+        $addresses = &$k->getAllRootElems('address');
+        for ($i = 0, $j = count($addresses); $i < $j; $i++) {
+            $address = &$addresses[$i];
+            $type = $k->getElemStr($address, 'type');
+
+            switch ($type) {
+            case 'home':
+                $home = &$address;
+                break;
+
+            case 'business':
+                $bus = &$address;
+                break;
+            }
+        }
+
+        $this->_setAddress('home', $home, $attributes);
+        $this->_setAddress('business', $bus, $attributes);
+    }
+
+    /**
+     * Searches the Kolab message store with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty
+     * array, all records will be returned.
+     *
+     * @param $criteria      Array containing the search criteria.
+     * @param $fields        List of fields to return.
+     *
+     * @return               Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if (!is_callable(array($this->_kolab, 'listObjectsInFolder'))) {
+            Horde::logMessage('The Framework Kolab package must be upgraded', __FILE__, __LINE__, PEAR_LOG_ERR);
+            return PEAR::raiseError(_("Unable to search."));
+        }
+
+        $results = array();
+        $folders = $this->_kolab->listFolders();
+        foreach ($folders as $folder) {
+            if ($folder[1] != 'contact') {
+                continue;
+            }
+
+            $msg_list = $this->_kolab->listObjectsInFolder($folder[0]);
+            if (is_a($msg_list, 'PEAR_Error') || empty($msg_list)) {
+                return $msg_list;
+            }
+
+            foreach ($msg_list as $msg) {
+                $result = $this->_kolab->loadObject($msg, true);
+                if (is_a($result, 'PEAR_Error')) {
+                    return $result;
+                }
+
+                $contact = $this->_buildContact();
+
+                if ($this->_matchCriteria($contact, $criteria) == false) {
+                    continue;
+                }
+
+                $card = array();
+                foreach ($fields as $field) {
+                    $card[$field] = (isset($contact[$field]) ? $contact[$field] : '');
+                }
+
+                $results[] = $card;
+            }
+        }
+
+        return $results;
+    }
+
+    /**
+     * Read the given data from the Kolab message store and returns the
+     * result's fields.
+     *
+     * @param $criteria      Search criteria.
+     * @param $id            Data identifier.
+     * @param $fields        List of fields to return.
+     *
+     * @return               Hash containing the search results.
+     */
+    function _read($criteria, $id_list, $fields)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if ($criteria != 'uid') {
+            return array();
+        }
+
+        if (!is_array($id_list)) {
+            $id_list = array($id_list);
+        }
+
+        $results = array();
+        foreach ($id_list as $id) {
+            $result = $this->_kolab->loadObject($id);
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            }
+
+            $contact = $this->_buildContact($result);
+            $card = array();
+            foreach ($fields as $field) {
+                $card[$field] = (isset($contact[$field]) ? $contact[$field] : '');
+            }
+
+            $results[] = $card;
+        }
+
+        return $results;
+    }
+
+    /**
+     * Adds the specified object to the Kolab message store.
+     */
+    function _add($attributes)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $xml = &$this->_kolab->newObject($attributes['uid']);
+        if (is_a($xml, 'PEAR_Error')) {
+            return $xml;
+        }
+
+        $this->_createContact($xml, $attributes);
+
+        return $this->_kolab->saveObject();
+    }
+
+    /**
+     * Removes the specified object from the Kolab message store.
+     */
+    function _delete($object_key, $object_id)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if ($object_key != 'uid') {
+            return false;
+        }
+
+        return $this->_kolab->removeObjects($object_id);
+    }
+
+    /**
+     * Deletes all contacts from a specific address book.
+     *
+     * @return boolean  True if the operation worked.
+     */
+    function _deleteAll($sourceName = null)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if ($sourceName != null) {
+            Horde::logMessage('deleteAll only working for current share. Called for $sourceName', __FILE__, __LINE__, PEAR_LOG_ERR);
+            return PEAR::raiseError(sprintf(_("Cannot delete all address book entries for %s"), $sourceName));
+        }
+
+        return $this->_kolab->removeAllObjects();
+    }
+
+    /**
+     * Updates an existing object in the Kolab message store.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _save($object_key, $object_id, $attributes)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if ($object_key != 'uid') {
+            return PEAR::raiseError('key must be uid');
+        }
+
+        $xml = &$this->_kolab->loadObject($object_id);
+        if (is_a($xml, 'PEAR_Error')) {
+            return $xml;
+        }
+
+        $this->_createContact($xml, $attributes);
+
+        $result = $this->_kolab->saveObject();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        return $object_id;
+    }
+
+    /**
+     * Checks whether a contact matches a given criteria.
+     *
+     * @param array $contact       The contact.
+     * @param array $criteria      The criteria.
+     *
+     * @return boolean  Wether the passed string corresponding to $criteria.
+     *
+     * @access private
+     */
+    function _matchCriteria($contact, $criteria)
+    {
+        $values = array_values($criteria);
+        $values = $values[0];
+        $ok = true;
+
+        for ($current = 0; $current < count($values); ++$current) {
+            $temp = $values[$current];
+
+            while (!empty($temp) && !array_key_exists('field', $temp)) {
+                $temp = array_values($temp);
+                $temp = $temp[0];
+            }
+
+            if (empty($temp)) {
+                continue;
+            }
+
+            $searchkey = $temp['field'];
+            $searchval = $temp['test'];
+
+            if (stristr($contact[$searchkey], $searchval) == false) {
+                $ok = $ok && false;
+            } else {
+                $ok = $ok && true;
+            }
+        }
+
+        return $ok;
+    }
+}
+
+/**
+ * New Horde Turba driver for the Kolab IMAP Server.
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author  Gunnar Wrobel <wrobel@pardus.de>
+ * @author  Thomas Jarosch <thomas.jarosch@intra2net.com>
+ * @package Turba
+ */
+class Turba_Driver_Kolab_Wrapper_New extends Turba_Driver_Kolab_Wrapper {
+
+    /**
+     * Internal cache of Kronolith_Event_kolab_new. eventID/UID is key
+     *
+     * @var array
+     */
+    var $_contacts_cache;
+
+    /**
+     * Shortcut to the imap connection
+     *
+     * @var Kolab_IMAP
+     */
+    var $_store = null;
+
+    /**
+     * Connect to the Kolab backend
+     *
+     * @return mixed True on success, a PEAR error otherwise
+     */
+    function connect()
+    {
+        $result = parent::connect(1);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $this->_store = &$this->_kolab->_storage;
+
+        /* Fetch the contacts first */
+        $raw_contacts = $this->_store->getObjectArray();
+        if (!$raw_contacts) {
+            $raw_contacts = array();
+        }
+        $contacts = array();
+        foreach ($raw_contacts as $id => $contact) {
+            if (isset($contact['email'])) {
+                unset($contact['email']);
+            }
+            if (isset($contact['picture'])) {
+                $name = $contact['picture'];
+                if (isset($contact['_attachments'][$name])) {
+                    $contact['photo'] =  $this->_store->_data->getAttachment($contact['_attachments'][$name]['key']);
+                    $contact['phototype'] = $contact['_attachments'][$name]['type'];
+                }
+            }
+
+            $contacts[$id] = $contact;
+        }
+
+        /* Now we retrieve distribution-lists */
+        $result = $this->_store->setObjectType('distribution-list');
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+        $groups = $this->_store->getObjectArray();
+        if (!$groups) {
+            $groups = array();
+        }
+
+        /* Revert to the original state */
+        $result = $this->_store->setObjectType('contact');
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        /* Store the results in our cache */
+        $this->_contacts_cache = array_merge($contacts, $groups);
+
+        return true;
+    }
+
+    /**
+     * Searches the Kolab message store with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty
+     * array, all records will be returned.
+     *
+     * @param $criteria      Array containing the search criteria.
+     * @param $fields        List of fields to return.
+     *
+     * @return               Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if (!count($criteria)) {
+            return $this->_contacts_cache;
+        }
+
+        // keep only entries matching criteria
+        $ids = array();
+        foreach ($criteria as $key => $criteria) {
+            $ids[] = $this->_doSearch($criteria, strval($key), $this->_contacts_cache);
+        }
+        $ids = $this->_removeDuplicated($ids);
+
+        /* Now we have a list of names, get the rest. */
+        $result = $this->_read('uid', $ids, $fields);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        Horde::logMessage(sprintf('Kolab returned %s results',
+                                  count($result)), __FILE__, __LINE__, PEAR_LOG_DEBUG);
+        return array_values($result);
+    }
+
+    /**
+     * Applies the filter criteria to a list of entries
+     *
+     * @param $criteria      Array containing the search criteria.
+     * @param $fields        List of fields to return.
+     *
+     * @return array         Array containing the ids of the selected entries
+     */
+    function _doSearch($criteria, $glue, &$entries)
+    {
+        $ids = array();
+        foreach ($criteria as $key => $vals) {
+            if (!empty($vals['OR'])) {
+                $ids[] = $this->_doSearch($vals['OR'], 'OR', $entries);
+            } elseif (!empty($vals['AND'])) {
+                $ids[] = $this->_doSearch($vals['AND'], 'AND', $entries);
+            } else {
+                /* If we are here, and we have a ['field'] then we
+                 * must either do the 'AND' or the 'OR' search. */
+                if (isset($vals['field'])) {
+                    $ids[] = $this->_selectEntries($vals, $entries);
+                } else {
+                    foreach ($vals as $test) {
+                        if (!empty($test['OR'])) {
+                            $ids[] = $this->_doSearch($test['OR'], 'OR');
+                        } elseif (!empty($test['AND'])) {
+                            $ids[] = $this->_doSearch($test['AND'], 'AND');
+                        } else {
+                            $ids[] = $this->_doSearch(array($test), $glue);
+                        }
+                    }
+                }
+            }
+        }
+
+        if ($glue == 'AND') {
+            $ids = $this->_getAND($ids);
+        } elseif ($glue == 'OR') {
+            $ids = $this->_removeDuplicated($ids);
+        }
+
+        return $ids;
+    }
+
+    /**
+     * Applies one filter criterium to a list of entries
+     *
+     * @param $test          Test criterium
+     * @param $entries       List of fields to return.
+     *
+     * @return array         Array containing the ids of the selected entries
+     */
+    function _selectEntries($test, &$entries)
+    {
+        $ids = array();
+
+        if (!isset($test['field'])) {
+            Horde::logMessage('Search field not set. Returning all entries.',
+                              __FILE__, __LINE__, PEAR_LOG_DEBUG);
+            foreach ($entries as $entry) {
+                $ids[] = $entry['uid'];
+            }
+        } else {
+            $field = $test['field'];
+            if (isset($test['test'])) {
+                $value = $test['test'];
+            } else {
+                $value = '';
+            }
+            // Special emails hack
+            if ($field == 'email') {
+                $field = 'emails';
+                $test['op'] = 'LIKE';
+                $test['begin'] = false;
+            }
+            if (!isset($test['op']) || $test['op'] == '=') {
+                foreach ($entries as $entry) {
+                    if (isset($entry[$field]) && $entry[$field] == $value) {
+                        $ids[] = $entry['uid'];
+                    }
+                }
+            } else {
+                // 'op' is LIKE
+                if (!empty($test['begin'])) {
+                    $begin = true;
+                } else {
+                    $begin = false;
+                }
+
+                // PHP 4 compatibility
+                $has_stripos = function_exists('stripos');
+                if (!$has_stripos) {
+                    $value = strtolower($value);
+                }
+
+                foreach ($entries as $entry) {
+                    if (empty($value)) {
+                        $ids[] = $entry['uid'];
+                    } else if (isset($entry[$field])) {
+                        if ($has_stripos) {
+                            $pos = stripos($entry[$field], $value);
+                        } else {
+                            $pos = strpos(strtolower($entry[$field]), $value);
+                        }
+
+                        if ($pos === false) {
+                            continue;
+                        }
+                        if (!$begin || $pos == 0) {
+                            $ids[] = $entry['uid'];
+                        }
+                    }
+                }
+            }
+        }
+
+        return $ids;
+    }
+
+    /**
+     * Returns only those names that are duplicated in $ids
+     *
+     * @param array $ids  A nested array of arrays containing names
+     *
+     * @return array  Array containing the 'AND' of all arrays in $ids
+     */
+    function _getAND($ids)
+    {
+        $results = array();
+        $matched = array();
+        /* If there is only 1 array, simply return it. */
+        if (count($ids) < 2) {
+            return $ids[0];
+        } else {
+            for ($i = 0; $i < count($ids); $i++) {
+                if (is_array($ids[$i])) {
+                    $results = array_merge($results, $ids[$i]);
+                }
+            }
+        }
+        $search = array_count_values($results);
+        foreach ($search as $key => $value) {
+            if ($value == count($ids)) {
+                $matched[] = $key;
+            }
+        }
+
+        return $matched;
+    }
+
+    /**
+     * Returns an array with all duplicate names removed.
+     *
+     * @param array $ids  Nested array of arrays containing names.
+     *
+     * @return array  Array containg the 'OR' of all arrays in $ids.
+     */
+    function _removeDuplicated($ids)
+    {
+        $unames = array();
+        for ($i = 0; $i < count($ids); $i++) {
+            if (is_array($ids[$i])) {
+                $unames = array_merge($unames, $ids[$i]);
+            }
+        }
+        return array_unique($unames);
+    }
+
+    /**
+     * Read the given data from the Kolab message store and returns the
+     * result's fields.
+     *
+     * @param string $key    The primary key field to use (always 'uid' for Kolab).
+     * @param $ids           Data identifiers
+     * @param $fields        List of fields to return.
+     *
+     * @return               Hash containing the search results.
+     */
+    function _read($key, $ids, $fields)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $results = array();
+
+        if (!is_array($ids)) {
+            $ids = array($ids);
+        }
+
+        $count = count($fields);
+        foreach ($ids as $id) {
+            if (in_array($id, array_keys($this->_contacts_cache))) {
+                $object = $this->_contacts_cache[$id];
+                
+                $object_type = $this->_contacts_cache[$id]['__type'];
+                if (!isset($object['__type']) || $object['__type'] == 'Object') {
+                    if ($count) {
+                        $result = array();
+                        foreach ($fields as $field) {
+                            if (isset($object[$field])) {
+                                $result[$field] = $object[$field];
+                            }
+                        }
+                        $results[] = $result;
+                    } else {
+                        $results[] = $object;
+                    }
+                } else {
+                    $member_ids = array();
+                    if (isset($object['member'])) {
+                        foreach ($object['member'] as $member) {
+                            if (isset($member['uid'])) {
+                                $member_ids[] = $member['uid'];
+                                continue;
+                            }
+                            $display_name = $member['display-name'];
+                            $smtp_address = $member['smtp-address'];
+                            $criteria = array(
+                                'AND' => array(
+                                    array(
+                                        'field' => 'full-name',
+                                        'op' => 'LIKE',
+                                        'test' => $display_name,
+                                        'begin' => false,
+                                    ),
+                                    array(
+                                        'field' => 'emails',
+                                        'op' => 'LIKE',
+                                        'test' => $smtp_address,
+                                        'begin' => false,
+                                    ),
+                                ),
+                            );
+                            $fields = array('uid');
+
+                            // we expect only one result here!!!
+                            $contacts = $this->_search($criteria, $fields);
+
+                            // and drop everything else except the first search result
+                            $member_ids[] = $contacts[0]['uid'];
+                        }
+                        $object['__members'] = serialize($member_ids);
+                        unset($object['member']);
+                    }
+                    $results[] = $object;;
+                }
+            }
+        }
+
+
+        return $results;
+    }
+
+    /**
+     * Adds the specified object to the Kolab message store.
+     */
+    function _add($attributes)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $attributes['full-name'] = $attributes['last-name'];
+        if (isset($attributes['middle-names'])) {
+            $attributes['full-name'] = $attributes['middle-names'] . ' ' . $attributes['full-name'];
+        }
+        if (isset($attributes['given-name'])) {
+            $attributes['full-name'] = $attributes['given-name'] . ' ' . $attributes['full-name'];
+        }
+
+        $result = $this->_store($attributes);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+        return true;
+    }
+
+    /**
+     * Updates an existing object in the Kolab message store.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _save($object_key, $object_id, $attributes)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if ($object_key != 'uid') {
+            return PEAR::raiseError(sprintf('Key for saving must be \'uid\' not %s!', $object_key));
+        }
+
+        return $this->_store($attributes, $object_id);
+    }
+
+    /**
+     * Stores an object in the Kolab message store.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _store($attributes, $object_id = null)
+    {
+        $group = false;
+        if (isset($attributes['__type']) && $attributes['__type'] == 'Group') {
+            $group = true;
+            $result = $this->_store->setObjectType('distribution-list');
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            }
+            $this->_convertMembers($attributes);
+        }
+
+        if (isset($attributes['photo']) && isset($attributes['phototype'])) {
+            $attributes['_attachments']['photo.attachment'] = array('type' => $attributes['phototype'],
+                                                                    'content' => $attributes['photo']);
+            $attributes['picture'] = 'photo.attachment';
+            unset($attributes['photo']);
+            unset($attributes['phototype']);
+        }
+
+        $result = $this->_store->save($attributes, $object_id);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if ($group) {
+            $result = $this->_store->setObjectType('contact');
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            }
+        }
+
+        return $object_id;
+    }
+
+    function _convertMembers(&$attributes)
+    {
+        if (isset($attributes['__members'])) {
+            $member_ids = unserialize($attributes['__members']);
+            $attributes['member'] = array();
+            foreach ($member_ids as $member_id) {
+                if (isset($this->_contacts_cache[$member_id])) {
+                    $member = $this->_contacts_cache[$member_id];
+                    $mail = array('uid' => $member_id);
+                    if (!empty($member['full-name'])) {
+                        $mail['display-name'] = $member['full-name'];
+                    }
+                    if (!empty($member['emails'])) {
+                        $emails = explode(',', $member['emails']);
+                        $mail['smtp-address'] = trim($emails[0]);
+                        if (!isset($mail['display-name'])) {
+                            $mail['display-name'] = $mail['smtp-address'];
+                        }
+                    }
+                    $attributes['member'][] = $mail;
+                }
+            }
+            unset($attributes['__members']);
+        }
+    }
+    
+
+    /**
+     * Removes the specified object from the Kolab message store.
+     */
+    function _delete($object_key, $object_id)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if ($object_key != 'uid') {
+            return PEAR::raiseError(sprintf('Key for saving must be a UID not %s!', $object_key));
+        }
+
+        if (!in_array($object_id, array_keys($this->_contacts_cache))) {
+            return PEAR::raiseError(sprintf(_("Object with UID %s does not exist!"), $object_id));
+        }
+
+        $group = false;
+        if (isset($this->_contacts_cache[$object_id]['__type']) 
+            && $this->_contacts_cache[$object_id]['__type'] == 'Group') {
+            $group = true;
+        }
+
+        if ($group) {
+            $result = $this->_store->setObjectType('distribution-list');
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            }
+        }
+
+        $result = $this->_store->delete($object_id);
+
+        if ($group) {
+            $result = $this->_store->setObjectType('contact');
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Deletes all contacts from a specific address book.
+     *
+     * @return boolean  True if the operation worked.
+     */
+    function _deleteAll($sourceName = null)
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        /* Delete contacts */
+        $result = $this->_store->deleteAll();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+        
+        /* Delete groups */
+        $result = $this->_store->setObjectType('distribution-list');
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+        $result = $this->_store->deleteAll();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        /* Revert to the original state */
+        return $this->_store->setObjectType('contact');
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        return true;
+    }
+
+    /**
+     * Create an object key for a new object.
+     *
+     * @return string  A unique ID for the new object.
+     */
+    function generateUID()
+    {
+        $result = $this->connect();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        do {
+            $key = md5(uniqid(mt_rand(), true));
+        } while(in_array($key, array_keys($this->_contacts_cache)));
+
+        return $key;
+    }
+}
diff --git a/turba/lib/Driver/Ldap.php b/turba/lib/Driver/Ldap.php
new file mode 100644 (file)
index 0000000..2a07d42
--- /dev/null
@@ -0,0 +1,782 @@
+<?php
+/**
+ * Turba directory driver implementation for PHP's LDAP extension.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@csh.rit.edu>
+ * @package Turba
+ */
+class Turba_Driver_Ldap extends Turba_Driver
+{
+    /**
+     * Handle for the current LDAP connection.
+     *
+     * @var resource
+     */
+    var $_ds = 0;
+
+    /**
+     * Cache _getSyntax calls to avoid lots of repeated server calls.
+     *
+     * @var array
+     */
+    var $_syntaxCache = array();
+
+    /**
+     * Constructs a new Turba LDAP driver object.
+     *
+     * @access private
+     *
+     * @param $params  Hash containing additional configuration parameters.
+     */
+    public function __construct($params)
+    {
+        if (empty($params['server'])) {
+            $params['server'] = 'localhost';
+        }
+        if (empty($params['port'])) {
+            $params['port'] = 389;
+        }
+        if (empty($params['root'])) {
+            $params['root'] = '';
+        }
+        if (empty($params['multiple_entry_separator'])) {
+            $params['multiple_entry_separator'] = ', ';
+        }
+        if (empty($params['charset'])) {
+            $params['charset'] = '';
+        }
+        if (empty($params['scope'])) {
+            $params['scope'] = 'sub';
+        }
+        if (empty($params['deref'])) {
+            $params['deref'] = LDAP_DEREF_NEVER;
+        }
+
+        parent::__construct($params);
+    }
+
+    function _init()
+    {
+        if (!Horde_Util::extensionExists('ldap')) {
+            return PEAR::raiseError(_("LDAP support is required but the LDAP module is not available or not loaded."));
+        }
+
+        if (!($this->_ds = @ldap_connect($this->_params['server'], $this->_params['port']))) {
+            return PEAR::raiseError(_("Connection failure"));
+        }
+
+        /* Set the LDAP protocol version. */
+        if (!empty($this->_params['version'])) {
+            @ldap_set_option($this->_ds, LDAP_OPT_PROTOCOL_VERSION, $this->_params['version']);
+        }
+
+        /* Set the LDAP deref option for dereferencing aliases. */
+        if (!empty($this->_params['deref'])) {
+            @ldap_set_option($this->_ds, LDAP_OPT_DEREF, $this->_params['deref']);
+        }
+
+        /* Start TLS if we're using it. */
+        if (!empty($this->_params['tls'])) {
+            if (!@ldap_start_tls($this->_ds)) {
+                return PEAR::raiseError(sprintf(_("STARTTLS failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+            }
+        }
+
+        /* Bind to the server. */
+        if (isset($this->_params['bind_dn']) &&
+            isset($this->_params['bind_password'])) {
+            if (!@ldap_bind($this->_ds, $this->_params['bind_dn'], $this->_params['bind_password'])) {
+                return PEAR::raiseError(sprintf(_("Bind failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+            }
+        } elseif (!(@ldap_bind($this->_ds))) {
+            return PEAR::raiseError(sprintf(_("Bind failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+        }
+
+        return true;
+    }
+
+    /**
+     * Expands the parent->toDriverKeys Function to build composed fields needed for the dn
+     * based on the contents of $this->map.
+     *
+     * @param array $hash  Hash using Turba keys.
+     *
+     * @return array  Translated version of $hash.
+     */
+    function toDriverKeys($hash)
+    {
+        // First check for combined fields in the dn-fields and add them.
+        if (is_array($this->_params['dn'])) {
+            foreach ($this->_params['dn'] as $param) {
+                foreach ($this->map as $turbaname => $ldapname) {
+                    if ((is_array($this->map[$turbaname])) &&
+                        (isset($this->map[$turbaname]['attribute'])) &&
+                        ($this->map[$turbaname]['attribute'] == $param)) {
+                        $fieldarray = array();
+                        foreach ($this->map[$turbaname]['fields'] as $mapfield) {
+                            if (isset($hash[$mapfield])) {
+                                $fieldarray[] = $hash[$mapfield];
+                            } else {
+                                $fieldarray[] = '';
+                            }
+                        }
+                        $hash[$turbaname] = trim(vsprintf($this->map[$turbaname]['format'], $fieldarray), " \t\n\r\0\x0B,");
+                    }
+                }
+            }
+        }
+
+        // Now convert the turba-fieldnames to ldap-fieldnames
+        return parent::toDriverKeys($hash);
+    }
+
+    /**
+     * Searches the LDAP directory with the given criteria and returns
+     * a filtered list of results. If no criteria are specified, all
+     * records are returned.
+     *
+     * @param $criteria      Array containing the search criteria.
+     * @param $fields        List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        /* Build the LDAP filter. */
+        $filter = '';
+        if (count($criteria)) {
+            foreach ($criteria as $key => $vals) {
+                if ($key == 'OR') {
+                    $filter .= '(|' . $this->_buildSearchQuery($vals) . ')';
+                } elseif ($key == 'AND') {
+                    $filter .= '(&' . $this->_buildSearchQuery($vals) . ')';
+                }
+            }
+        } else {
+            /* Filter on objectclass. */
+            $filter = $this->_buildObjectclassFilter();
+        }
+
+        /* Add source-wide filters, which are _always_ AND-ed. */
+        if (!empty($this->_params['filter'])) {
+            $filter = '(&' . '(' . $this->_params['filter'] . ')' . $filter . ')';
+        }
+
+        /* Four11 (at least) doesn't seem to return 'cn' if you don't
+         * ask for 'sn' as well. Add 'sn' implicitly. */
+        $attr = $fields;
+        if (!in_array('sn', $attr)) {
+            $attr[] = 'sn';
+        }
+
+        /* Add a sizelimit, if specified. Default is 0, which means no
+         * limit.  Note: You cannot override a server-side limit with
+         * this. */
+        $sizelimit = 0;
+        if (!empty($this->_params['sizelimit'])) {
+            $sizelimit = $this->_params['sizelimit'];
+        }
+
+        /* Log the query at a DEBUG log level. */
+        Horde::logMessage(sprintf('LDAP query by Turba_Driver_ldap::_search(): user = %s, root = %s (%s); filter = "%s"; attributes = "%s"; deref = "%s"  ; sizelimit = %d',
+                                  Horde_Auth::getAuth(), $this->_params['root'], $this->_params['server'], $filter, implode(', ', $attr), $this->_params['deref'], $sizelimit),
+                          __FILE__, __LINE__, PEAR_LOG_DEBUG);
+
+        /* Send the query to the LDAP server and fetch the matching
+         * entries. */
+        if ($this->_params['scope'] == 'one') {
+            $func = 'ldap_list';
+        } else {
+            $func = 'ldap_search';
+        }
+
+        if (!($res = @$func($this->_ds, $this->_params['root'], $filter, $attr, 0, $sizelimit))) {
+            return PEAR::raiseError(sprintf(_("Query failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+        }
+
+        return $this->_getResults($fields, $res);
+    }
+
+    /**
+     * Reads the LDAP directory for a given element and returns
+     * the results.
+     *
+     * @param string $key    The primary key field to use.
+     * @param mixed $ids     The ids of the contacts to load.
+     * @param string $owner  Only return contacts owned by this user.
+     * @param array $fields  List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _read($key, $ids, $owner, $fields)
+    {
+        /* Only DN. */
+        if ($key != 'dn') {
+            return array();
+        }
+
+        $filter = $this->_buildObjectclassFilter();
+
+        /* Four11 (at least) doesn't seem to return 'cn' if you don't
+         * ask for 'sn' as well. Add 'sn' implicitly. */
+        $attr = $fields;
+        if (!in_array('sn', $attr)) {
+            $attr[] = 'sn';
+        }
+
+        /* Handle a request for multiple records. */
+        if (is_array($ids)) {
+            $results = array();
+            foreach ($ids as $d) {
+                $res = @ldap_read($this->_ds, Horde_String::convertCharset($d, Horde_Nls::getCharset(), $this->_params['charset']), $filter, $attr);
+                if ($res) {
+                    if (!is_a($result = $this->_getResults($fields, $res), 'PEAR_Error')) {
+                        $results = array_merge($results, $result);
+                    } else {
+                        return $result;
+                    }
+                } else {
+                    return PEAR::raiseError(sprintf(_("Read failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+                }
+            }
+            return $results;
+        }
+
+        $res = @ldap_read($this->_ds, Horde_String::convertCharset($ids, Horde_Nls::getCharset(), $this->_params['charset']), $filter, $attr);
+        if (!$res) {
+            return PEAR::raiseError(sprintf(_("Read failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+        }
+
+        return $this->_getResults($fields, $res);
+    }
+
+    /**
+     * Adds the specified entry to the LDAP directory.
+     *
+     * @param array $attributes  The initial attributes for the new object.
+     */
+    function _add($attributes)
+    {
+        if (empty($attributes['dn'])) {
+            return PEAR::raiseError('Tried to add an object with no dn: [' . serialize($attributes) . '].');
+        } elseif (empty($this->_params['objectclass'])) {
+            return PEAR::raiseError('Tried to add an object with no objectclass: [' . serialize($attributes) . '].');
+        }
+
+        /* Take the DN out of the attributes array. */
+        $dn = $attributes['dn'];
+        unset($attributes['dn']);
+
+        /* Put the objectClass into the attributes array. */
+        if (!is_array($this->_params['objectclass'])) {
+            $attributes['objectclass'] = $this->_params['objectclass'];
+        } else {
+            $i = 0;
+            foreach ($this->_params['objectclass'] as $objectclass) {
+                $attributes['objectclass'][$i] = $objectclass;
+                $i++;
+            }
+        }
+
+        /* Don't add empty attributes. */
+        $attributes = array_filter($attributes, array($this, '_emptyAttributeFilter'));
+
+        /* If a required attribute doesn't exist, add a dummy
+         * value. */
+        if (!empty($this->_params['checkrequired'])) {
+            $required = $this->_checkRequiredAttributes($this->_params['objectclass']);
+            if (is_a($required, 'PEAR_Error')) {
+                return $required;
+            }
+
+            foreach ($required as $k => $v) {
+                if (!isset($attributes[$v])) {
+                    $attributes[$v] = $this->_params['checkrequired_string'];
+                }
+            }
+        }
+
+        $this->_encodeAttributes($attributes);
+
+        if (!@ldap_add($this->_ds, Horde_String::convertCharset($dn, Horde_Nls::getCharset(), $this->_params['charset']), $attributes)) {
+            return PEAR::raiseError('Failed to add an object: [' . ldap_errno($this->_ds) . '] "' . ldap_error($this->_ds) . '" DN: ' . $dn . ' (attributes: [' . serialize($attributes) . ']).' . "Charset:" . Horde_Nls::getCharset());
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * Deletes the specified entry from the LDAP directory.
+     */
+    function _delete($object_key, $object_id)
+    {
+        if ($object_key != 'dn') {
+            return PEAR::raiseError(_("Invalid key specified."));
+        }
+
+        if (!@ldap_delete($this->_ds, Horde_String::convertCharset($object_id, Horde_Nls::getCharset(), $this->_params['charset']))) {
+            return PEAR::raiseError(sprintf(_("Delete failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * Modifies the specified entry in the LDAP directory.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _save($object_key, $object_id, $attributes)
+    {
+        /* Get the old entry so that we can access the old
+         * values. These are needed so that we can delete any
+         * attributes that have been removed by using ldap_mod_del. */
+        $filter = $this->_buildObjectclassFilter();
+        $oldres = @ldap_read($this->_ds, Horde_String::convertCharset($object_id, Horde_Nls::getCharset(), $this->_params['charset']), $filter, array_merge(array_keys($attributes), array('objectclass')));
+        $info = ldap_get_attributes($this->_ds, ldap_first_entry($this->_ds, $oldres));
+
+        if ($this->_params['version'] == 3 &&
+            Horde_String::lower(str_replace(array(',', '"'), array('\\2C', ''), $this->_makeKey($attributes))) !=
+            Horde_String::lower(str_replace(',', '\\2C', $object_id))) {
+            /* Need to rename the object. */
+            $newrdn = $this->_makeRDN($attributes);
+            if ($newrdn == '') {
+                return PEAR::raiseError(_("Missing DN in LDAP source configuration."));
+            }
+
+            if (ldap_rename($this->_ds, Horde_String::convertCharset($object_id, Horde_Nls::getCharset(), $this->_params['charset']),
+                            Horde_String::convertCharset($newrdn, Horde_Nls::getCharset(), $this->_params['charset']), $this->_params['root'], true)) {
+                $object_id = $newrdn . ',' . $this->_params['root'];
+            } else {
+                return PEAR::raiseError(sprintf(_("Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"),
+                                                ldap_errno($this->_ds), ldap_error($this->_ds), $object_id, $newrdn, $this->_params['root']));
+            }
+        }
+
+        /* Work only with lowercase keys. */
+        $info = array_change_key_case($info, CASE_LOWER);
+        $attributes = array_change_key_case($attributes, CASE_LOWER);
+
+        foreach ($info as $key => $value) {
+            $var = $info[$key];
+            $oldval = null;
+
+            /* Check to see if the old value and the new value are
+             * different and that the new value is empty. If so then
+             * we use ldap_mod_del to delete the attribute. */
+            if (isset($attributes[$key]) &&
+                ($var[0] != $attributes[$key]) &&
+                $attributes[$key] == '') {
+
+                $oldval[$key] = $var[0];
+                if (!@ldap_mod_del($this->_ds, Horde_String::convertCharset($object_id, Horde_Nls::getCharset(), $this->_params['charset']), $oldval)) {
+                    return PEAR::raiseError(sprintf(_("Modify failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+                }
+                unset($attributes[$key]);
+            }
+        }
+
+        unset($attributes[Horde_String::lower($object_key)]);
+        $this->_encodeAttributes($attributes);
+        $attributes = array_filter($attributes, array($this, '_emptyAttributeFilter'));
+
+        /* Modify objectclass if old one is outdated. */
+        $attributes['objectclass'] = array_unique(array_map('strtolower', array_merge($info['objectclass'], $this->_params['objectclass'])));
+        unset($attributes['objectclass']['count']);
+        $attributes['objectclass'] = array_values($attributes['objectclass']);
+
+        if (!@ldap_modify($this->_ds, Horde_String::convertCharset($object_id, Horde_Nls::getCharset(), $this->_params['charset']), $attributes)) {
+            return PEAR::raiseError(sprintf(_("Modify failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+        } else {
+            return $object_id;
+        }
+    }
+
+    /**
+     * Build a RDN based on a set of attributes and what attributes
+     * make a RDN for the current source.
+     *
+     * @param array $attributes The attributes (in driver keys) of the
+     *                          object being added.
+     *
+     * @return string  The RDN for the new object.
+     */
+    function _makeRDN($attributes)
+    {
+        if (!is_array($this->_params['dn'])) {
+            return '';
+        }
+
+        $pairs = array();
+        foreach ($this->_params['dn'] as $param) {
+            if (isset($attributes[$param])) {
+                $pairs[] = array($param, $attributes[$param]);
+            }
+        }
+        return $this->_quoteDN($pairs);
+    }
+
+    /**
+     * Build a DN based on a set of attributes and what attributes
+     * make a DN for the current source.
+     *
+     * @param array $attributes The attributes (in driver keys) of the
+     *                          object being added.
+     *
+     * @return string  The DN for the new object.
+     */
+    function _makeKey($attributes)
+    {
+        return $this->_makeRDN($attributes) . ',' . $this->_params['root'];
+    }
+
+    /**
+     * Build a piece of a search query.
+     *
+     * @param array  $criteria  The array of criteria.
+     *
+     * @return string  An LDAP query fragment.
+     */
+    function _buildSearchQuery($criteria)
+    {
+        $clause = '';
+        foreach ($criteria as $key => $vals) {
+            if (!empty($vals['OR'])) {
+                $clause .= '(|' . $this->_buildSearchQuery($vals) . ')';
+            } elseif (!empty($vals['AND'])) {
+                $clause .= '(&' . $this->_buildSearchQuery($vals) . ')';
+            } else {
+                if (isset($vals['field'])) {
+                    $rhs = Horde_String::convertCharset($vals['test'], Horde_Nls::getCharset(), $this->_params['charset']);
+                    $clause .= Horde_LDAP::buildClause($vals['field'], $vals['op'], $rhs, array('begin' => !empty($vals['begin'])));
+                } else {
+                    foreach ($vals as $test) {
+                        if (!empty($test['OR'])) {
+                            $clause .= '(|' . $this->_buildSearchQuery($test) . ')';
+                        } elseif (!empty($test['AND'])) {
+                            $clause .= '(&' . $this->_buildSearchQuery($test) . ')';
+                        } else {
+                            $rhs = Horde_String::convertCharset($test['test'], Horde_Nls::getCharset(), $this->_params['charset']);
+                            $clause .= Horde_LDAP::buildClause($test['field'], $test['op'], $rhs, array('begin' => !empty($vals['begin'])));
+                        }
+                    }
+                }
+            }
+        }
+
+        return $clause;
+    }
+
+    /**
+     * Get some results from a result identifier and clean them up.
+     *
+     * @param array    $fields  List of fields to return.
+     * @param resource $res     Result identifier.
+     *
+     * @return array  Hash containing the results.
+     */
+    function _getResults($fields, $res)
+    {
+        if (!($entries = @ldap_get_entries($this->_ds, $res))) {
+            return PEAR::raiseError(sprintf(_("Read failed: (%s) %s"), ldap_errno($this->_ds), ldap_error($this->_ds)));
+        }
+
+        /* Return only the requested fields (from $fields, above). */
+        $results = array();
+        for ($i = 0; $i < $entries['count']; $i++) {
+            $entry = $entries[$i];
+            $result = array();
+
+            foreach ($fields as $field) {
+                $field_l = Horde_String::lower($field);
+                if ($field == 'dn') {
+                    $result[$field] = Horde_String::convertCharset($entry[$field_l], $this->_params['charset']);
+                } else {
+                    $result[$field] = '';
+                    if (!empty($entry[$field_l])) {
+                        for ($j = 0; $j < $entry[$field_l]['count']; $j++) {
+                            if (!empty($result[$field])) {
+                                $result[$field] .= $this->_params['multiple_entry_separator'];
+                            }
+                            $result[$field] .= Horde_String::convertCharset($entry[$field_l][$j], $this->_params['charset']);
+                        }
+
+                        /* If schema checking is enabled check the
+                         * backend syntax. */
+                        if (!empty($this->_params['checksyntax'])) {
+                            $postal = $this->_isPostalAddress($field_l);
+                        } else {
+                            /* Otherwise rely on the attribute mapping
+                             * in attributes.php. */
+                            $attr = array_search($field_l, $this->map);
+                            $postal = (!empty($attr) && !empty($GLOBALS['attributes'][$attr]) &&
+                                       $GLOBALS['attributes'][$attr]['type'] == 'address');
+                        }
+                        if ($postal) {
+                            $result[$field] = str_replace('$', "\r\n", $result[$field]);
+                        }
+                    }
+                }
+            }
+
+            $results[] = $result;
+        }
+
+        return $results;
+    }
+
+    /**
+     * Remove empty attributes from attributes array.
+     *
+     * @param mixed $val    Value from attributes array.
+     *
+     * @return boolean         Boolean used by array_filter.
+     */
+    function _emptyAttributeFilter($var)
+    {
+        if (!is_array($var)) {
+            return ($var != '');
+        } else {
+            foreach ($var as $v) {
+                if ($v == '') {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    /**
+     * Format and encode attributes including postal addresses,
+     * character set encoding, etc.
+     */
+    function _encodeAttributes(&$attributes)
+    {
+        foreach ($attributes as $key => $val) {
+            /* If schema checking is enabled check the backend syntax. */
+            if (!empty($this->_params['checksyntax'])) {
+                $postal = $this->_isPostalAddress($key);
+            } else {
+                /* Otherwise rely on the attribute mapping in
+                 * attributes.php. */
+                $attr = array_search($key, $this->map);
+                $postal = (!empty($attr) && !empty($val) && !empty($GLOBALS['attributes'][$attr]) &&
+                           $GLOBALS['attributes'][$attr]['type'] == 'address');
+            }
+            if ($postal) {
+                /* Correctly store postal addresses. */
+                $val = str_replace(array("\r\n", "\r", "\n"), '$', $val);
+            }
+
+            if (!is_array($val)) {
+                $attributes[$key] = Horde_String::convertCharset($val, Horde_Nls::getCharset(), $this->_params['charset']);
+            }
+        }
+    }
+
+    /**
+     * Build an LDAP filter based on the objectclass parameter.
+     *
+     * @return string  An LDAP filter.
+     */
+    function _buildObjectclassFilter()
+    {
+        $filter = '';
+        if (!empty($this->_params['objectclass'])) {
+            if (!is_array($this->_params['objectclass'])) {
+                $filter = '(objectclass=' . $this->_params['objectclass'] . ')';
+            } else {
+                $filter = '(|';
+                foreach ($this->_params['objectclass'] as $objectclass) {
+                    $filter .= '(objectclass=' . $objectclass . ')';
+                }
+                $filter .= ')';
+            }
+        }
+        return $filter;
+    }
+
+    /**
+     * Returns a list of required attributes.
+     *
+     * @access private
+     *
+     * @param array $objectclasses  List of objectclasses that should be
+     *                              checked for required attributes.
+     *
+     * @return array  List of attribute names of the specified objectclasses
+     *                that have been configured as being required.
+     */
+    function _checkRequiredAttributes($objectclasses)
+    {
+       $schema = &$this->_getSchema();
+       if (is_a($schema, 'PEAR_Error')) {
+           return $schema;
+       }
+
+       $retval = array();
+
+       foreach ($objectclasses as $oc) {
+           if (Horde_String::lower($oc) == 'top') {
+               continue;
+           }
+
+           $required = $schema->must($oc);
+
+           if (is_array($required)) {
+               foreach ($required as $v) {
+                   if ($this->_isString($v)) {
+                       $retval[] = Horde_String::lower($v);
+                   }
+               }
+           }
+       }
+
+       return $retval;
+    }
+
+    /**
+     * Checks if an attribute refers to a string.
+     *
+     * @access private
+     *
+     * @param string $attribute  An attribute name.
+     *
+     * @return boolean  True if the specified attribute refers to a string.
+     */
+    function _isString($attribute)
+    {
+        $syntax = $this->_getSyntax($attribute);
+
+        /* Syntaxes we want to allow, i.e. no integers.
+         * Syntaxes have the form:
+         * 1.3.6.1.4.1.1466.115.121.1.$n{$y}
+         * ... where $n is the integer used below and $y is a sizelimit. */
+        $okSyntax = array(44 => 1, /* Printable string. */
+                          41 => 1, /* Postal address. */
+                          39 => 1, /* Other mailbox. */
+                          34 => 1, /* Name and optional UID. */
+                          26 => 1, /* IA5 string. */
+                          15 => 1, /* Directory string. */
+                          );
+
+        if (preg_match('/^(.*)\.(\d+)\{\d+\}$/', $syntax, $matches) &&
+            $matches[1] == "1.3.6.1.4.1.1466.115.121.1" &&
+            isset($okSyntax[$matches[2]])) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Checks if an attribute refers to a Postal Address.
+     *
+     * @access private
+     *
+     * @param string $attribute  An attribute name.
+     *
+     * @return boolean  True if the specified attribute refers to a Postal Address.
+     */
+    function _isPostalAddress($attribute)
+    {
+        /* LDAP postal address syntax is
+         * 1.3.6.1.4.1.1466.115.121.1.41 */
+        return $this->_getSyntax($attribute) == '1.3.6.1.4.1.1466.115.121.1.41';
+    }
+
+    /**
+     * Returns the syntax of an attribute, if necessary recursively.
+     *
+     * @access private
+     *
+     * @param string $att  Attribute name.
+     *
+     * @return string  Attribute syntax.
+     */
+    function _getSyntax($att)
+    {
+        $schema = &$this->_getSchema();
+        if (is_a($schema, 'PEAR_Error')) {
+            return $schema;
+        }
+
+        if (!isset($this->_syntaxCache[$att])) {
+            $attv = $schema->get('attribute', $att);
+            if (isset($attv['syntax'])) {
+                $this->_syntaxCache[$att] = $attv['syntax'];
+            } else {
+                $this->_syntaxCache[$att] = $this->_getSyntax($attv['sup'][0]);
+            }
+        }
+
+        return $this->_syntaxCache[$att];
+    }
+
+    /**
+     * Returns an LDAP_Schema object that containts the LDAP schema.
+     *
+     * @access private
+     *
+     * @return Net_LDAP_Schema  Returns a reference to the ldap schema object.
+     */
+    function &_getSchema()
+    {
+        static $_schema;
+
+        /* Check if the cached schema is valid, */
+        if (is_object($_schema) && is_a($_schema, 'Net_LDAP_Schema')) {
+            return $_schema;
+        }
+
+        $config = array('host' => $this->_params['server'],
+                        'port' => $this->_params['port']);
+        if (!class_exists('Net_LDAP')) {
+            return PEAR::raiseError(_('You must have the Net_LDAP PEAR library installed to use the schema check function.'));
+        }
+        $ldap = new Net_LDAP($config);
+        $ldap->_link = $this->_ds;
+
+        $_schema = $ldap->schema();
+
+        return $_schema;
+    }
+
+    /**
+     * Take an array of DN elements and properly quote it according to
+     * RFC 1485.
+     *
+     * @see Horde_LDAP::quoteDN()
+     *
+     * @param array $parts  An array of tuples containing the attribute
+     *                      name and that attribute's value which make
+     *                      up the DN. Example:
+     *
+     *    $parts = array(0 => array('cn', 'John Smith'),
+     *                   1 => array('dc', 'example'),
+     *                   2 => array('dc', 'com'));
+     *
+     * @return string  The properly quoted string DN.
+     */
+    function _quoteDN($parts)
+    {
+        $dn = '';
+        $count = count($parts);
+        for ($i = 0; $i < $count; $i++) {
+            if ($i > 0) {
+                $dn .= ',';
+            }
+            $dn .= $parts[$i][0] . '=';
+
+            /* See if we need to quote the value. */
+            if (preg_match('/^\s|\s$|\s\s|[,+="\r\n<>#;]/', $parts[$i][1])) {
+                $dn .= '"' . str_replace('"', '\\"', $parts[$i][1]) . '"';
+            } else {
+                $dn .= $parts[$i][1];
+            }
+        }
+
+        return $dn;
+    }
+
+}
diff --git a/turba/lib/Driver/Prefs.php b/turba/lib/Driver/Prefs.php
new file mode 100644 (file)
index 0000000..96a6fed
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Turba directory driver implementation for Horde Preferences - very simple,
+ * lightweight container.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+class Turba_Driver_Prefs extends Turba_Driver
+{
+    /**
+     */
+    function _init()
+    {
+        return true;
+    }
+
+    /**
+     * Returns all entries - searching isn't implemented here for now. The
+     * parameters are simply ignored.
+     *
+     * @param array $criteria  Array containing the search criteria.
+     * @param array $fields    List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        return array_values($this->_getAddressBook());
+    }
+
+    /**
+     * Reads the given data from the preferences and returns the result's
+     * fields.
+     *
+     * @param array $criteria  Search criteria.
+     * @param string $id       Data identifier.
+     * @param array $fields    List of fields to return.
+     *
+     * @return  Hash containing the search results.
+     */
+    function _read($criteria, $ids, $fields)
+    {
+        $book = $this->_getAddressBook();
+        $results = array();
+        if (!is_array($ids)) {
+            $ids = array($ids);
+        }
+        foreach ($ids as $id) {
+            if (isset($book[$id])) {
+                $results[] = $book[$id];
+            }
+        }
+
+        return $results;
+    }
+
+    /**
+     * Adds the specified object to the preferences.
+     */
+    function _add($attributes)
+    {
+        $book = $this->_getAddressBook();
+        $book[$attributes['id']] = $attributes;
+        $this->_setAddressbook($book);
+
+        return true;
+    }
+
+    /**
+     * Deletes the specified object from the preferences.
+     */
+    function _delete($object_key, $object_id)
+    {
+        $book = $this->_getAddressBook();
+        unset($book[$object_id]);
+        $this->_setAddressbook($book);
+
+        return true;
+    }
+
+    /**
+     * Saves the specified object in the preferences.
+     */
+    function _save($object_key, $object_id, $attributes)
+    {
+        $book = $this->_getAddressBook();
+        $book[$object_id] = $attributes;
+        $this->_setAddressBook($book);
+    }
+
+    function _getAddressBook()
+    {
+        global $prefs;
+
+        $val = $prefs->getValue('prefbooks');
+        if (!empty($val)) {
+            $prefbooks = unserialize($val);
+            return $prefbooks[$this->_params['name']];
+        } else {
+            return array();
+        }
+    }
+
+    function _setAddressBook($addressbook)
+    {
+        global $prefs;
+
+        $val = $prefs->getValue('prefbooks');
+        if (!empty($val)) {
+            $prefbooks = unserialize($val);
+        } else {
+            $prefbooks = array();
+        }
+
+        $prefbooks[$this->_params['name']] = $addressbook;
+        $prefs->setValue('prefbooks', serialize($prefbooks));
+        $prefs->store();
+    }
+
+}
diff --git a/turba/lib/Driver/Share.php b/turba/lib/Driver/Share.php
new file mode 100644 (file)
index 0000000..d26205f
--- /dev/null
@@ -0,0 +1,183 @@
+<?php
+/**
+ * The Turba_Driver:: class provides a common abstracted interface to the
+ * various directory search drivers.  It includes functions for searching,
+ * adding, removing, and modifying directory entries.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@csh.rit.edu>
+ * @package Turba
+ */
+class Turba_Driver_Share extends Turba_Driver
+{
+    /**
+     * Horde_Share object for this source.
+     *
+     * @var Horde_Share
+     */
+    var $_share;
+
+    /**
+     * Underlying driver object for this source.
+     *
+     * @var Turba_Driver
+     */
+    var $_driver;
+
+    /**
+     * Checks if this backend has a certain capability.
+     *
+     * @param string $capability  The capability to check for.
+     *
+     * @return boolean  Supported or not.
+     */
+    function hasCapability($capability)
+    {
+        return $this->_driver->hasCapability($capability);
+    }
+
+    /**
+     * Checks if the current user has the requested permissions on this
+     * address book.
+     *
+     * @param integer $perm  The permission to check for.
+     *
+     * @return boolean  True if the user has permission, otherwise false.
+     */
+    function hasPermission($perm)
+    {
+        return $this->_share->hasPermission(Horde_Auth::getAuth(), $perm);
+    }
+
+    /**
+     * Return the name of this address book.
+     *
+     * @string Address book name
+     */
+    function getName()
+    {
+        $share_parts = explode(':', $this->_share->getName());
+        return array_pop($share_parts);
+    }
+
+    /**
+     * Return the owner to use when searching or creating contacts in
+     * this address book.
+     *
+     * @return string
+     */
+    function _getContactOwner()
+    {
+        $params = @unserialize($this->_share->get('params'));
+        if (!empty($params['name'])) {
+            return $params['name'];
+        }
+        return PEAR::raiseError(_("Unable to find contact owner."));
+    }
+
+    /**
+     * Initialize
+     */
+    function _init()
+    {
+        $this->_share = &$this->_params['config']['params']['share'];
+        $this->_driver = &Turba_Driver::factory('_' . $this->name, $this->_params['config']);
+        if (is_a($this->_driver, 'PEAR_Error')) {
+            return $this->_driver;
+        }
+        $this->_driver->_contact_owner = $this->_getContactOwner();
+    }
+
+    /**
+     * Searches the address book with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty array,
+     * all records will be returned.
+     *
+     * @param array $criteria  Array containing the search criteria.
+     * @param array $fields    List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        return $this->_driver->_search($criteria, $fields);
+    }
+
+    /**
+     * Reads the given data from the address book and returns the
+     * results.
+     *
+     * @param string $key    The primary key field to use.
+     * @param mixed $ids     The ids of the contacts to load.
+     * @param string $owner  Only return contacts owned by this user.
+     * @param array $fields  List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _read($key, $ids, $owner, $fields, $blob_fields = array())
+    {
+        return $this->_driver->_read($key, $ids, $owner, $fields, $blob_fields);
+    }
+
+    /**
+     * Adds the specified object to the SQL database.
+     */
+    function _add($attributes, $blob_fields = array())
+    {
+        return $this->_driver->_add($attributes, $blob_fields);
+    }
+
+    /**
+     * Deletes the specified object from the SQL database.
+     */
+    function _delete($object_key, $object_id)
+    {
+        return $this->_driver->_delete($object_key, $object_id);
+    }
+
+    /**
+     * Deletes all contacts from a specific address book.
+     *
+     * @return boolean  True if the operation worked.
+     */
+    function _deleteAll($sourceName = null)
+    {
+        if (is_null($sourceName)) {
+            $sourceName = $this->getContactOwner();
+        }
+        return $this->_driver->_deleteAll($sourceName);
+    }
+
+    /**
+     * Saves the specified object in the SQL database.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _save($object_key, $object_id, $attributes, $blob_fields = array())
+    {
+        return $this->_driver->_save($object_key, $object_id, $attributes, $blob_fields);
+    }
+
+    /**
+     * Stub for removing all data for a specific user - to be overridden
+     * by child class.
+     */
+    function removeUserData($user)
+    {
+        $this->_deleteAll();
+        $GLOBALS['turba_shares']->removeShare($this->_share);
+        unset($this->_share);
+        return true;
+    }
+
+    function _makeKey($attributes)
+    {
+        return $this->_driver->_makeKey($attributes);
+    }
+
+    function _getTimeObjectTurbaList($start, $end, $field)
+    {
+        return $this->_driver->_getTimeObjectTurbaList($start, $end, $field);
+    }
+
+}
diff --git a/turba/lib/Driver/Sql.php b/turba/lib/Driver/Sql.php
new file mode 100644 (file)
index 0000000..ad98984
--- /dev/null
@@ -0,0 +1,593 @@
+<?php
+/**
+ * Turba directory driver implementation for PHP's PEAR database abstraction
+ * layer.
+ *
+ * @author  Jon Parise <jon@csh.rit.edu>
+ * @package Turba
+ */
+class Turba_Driver_Sql extends Turba_Driver
+{
+    /**
+     * What can this backend do?
+     *
+     * @var array
+     */
+    var $_capabilities = array(
+        'delete_all' => true,
+        'delete_addressbook' => true
+    );
+
+    /**
+     * Handle for the database connection.
+     *
+     * @var DB
+     */
+    var $_db;
+
+    /**
+     * Handle for the current database connection, used for writing. Defaults
+     * to the same handle as $_db if a separate write database is not required.
+     *
+     * @var DB
+     */
+    var $_write_db;
+
+    function _init()
+    {
+        $this->_write_db = &DB::connect($this->_params,
+                                        array('persistent' => !empty($this->_params['persistent']),
+                                              'ssl' => !empty($this->_params['ssl'])));
+        if (is_a($this->_write_db, 'PEAR_Error')) {
+            return $this->_write_db;
+        }
+
+        // Set DB portability options.
+        switch ($this->_write_db->phptype) {
+        case 'mssql':
+            $this->_write_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM);
+            break;
+        default:
+            $this->_write_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS);
+        }
+
+        if ($this->_params['phptype'] == 'oci8') {
+            $this->_write_db->query('ALTER SESSION SET NLS_DATE_FORMAT = \'YYYY-MM-DD\'');
+        }
+
+        /* Check if we need to set up the read DB connection
+         * seperately. */
+        if (!empty($this->_params['splitread'])) {
+            $params = array_merge($this->_params, $this->_params['read']);
+            $this->_db = &DB::connect($params,
+                                      array('persistent' => !empty($params['persistent']),
+                                            'ssl' => !empty($params['ssl'])));
+            if (is_a($this->_db, 'PEAR_Error')) {
+                return $this->_db;
+            }
+
+            // Set DB portability options.
+            switch ($this->_db->phptype) {
+            case 'mssql':
+                $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS | DB_PORTABILITY_RTRIM);
+                break;
+            default:
+                $this->_db->setOption('portability', DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_ERRORS);
+            }
+            if ($params['phptype'] == 'oci8') {
+                $this->_db->query('ALTER SESSION SET NLS_DATE_FORMAT = \'YYYY-MM-DD\'');
+            }
+        } else {
+            /* Default to the same DB handle for reads. */
+            $this->_db =& $this->_write_db;
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns the number of contacts of the current user in this address book.
+     *
+     * @return integer  The number of contacts that the user owns.
+     */
+    function count()
+    {
+        static $count = array();
+
+        $test = $this->getContactOwner();
+        if (!isset($count[$test])) {
+            /* Build up the full query. */
+            $query = 'SELECT COUNT(*) FROM ' . $this->_params['table'] .
+                     ' WHERE ' . $this->toDriver('__owner') . ' = ?';
+            $values = array($test);
+
+            /* Log the query at a DEBUG log level. */
+            Horde::logMessage('SQL query by Turba_Driver_sql::count(): ' . $query,
+                              __FILE__, __LINE__, PEAR_LOG_DEBUG);
+
+            /* Run query. */
+            $count[$test] = $this->_db->getOne($query, $values);
+        }
+
+        return $count[$test];
+    }
+
+    /**
+     * Searches the SQL database with the given criteria and returns a
+     * filtered list of results. If the criteria parameter is an empty array,
+     * all records will be returned.
+     *
+     * @param array $criteria      Array containing the search criteria.
+     * @param array $fields        List of fields to return.
+     * @param array $appendWhere   An additional where clause to append.
+     *                             Array should contain 'sql' and 'params'
+     *                             params are used as bind parameters.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields, $appendWhere = array())
+    {
+        /* Build the WHERE clause. */
+        $where = '';
+        $values = array();
+        if (count($criteria) || !empty($this->_params['filter'])) {
+            foreach ($criteria as $key => $vals) {
+                if ($key == 'OR' || $key == 'AND') {
+                    if (!empty($where)) {
+                        $where .= ' ' . $key . ' ';
+                    }
+                    $binds = $this->_buildSearchQuery($key, $vals);
+                    $where .= '(' . $binds[0] . ')';
+                    $values += $binds[1];
+                }
+            }
+            $where = ' WHERE ' . $where;
+            if (count($criteria) && !empty($this->_params['filter'])) {
+                $where .= ' AND ';
+            }
+            if (!empty($this->_params['filter'])) {
+                $where .= $this->_params['filter'];
+            }
+            if (count($appendWhere)) {
+                $where .= ' AND ' . $appendWhere['sql'];
+                $values = array_merge($values, $appendWhere['params']);
+            }
+        } elseif (count($appendWhere)) {
+            $where = ' WHERE ' . $appendWhere['sql'];
+            $values = array_merge($values, $appendWhere['params']);
+        }
+
+        /* Build up the full query. */
+        $query = 'SELECT ' . implode(', ', $fields) . ' FROM ' . $this->_params['table'] . $where;
+
+        /* Log the query at a DEBUG log level. */
+        Horde::logMessage('SQL query by Turba_Driver_sql::_search(): ' . $query,
+                          __FILE__, __LINE__, PEAR_LOG_DEBUG);
+
+        /* Run query. */
+        $result = $this->_db->query($query, $values);
+        if (is_a($result, 'PEAR_Error')) {
+            Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+            return $result;
+        }
+
+        $results = array();
+        $iMax = count($fields);
+        while ($row = $result->fetchRow()) {
+            if (is_a($row, 'PEAR_Error')) {
+                Horde::logMessage($row, __FILE__, __LINE__, PEAR_LOG_ERR);
+                return $result;
+            }
+
+            $row = $this->_convertFromDriver($row);
+
+            $entry = array();
+            for ($i = 0; $i < $iMax; $i++) {
+                $field = $fields[$i];
+                $entry[$field] = $row[$i];
+            }
+            $results[] = $entry;
+        }
+
+        return $results;
+    }
+
+    /**
+     * Reads the given data from the SQL database and returns the
+     * results.
+     *
+     * @param string $key    The primary key field to use.
+     * @param mixed $ids     The ids of the contacts to load.
+     * @param string $owner  Only return contacts owned by this user.
+     * @param array $fields  List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _read($key, $ids, $owner, $fields, $blob_fields = array())
+    {
+        $values = array();
+
+        $in = '';
+        if (is_array($ids)) {
+            if (!count($ids)) {
+                return array();
+            }
+
+            foreach ($ids as $id) {
+                $in .= empty($in) ? '?' : ', ?';
+                $values[] = $this->_convertToDriver($id);
+            }
+            $where = $key . ' IN (' . $in . ')';
+        } else {
+            $where = $key . ' = ?';
+            $values[] = $this->_convertToDriver($ids);
+        }
+        if (isset($this->map['__owner'])) {
+            $where .= ' AND ' . $this->map['__owner'] . ' = ?';
+            $values[] = $this->_convertToDriver($owner);
+        }
+        if (!empty($this->_params['filter'])) {
+            $where .= ' AND ' . $this->_params['filter'];
+        }
+
+        $query  = 'SELECT ' . implode(', ', $fields) . ' FROM '
+            . $this->_params['table'] . ' WHERE ' . $where;
+
+        /* Log the query at a DEBUG log level. */
+        Horde::logMessage('SQL query by Turba_Driver_sql::_read(): ' . $query,
+                          __FILE__, __LINE__, PEAR_LOG_DEBUG);
+
+        $result = $this->_db->getAll($query, $values);
+        if (is_a($result, 'PEAR_Error')) {
+            Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+            return $result;
+        }
+
+        $results = array();
+        $iMax = count($fields);
+        foreach ($result as $row) {
+            $entry = array();
+            for ($i = 0; $i < $iMax; $i++) {
+                $field = $fields[$i];
+                if (isset($blob_fields[$field])) {
+                    switch ($this->_db->dbsyntax) {
+                    case 'pgsql':
+                    case 'mssql':
+                        $entry[$field] = pack('H' . strlen($row[$i]), $row[$i]);
+                        break;
+                    default:
+                        $entry[$field] = $row[$i];
+                        break;
+                    }
+                } else {
+                    $entry[$field] = $this->_convertFromDriver($row[$i]);
+                }
+            }
+            $results[] = $entry;
+        }
+
+        return $results;
+    }
+
+    /**
+     * Adds the specified object to the SQL database.
+     */
+    function _add($attributes, $blob_fields = array())
+    {
+        $fields = $values = array();
+        foreach ($attributes as $field => $value) {
+            $fields[] = $field;
+            if (!empty($value) && isset($blob_fields[$field])) {
+                switch ($this->_write_db->dbsyntax) {
+                case 'mssql':
+                case 'pgsql':
+                    $values[] = bin2hex($value);
+                    break;
+                default:
+                    $values[] = $value;
+                }
+            } else {
+                $values[] = $this->_convertToDriver($value);
+            }
+        }
+        $query  = 'INSERT INTO ' . $this->_params['table']
+            . ' (' . implode(', ', $fields) . ')'
+            . ' VALUES (' . str_repeat('?, ', count($values) - 1) . '?)';
+
+        $result = $this->_write_db->query($query, $values);
+        if (is_a($result, 'PEAR_Error')) {
+            Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+            return $result;
+        }
+
+        return true;
+    }
+
+    /**
+     * Deletes the specified object from the SQL database.
+     */
+    function _delete($object_key, $object_id)
+    {
+        $query = 'DELETE FROM ' . $this->_params['table'] .
+                 ' WHERE ' . $object_key . ' = ?';
+        $values = array($object_id);
+
+        /* Log the query at a DEBUG log level. */
+        Horde::logMessage('SQL query by Turba_Driver_sql::_delete(): ' . $query,
+                          __FILE__, __LINE__, PEAR_LOG_DEBUG);
+
+        $result = $this->_write_db->query($query, $values);
+        if (is_a($result, 'PEAR_Error')) {
+            Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+            return $result;
+        }
+
+        return true;
+    }
+
+    /**
+     * Deletes all contacts from a specific address book.
+     *
+     * @return boolean  True if the operation worked.
+     */
+    function _deleteAll($sourceName = null)
+    {
+        if (!Horde_Auth::getAuth()) {
+            return PEAR::raiseError('permission denied');
+        }
+
+        $query = 'DELETE FROM ' . $this->_params['table'] . ' WHERE owner_id = ?';
+
+        if (empty($sourceName)) {
+            $values = array(Horde_Auth::getAuth());
+        } else {
+            $values = array($sourceName);
+        }
+
+        /* Log the query at a DEBUG log level. */
+        Horde::logMessage('SQL query by Turba_Driver_sql::_deleteAll(): ' . $query,
+                          __FILE__, __LINE__, PEAR_LOG_DEBUG);
+
+        return $this->_write_db->query($query, $values);
+    }
+
+    /**
+     * Saves the specified object in the SQL database.
+     *
+     * @return string  The object id, possibly updated.
+     */
+    function _save($object_key, $object_id, $attributes, $blob_fields = array())
+    {
+        $where = $object_key . ' = ?';
+        unset($attributes[$object_key]);
+
+        $fields = $values =  array();
+        foreach ($attributes as $field => $value) {
+            $fields[] = $field . ' = ?';
+            if (!empty($value) && isset($blob_fields[$field])) {
+                switch ($this->_write_db->dbsyntax) {
+                case 'mssql':
+                case 'pgsql':
+                    $values[] = bin2hex($value);
+                    break;
+                default:
+                    $values[] = $value;
+                }
+            } else {
+                $values[] = $this->_convertToDriver($value);
+            }
+        }
+
+        $values[] = $object_id;
+
+        $query  = 'UPDATE ' . $this->_params['table'] . ' SET ' . implode(', ', $fields) . ' ';
+        $query .= 'WHERE ' . $where;
+
+        /* Log the query at a DEBUG log level. */
+        Horde::logMessage('SQL query by Turba_Driver_sql::_save(): ' . $query,
+                          __FILE__, __LINE__, PEAR_LOG_DEBUG);
+
+        $result = $this->_write_db->query($query, $values);
+        if (is_a($result, 'PEAR_Error')) {
+            Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+            return $result;
+        }
+
+        return $object_id;
+    }
+
+    /**
+     * Creates an object key for a new object.
+     *
+     * @param array $attributes  The attributes (in driver keys) of the
+     *                           object being added.
+     *
+     * @return string  A unique ID for the new object.
+     */
+    function _makeKey($attributes)
+    {
+        return md5(uniqid(mt_rand(), true));
+    }
+
+    /**
+     * Builds a piece of a search query.
+     *
+     * @param string $glue      The glue to join the criteria (OR/AND).
+     * @param array  $criteria  The array of criteria.
+     *
+     * @return array  An SQL fragment and a list of values suitable for binding
+     *                as an array.
+     */
+    function _buildSearchQuery($glue, $criteria)
+    {
+        $clause = '';
+        $values = array();
+
+        foreach ($criteria as $key => $vals) {
+            if (!empty($vals['OR']) || !empty($vals['AND'])) {
+                if (!empty($clause)) {
+                    $clause .= ' ' . $glue . ' ';
+                }
+                $binds = $this->_buildSearchQuery(!empty($vals['OR']) ? 'OR' : 'AND', $vals);
+                $clause .= '(' . $binds[0] . ')';
+                $values = array_merge($values, $binds[1]);
+            } else {
+                if (isset($vals['field'])) {
+                    if (!empty($clause)) {
+                        $clause .= ' ' . $glue . ' ';
+                    }
+                    $rhs = $this->_convertToDriver($vals['test']);
+                    $binds = Horde_SQL::buildClause($this->_db, $vals['field'], $vals['op'], $rhs, true, array('begin' => !empty($vals['begin'])));
+                    if (is_array($binds)) {
+                        $clause .= $binds[0];
+                        $values = array_merge($values, $binds[1]);
+                    } else {
+                        $clause .= $binds;
+                    }
+                } else {
+                    foreach ($vals as $test) {
+                        if (!empty($test['OR']) || !empty($test['AND'])) {
+                            if (!empty($clause)) {
+                                $clause .= ' ' . $glue . ' ';
+                            }
+                            $binds = $this->_buildSearchQuery(!empty($vals['OR']) ? 'OR' : 'AND', $test);
+                            $clause .= '(' . $binds[0] . ')';
+                            $values = array_merge($values, $binds[1]);
+                        } else {
+                            if (!empty($clause)) {
+                                $clause .= ' ' . $key . ' ';
+                            }
+                            $rhs = $this->_convertToDriver($test['test']);
+                            if ($rhs == '' && $test['op'] == '=') {
+                                $clause .= '(' . Horde_SQL::buildClause($this->_db, $test['field'], '=', $rhs) . ' OR ' . $test['field'] . ' IS NULL)';
+                            } else {
+                                $binds = Horde_SQL::buildClause($this->_db, $test['field'], $test['op'], $rhs, true, array('begin' => !empty($test['begin'])));
+                                if (is_array($binds)) {
+                                    $clause .= $binds[0];
+                                    $values = array_merge($values, $binds[1]);
+                                } else {
+                                    $clause .= $binds;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return array($clause, $values);
+    }
+
+    /**
+     * Converts a value from the driver's charset to the default charset.
+     *
+     * @param mixed $value  A value to convert.
+     *
+     * @return mixed        The converted value.
+     */
+    function _convertFromDriver($value)
+    {
+        return Horde_String::convertCharset($value, $this->_params['charset']);
+    }
+
+    /**
+     * Converts a value from the default charset to the driver's charset.
+     *
+     * @param mixed $value  A value to convert.
+     *
+     * @return mixed        The converted value.
+     */
+    function _convertToDriver($value)
+    {
+        return Horde_String::convertCharset($value, Horde_Nls::getCharset(), $this->_params['charset']);
+    }
+
+    /**
+     * Remove all entries owned by the specified user.
+     *
+     * @param string $user  The user's data to remove.
+     *
+     * @return mixed True | PEAR_Error
+     */
+    function removeUserData($user)
+    {
+        // Make sure we are being called by an admin.
+        if (!Horde_Auth::isAdmin()) {
+            return PEAR::raiseError(_("Permission denied"));
+        }
+
+        return $this->_deleteAll($user);
+    }
+
+    /**
+     * Obtain Turba_List of items to get TimeObjects out of.
+     *
+     * @param Horde_Date $start  The starting date.
+     * @param Horde_Date $end    The ending date.
+     * @param string $field      The address book field containing the
+     *                           timeObject information (birthday, anniversary)
+     *
+     * @return mixed  A Tubra_List of objects || PEAR_Error
+     */
+    function _getTimeObjectTurbaList($start, $end, $field)
+    {
+        $t_object = $this->toDriver($field);
+        $criteria = $this->makesearch(
+            array('__owner' => $this->getContactOwner()),
+            'AND',
+            array($this->toDriver('__owner') => true),
+            false);
+
+        // Limit to entries that actually contain a birthday and that are in the
+        // date range we are looking for.
+        $criteria['AND'][] = array('field' => $t_object,
+                                   'op' => '<>',
+                                   'test' => '');
+
+        if ($start->year == $end->year) {
+            $start = sprintf('%02d-%02d', $start->month, $start->mday);
+            $end = sprintf('%02d-%02d', $end->month, $end->mday);
+            $where = array('sql' => $t_object . ' IS NOT NULL AND SUBSTR('
+                           . $t_object . ', 6, 5) BETWEEN ? AND ?',
+                           'params' => array($start, $end));
+        } else {
+            $months = array();
+            $diff = ($end->month + 12) - $start->month;
+            $newDate = new Horde_Date(array('month' => $start->month,
+                                            'mday' => $start->mday,
+                                            'year' => $start->year));
+            for ($i = 0; $i <= $diff; $i++) {
+                $months[] = sprintf('%02d', $newDate->month);
+                $newDate->month++;
+            }
+            $where = array('sql' => $t_object . ' IS NOT NULL AND SUBSTR('
+                           . $t_object . ', 6, 2) IN ('
+                           . str_repeat('?,', count($months) - 1) . '?)',
+                           'params' => $months);
+        }
+
+        $fields_pre = array('__key', '__type', '__owner', 'name',
+                            'birthday', 'category', 'anniversary');
+        $fields = array();
+        foreach ($fields_pre as $field) {
+            $result = $this->toDriver($field);
+            if (is_array($result)) {
+                foreach ($result as $composite_field) {
+                    $composite_result = $this->toDriver($composite_field);
+                    if ($composite_result) {
+                        $fields[] = $composite_result;
+                    }
+                }
+            } elseif ($result) {
+                $fields[] = $result;
+            }
+        }
+
+        $res = $this->_search($criteria, $fields, $where);
+        if (is_a($res, 'PEAR_Error')) {
+            return $res;
+        }
+        return $this->_toTurbaObjects($res);
+    }
+
+}
diff --git a/turba/lib/Driver/Vbook.php b/turba/lib/Driver/Vbook.php
new file mode 100644 (file)
index 0000000..6cc22d3
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+/**
+ * Turba directory driver implementation for virtual address books.
+ *
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author  Michael Rubinsky <mrubinsk@horde.org>
+ * @package Turba
+ */
+class Turba_Driver_Vbook extends Turba_Driver
+{
+    /**
+     * Search type for this virtual address book.
+     *
+     * @var string
+     */
+    var $searchType;
+
+    /**
+     * The search criteria that defines this virtual address book.
+     *
+     * @var array
+     */
+    var $searchCriteria;
+
+    /**
+     * Return the owner to use when searching or creating contacts in
+     * this address book.
+     *
+     * @return string
+     */
+    function _getContactOwner()
+    {
+        return $this->_driver->getContactOwner();
+    }
+
+    /**
+     * Deletes all contacts from an address book. Not implemented for
+     * virtual address books; just returns true so that the address
+     * book can be deleted.
+     *
+     * @return boolean  True
+     */
+    function deleteAll($sourceName = null)
+    {
+        return true;
+    }
+
+    /**
+     */
+    function _init()
+    {
+        /* Grab a reference to the share for this vbook. */
+        $this->_share = &$this->_params['share'];
+
+        /* Load the underlying driver. */
+        $this->_driver = &Turba_Driver::singleton($this->_params['source']);
+        if (is_a($this->_driver, 'PEAR_Error')) {
+            return $this->_driver;
+        }
+
+        if (!empty($this->_params['criteria'])) {
+            $this->searchCriteria = $this->_params['criteria'];
+        } else {
+            $this->searchCriteria = array();
+        }
+        $this->searchType = count($this->searchCriteria) > 1 ? 'advanced' : 'basic';
+
+        return true;
+    }
+
+    /**
+     * Return all entries matching the combined searches represented by
+     * $criteria and the vitural address book's search criteria.
+     *
+     * @param array $criteria  Array containing the search criteria.
+     * @param array $fields    List of fields to return
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _search($criteria, $fields)
+    {
+        /* Add the passed in search criteria to the vbook criteria
+         * (which need to be mapped from turba fields to
+         * driver-specific fields). */
+        $criteria['AND'][] = $this->makeSearch($this->searchCriteria, 'AND', array());
+
+        return $this->_driver->_search($criteria, $fields);
+    }
+
+    /**
+     * Reads the requested entries from the underlying source.
+     *
+     * @param string $key    The primary key field to use.
+     * @param mixed $ids     The ids of the contacts to load.
+     * @param string $owner  Only return contacts owned by this user.
+     * @param array $fields  List of fields to return.
+     *
+     * @return array  Hash containing the search results.
+     */
+    function _read($key, $ids, $owner, $fields)
+    {
+        return $this->_driver->_read($key, $ids, $owner, $fields);
+    }
+
+    /**
+     * Not supported for virtual address books.
+     */
+    function _add($attributes)
+    {
+        return PEAR::raiseError(_("You cannot add new contacts to a virtual address book"));
+    }
+
+    /**
+     * Not supported for virtual address books.
+     */
+    function _delete($object_key, $object_id)
+    {
+        return PEAR::raiseError(_("You cannot delete contacts from a virtual address book"));
+    }
+
+    /**
+     * Not supported for virtual address books.
+     */
+    function _save($object_key, $object_id, $attributes)
+    {
+        return PEAR::raiseError(_("You cannot add an entry to a virtual address book."));
+    }
+
+    /**
+     * Check to see if the currently logged in user has requested permissions.
+     * Note that virtual address books are always readonly
+     *
+     * @param integer $perm  The permissions to check against.
+     *
+     * @return boolean  True or False.
+     */
+    function hasPermission($perm)
+    {
+        if ($this->_share->hasPermission(Horde_Auth::getAuth(), $perm)) {
+            return $perm & (PERMS_SHOW | PERMS_READ);
+        }
+        return false;
+    }
+
+}
diff --git a/turba/lib/Forms/AddContact.php b/turba/lib/Forms/AddContact.php
new file mode 100644 (file)
index 0000000..5dbb1ea
--- /dev/null
@@ -0,0 +1,101 @@
+<?php
+/**
+ * @package Turba
+ */
+
+/** Turba_ContactForm */
+require_once dirname(__FILE__) . '/Contact.php';
+
+/**
+ * @package Turba
+ */
+class Turba_AddContactForm extends Turba_ContactForm {
+
+    var $_contact = null;
+
+    function Turba_AddContactForm(&$vars, &$contact)
+    {
+        global $addSources, $notification;
+
+        parent::Horde_Form($vars, _("Add Contact"));
+        $this->_contact = &$contact;
+
+        $this->setButtons(_("Add"));
+        $this->addHidden('', 'url', 'text', false);
+        $this->addHidden('', 'key', 'text', false);
+
+        /* Check if a source selection box is required. */
+        if (count($addSources) > 1) {
+            /* Multiple sources, show a selection box. */
+            $options = array();
+            foreach ($addSources as $key => $config) {
+                $options[$key] = $config['title'];
+            }
+            $v = &$this->addVariable(_("Choose an address book"), 'source', 'enum', true, false, null, array($options, true));
+            $action = Horde_Form_Action::factory('submit');
+            $v->setAction($action);
+            $v->setOption('trackchange', true);
+            if (is_null($vars->get('formname')) &&
+                $vars->get($v->getVarName()) != $vars->get('__old_' . $v->getVarName())) {
+                $notification->push(sprintf(_("Selected address book \"%s\"."), $addSources[$vars->get('source')]['title']), 'horde.message');
+            }
+        } else {
+            /* One source, no selection box but store the value in a
+             * hidden field. */
+            $this->addHidden('', 'source', 'text', true);
+        }
+
+        if ($this->_contact) {
+            parent::_addFields($this->_contact);
+        }
+    }
+
+    function validate()
+    {
+        if (!$this->_vars->get('source')) {
+            return false;
+        }
+        return parent::validate($this->_vars);
+    }
+
+    function execute()
+    {
+        global $driver, $notification;
+
+        /* Form valid, save data. */
+        $this->getInfo($this->_vars, $info);
+        $source = $info['source'];
+        foreach ($info['object'] as $info_key => $info_val) {
+            if ($GLOBALS['attributes'][$info_key]['type'] == 'image' && !empty($info_val['file'])) {
+                $this->_contact->setValue($info_key, file_get_contents($info_val['file']));
+                $this->_contact->setValue($info_key . 'type', $info_val['type']);
+            } else {
+                $this->_contact->setValue($info_key, $info_val);
+            }
+        }
+        $contact = $this->_contact->attributes;
+        unset($contact['__owner']);
+
+        /* Create Contact. */
+        $key = $driver->add($contact);
+        if (is_a($key, 'PEAR_Error')) {
+            Horde::logMessage($key, __FILE__, __LINE__, PEAR_LOG_ERR);
+        } else {
+            // Try 3 times to get the new entry. We retry to allow setups like
+            // LDAP replication to work.
+            for ($i = 0; $i < 3; $i++) {
+                $ob = $driver->getObject($key);
+                if (!is_a($ob, 'PEAR_Error')) {
+                    $notification->push(sprintf(_("%s added."), $ob->getValue('name')), 'horde.success');
+                    header('Location: ' . (!empty($info['url']) ? $info['url'] : $ob->url('Contact', true)));
+                    exit;
+                }
+                sleep(1);
+            }
+            Horde::logMessage($ob, __FILE__, __LINE__, PEAR_LOG_ERR);
+        }
+
+        $notification->push(_("There was an error adding the new contact. Contact your system administrator for further help."), 'horde.error');
+    }
+
+}
diff --git a/turba/lib/Forms/Contact.php b/turba/lib/Forms/Contact.php
new file mode 100644 (file)
index 0000000..a031eb8
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+/**
+ * @package Turba
+ */
+
+/** Horde_Form_Action */
+require_once 'Horde/Form/Action.php';
+
+/**
+ * @package Turba
+ */
+class Turba_ContactForm extends Horde_Form {
+
+    function Turba_ContactForm(&$vars, &$contact)
+    {
+        global $conf, $notification;
+
+        parent::Horde_Form($vars, '', 'Turba_View_Contact');
+
+        /* Get the values through the Turba_Object class. */
+        $object = array();
+        foreach ($contact->driver->getCriteria() as $info_key => $info_val) {
+            $object[$info_key] = $contact->getValue($info_key);
+        }
+        $vars->set('object', $object);
+
+        $this->_addFields($contact);
+
+        /* List files. */
+        $v_params = Horde::getVFSConfig('documents');
+        if ($v_params['type'] != 'none') {
+            $files = $contact->listFiles();
+            if (is_a($files, 'PEAR_Error')) {
+                $notification->push($files, 'horde.error');
+            } else {
+                $this->addVariable(_("Files"), '__vfs', 'html', false);
+                $vars->set('__vfs', implode('<br />', array_map(array($contact, 'vfsEditUrl'), $files)));
+            }
+        }
+    }
+
+    /**
+     * Set up the Horde_Form fields for $contact's attributes.
+     */
+    function _addFields($contact)
+    {
+        global $attributes;
+
+        // Run through once to see what form actions, if any, we need
+        // to set up.
+        $actions = array();
+        $map = $contact->driver->map;
+        $fields = array_keys($contact->driver->getCriteria());
+        foreach ($fields as $field) {
+            if (is_array($map[$field])) {
+                foreach ($map[$field]['fields'] as $action_field) {
+                    if (!isset($actions[$action_field])) {
+                        $actions[$action_field] = array();
+                    }
+                    $actions[$action_field]['fields'] = $map[$field]['fields'];
+                    $actions[$action_field]['format'] = $map[$field]['format'];
+                    $actions[$action_field]['target'] = $field;
+                }
+            }
+        }
+
+        // Now run through and add the form variables.
+        $tabs = $contact->driver->tabs;
+        if (!count($tabs)) {
+            $tabs = array('' => $fields);
+        }
+        foreach ($tabs as $tab => $tab_fields) {
+            if (!empty($tab)) {
+                $this->setSection($tab, $tab);
+            }
+            foreach ($tab_fields as $field) {
+                if (!in_array($field, $fields) ||
+                    !isset($attributes[$field])) {
+                    continue;
+                }
+
+                $attribute = $attributes[$field];
+                $params = isset($attribute['params']) ? $attribute['params'] : array();
+                $desc = isset($attribute['desc']) ? $attribute['desc'] : null;
+
+                if (is_array($map[$field])) {
+                    $v = &$this->addVariable($attribute['label'], 'object[' . $field . ']', $attribute['type'], false, false, $desc, $params);
+                    $v->disable();
+                } else {
+                    $readonly = isset($attribute['readonly']) ? $attribute['readonly'] : null;
+                    $v = &$this->addVariable($attribute['label'], 'object[' . $field . ']', $attribute['type'], $attribute['required'], $readonly, $desc, $params);
+
+                    if (!empty($actions[$field])) {
+                        $actionfields = array();
+                        foreach ($actions[$field]['fields'] as $f) {
+                            $actionfields[] = 'object[' . $f . ']';
+                        }
+                        $a = Horde_Form_Action::factory('updatefield',
+                                                        array('format' => $actions[$field]['format'],
+                                                              'target' => 'object[' . $actions[$field]['target'] . ']',
+                                                              'fields' => $actionfields));
+                        $v->setAction($a);
+                    }
+                }
+
+                if (isset($attribute['default'])) {
+                    $v->setDefault($attribute['default']);
+                }
+            }
+        }
+    }
+
+}
diff --git a/turba/lib/Forms/CreateAddressBook.php b/turba/lib/Forms/CreateAddressBook.php
new file mode 100644 (file)
index 0000000..bec1b42
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Horde_Form for creating address books.
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @package Turba
+ */
+
+/** Horde_Form_Renderer */
+require_once 'Horde/Form/Renderer.php';
+
+/**
+ * The Turba_CreateAddressBookForm class provides the form for
+ * creating an address book.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+class Turba_CreateAddressBookForm extends Horde_Form {
+
+    function Turba_CreateAddressBookForm(&$vars)
+    {
+        parent::Horde_Form($vars, _("Create Address Book"));
+
+        $this->addVariable(_("Name"), 'name', 'text', true);
+        $this->addVariable(_("Description"), 'description', 'longtext', false, false, null, array(4, 60));
+
+        $this->setButtons(array(_("Create")));
+    }
+
+    function execute()
+    {
+        // Need a clean cfgSources array
+        include TURBA_BASE . '/config/sources.php';
+
+        $driver = Turba_Driver::singleton($cfgSources[$GLOBALS['conf']['shares']['source']]);
+        if (is_a($driver, 'PEAR_Error')) {
+            return $driver;
+        }
+
+        $params = array(
+            'params' => array('source' => $GLOBALS['conf']['shares']['source']),
+            'name' => $this->_vars->get('name'),
+            'desc' => $this->_vars->get('description'),
+        );
+        return $driver->createShare(md5(mt_rand()), $params);
+    }
+
+}
diff --git a/turba/lib/Forms/DeleteAddressBook.php b/turba/lib/Forms/DeleteAddressBook.php
new file mode 100644 (file)
index 0000000..e4257ef
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+/**
+ * Horde_Form for deleting address books.
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @package Turba
+ */
+
+/** Horde_Form_Renderer */
+require_once 'Horde/Form/Renderer.php';
+
+/**
+ * The Turba_DeleteAddressbookForm class provides the form for
+ * deleting an address book.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+class Turba_DeleteAddressBookForm extends Horde_Form {
+
+    /**
+     * Address book being deleted
+     */
+    var $_addressbook;
+
+    function Turba_DeleteAddressBookForm(&$vars, &$addressbook)
+    {
+        $this->_addressbook = &$addressbook;
+        parent::Horde_Form($vars, sprintf(_("Delete %s"), $addressbook->get('name')));
+
+        $this->addHidden('', 'a', 'text', true);
+        $this->addVariable(sprintf(_("Really delete the address book \"%s\"? This cannot be undone and all contacts in this address book will be permanently removed."), $this->_addressbook->get('name')), 'desc', 'description', false);
+
+        $this->setButtons(array(_("Delete"), _("Cancel")));
+    }
+
+    /**
+     * @TODO Remove share from 'addressbooks' pref
+     */
+    function execute()
+    {
+        // If cancel was clicked, return false.
+        if ($this->_vars->get('submitbutton') == _("Cancel")) {
+            return false;
+        }
+
+        if ($this->_addressbook->get('owner') != Horde_Auth::getAuth()) {
+            return PEAR::raiseError(_("You do not have permissions to delete this address book."));
+        }
+
+        $driver = &Turba_Driver::singleton($this->_addressbook->getName());
+        if (is_a($driver, 'PEAR_Error')) {
+            return $driver;
+        }
+
+        // We have a Turba_Driver, try to delete the address book.
+        $result = $driver->deleteAll();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        // Address book successfully deleted from backend, remove the
+        // share.
+        $result = $GLOBALS['turba_shares']->removeShare($this->_addressbook);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        if (isset($_SESSION['turba']['source']) && $_SESSION['turba']['source'] == Horde_Util::getFormData('deleteshare')) {
+            unset($_SESSION['turba']['source']);
+        }
+
+        $abooks = explode("\n", $GLOBALS['prefs']->getValue('addressbooks'));
+        if (($pos = array_search($this->_addressbook->getName(), $abooks)) !== false) {
+            unset($abooks[$pos]);
+            $GLOBALS['prefs']->setValue('addressbooks', implode("\n", $abooks));
+        }
+
+        return true;
+    }
+
+}
diff --git a/turba/lib/Forms/EditAddressBook.php b/turba/lib/Forms/EditAddressBook.php
new file mode 100644 (file)
index 0000000..79ac2ab
--- /dev/null
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Horde_Form for editing address books.
+ *
+ * See the enclosed file LICENSE for license information (ASL). If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @package Turba
+ */
+
+/** Horde_Form_Renderer */
+require_once 'Horde/Form/Renderer.php';
+
+/**
+ * The Turba_EditAddressBookForm class provides the form for
+ * editing an address book.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+class Turba_EditAddressBookForm extends Horde_Form {
+
+    /**
+     * Address book being edited
+     */
+    var $_addressbook;
+
+    function Turba_EditAddressBookForm(&$vars, &$addressbook)
+    {
+        $this->_addressbook = &$addressbook;
+        parent::Horde_Form($vars, sprintf(_("Edit %s"), $addressbook->get('name')));
+
+        $this->addHidden('', 'a', 'text', true);
+        $this->addVariable(_("Name"), 'name', 'text', true);
+        $this->addVariable(_("Description"), 'description', 'longtext', false, false, null, array(4, 60));
+
+        $this->setButtons(array(_("Save")));
+    }
+
+    function execute()
+    {
+        $this->_addressbook->set('name', $this->_vars->get('name'));
+        $this->_addressbook->set('desc', $this->_vars->get('description'));
+        $result = $this->_addressbook->save();
+        if (is_a($result, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Unable to save address book \"%s\": %s"), $id, $result->getMessage()));
+        }
+        return true;
+    }
+
+}
diff --git a/turba/lib/Forms/EditContact.php b/turba/lib/Forms/EditContact.php
new file mode 100644 (file)
index 0000000..f3d242b
--- /dev/null
@@ -0,0 +1,193 @@
+<?php
+/**
+ * @package Turba
+ */
+
+/** Turba_ContactForm */
+require_once dirname(__FILE__) . '/Contact.php';
+
+/**
+ * @package Turba
+ */
+class Turba_EditContactForm extends Turba_ContactForm {
+
+    var $_source;
+    var $_contact;
+
+    function Turba_EditContactForm(&$vars, &$contact)
+    {
+        global $conf;
+
+        parent::Horde_Form($vars, '', 'Turba_View_EditContact');
+        $this->_contact = &$contact;
+
+        $this->setButtons(_("Save"));
+        $this->addHidden('', 'url', 'text', false);
+        $this->addHidden('', 'source', 'text', true);
+        $this->addHidden('', 'key', 'text', false);
+
+        parent::_addFields($this->_contact);
+
+        if ($conf['documents']['type'] != 'none') {
+            $this->addVariable(_("Add file"), 'vfs', 'file', false);
+        }
+
+        $object_values = $vars->get('object');
+        $object_keys = array_keys($contact->attributes);
+        foreach ($object_keys as $info_key) {
+            if (!isset($object_values[$info_key])) {
+                $object_values[$info_key] = $contact->getValue($info_key);
+            }
+        }
+        $vars->set('object', $object_values);
+        $vars->set('source', $contact->getSource());
+    }
+
+    function getSource()
+    {
+        return $this->_source;
+    }
+
+    function execute()
+    {
+        global $conf, $notification;
+
+        if (!$this->validate($this->_vars)) {
+            return PEAR::raiseError('Invalid');
+        }
+
+        /* Form valid, save data. */
+        $this->getInfo($this->_vars, $info);
+
+        /* Update the contact. */
+        foreach ($info['object'] as $info_key => $info_val) {
+            if ($info_key != '__key') {
+                if ($GLOBALS['attributes'][$info_key]['type'] == 'image' && !empty($info_val['file'])) {
+                    $this->_contact->setValue($info_key, file_get_contents($info_val['file']));
+                    if (isset($info_val['type'])) {
+                        $this->_contact->setValue($info_key . 'type', $info_val['type']);
+                    }
+                } else {
+                    $this->_contact->setValue($info_key, $info_val);
+                }
+            }
+        }
+
+        $result = $this->_contact->store();
+        if (!is_a($result, 'PEAR_Error')) {
+            if ($conf['documents']['type'] != 'none' && isset($info['vfs'])) {
+                $result = $this->_contact->addFile($info['vfs']);
+                if (is_a($result, 'PEAR_Error')) {
+                    $notification->push(sprintf(_("\"%s\" updated, but saving the uploaded file failed: %s"), $this->_contact->getValue('name'), $result->getMessage()), 'horde.warning');
+                } else {
+                    $notification->push(sprintf(_("\"%s\" updated."), $this->_contact->getValue('name')), 'horde.success');
+                }
+            } else {
+                $notification->push(sprintf(_("\"%s\" updated."), $this->_contact->getValue('name')), 'horde.success');
+            }
+            return true;
+        } else {
+            Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+            $notification->push(_("There was an error saving the contact. Contact your system administrator for further help."), 'horde.error');
+            return $result;
+        }
+    }
+
+}
+
+/**
+ * @package Turba
+ */
+class Turba_EditContactGroupForm extends Turba_EditContactForm {
+
+    function Turba_EditContactGroupForm(&$vars, &$contact)
+    {
+        $this->addHidden('', 'objectkeys', 'text', false);
+        $this->addHidden('', 'original_source', 'text', false);
+        $this->addHidden('', 'actionID', 'text', false);
+
+        parent::Turba_EditContactForm($vars, $contact);
+        $vars->set('actionID', 'groupedit');
+
+        $objectkeys = $vars->get('objectkeys');
+        $source = $vars->get('source');
+        $key = $vars->get('key');
+        if ($source . ':' . $key == $objectkeys[0]) {
+            /* First contact */
+            $this->setButtons(_("Next"));
+        } elseif ($source . ':' . $key == $objectkeys[count($objectkeys) - 1]) {
+            /* Last contact */
+            $this->setButtons(_("Previous"));
+        } else {
+            /* In between */
+            $this->setButtons(_("Previous"));
+            $this->appendButtons(_("Next"));
+        }
+        $this->appendButtons(_("Finish"));
+    }
+
+    function renderActive($renderer, &$vars, $action, $method)
+    {
+        parent::renderActive($renderer, $vars, $action, $method);
+
+        /* Read the columns to display from the preferences. */
+        $source = $vars->get('source');
+        $sources = Turba::getColumns();
+        $columns = isset($sources[$source]) ? $sources[$source] : array();
+
+        require_once TURBA_BASE . '/lib/List.php';
+        require_once TURBA_BASE . '/lib/ListView.php';
+        $results = new Turba_List($vars->get('objectkeys'));
+        $listView = new Turba_ListView($results, array('Group' => true), $columns);
+        echo '<br />' . $listView->getPage($numDisplayed);
+    }
+
+    function execute()
+    {
+        $result = parent::execute();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $this->getInfo($this->_vars, $info);
+
+        $next_page = Horde::applicationUrl('edit.php', true);
+        $next_page = Horde_Util::addParameter($next_page,
+                                        array('source' => $info['source'],
+                                              'original_source' => $info['original_source'],
+                                              'objectkeys' => $info['objectkeys'],
+                                              'url' => $info['url'],
+                                              'actionID' => 'groupedit'),
+                                        null, false);
+        $objectkey = array_search($info['source'] . ':' . $info['key'], $info['objectkeys']);
+
+        $submitbutton = $this->_vars->get('submitbutton');
+        if ($submitbutton == _("Finish")) {
+            $next_page = Horde::url('browse.php', true);
+            if ($info['original_source'] == '**search') {
+                $next_page = Horde_Util::addParameter($next_page, 'key', $info['original_source'], false);
+            } else {
+                $next_page = Horde_Util::addParameter($next_page, 'source', $info['original_source'], false);
+            }
+        } elseif ($submitbutton == _("Previous") && $info['source'] . ':' . $info['key'] != $info['objectkeys'][0]) {
+            /* Previous contact */
+            list(, $previous_key) = explode(':', $info['objectkeys'][$objectkey - 1]);
+            $next_page = Horde_Util::addParameter($next_page, 'key', $previous_key, false);
+            if ($this->getOpenSection()) {
+                $next_page = Horde_Util::addParameter($next_page, '__formOpenSection', $this->getOpenSection(), false);
+            }
+        } elseif ($submitbutton == _("Next") &&
+                  $info['source'] . ':' . $info['key'] != $info['objectkeys'][count($info['objectkeys']) - 1]) {
+            /* Next contact */
+            list(, $next_key) = explode(':', $info['objectkeys'][$objectkey + 1]);
+            $next_page = Horde_Util::addParameter($next_page, 'key', $next_key, false);
+            if ($this->getOpenSection()) {
+                $next_page = Horde_Util::addParameter($next_page, '__formOpenSection', $this->getOpenSection(), false);
+            }
+        }
+
+        header('Location: ' . $next_page);
+        exit;
+    }
+
+}
diff --git a/turba/lib/List.php b/turba/lib/List.php
new file mode 100644 (file)
index 0000000..c4af36f
--- /dev/null
@@ -0,0 +1,193 @@
+<?php
+/**
+ * The Turba_List:: class provides an interface for dealing with a
+ * list of Turba_Objects.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@csh.rit.edu>
+ * @package Turba
+ */
+class Turba_List {
+
+    /**
+     * The array containing the Turba_Objects represented in this list.
+     *
+     * @var array
+     */
+    var $objects = array();
+
+    /**
+     * The field to compare objects by.
+     *
+     * @var string
+     */
+    var $_usortCriteria;
+
+    /**
+     * Constructor.
+     */
+    function Turba_List($ids = array())
+    {
+        if ($ids) {
+            foreach ($ids as $value) {
+                list($source, $key) = explode(':', $value);
+                $driver = Turba_Driver::singleton($source);
+                if (is_a($driver, 'Turba_Driver')) {
+                    $this->insert($driver->getObject($key));
+                }
+            }
+        }
+    }
+
+    /**
+     * Inserts a new object into the list.
+     *
+     * @param Turba_Object $object  The object to insert.
+     */
+    function insert($object)
+    {
+        if (is_a($object, 'Turba_Object')) {
+            $key = $object->getSource() . ':' . $object->getValue('__key');
+            if (!isset($this->objects[$key])) {
+                $this->objects[$key] = $object;
+            }
+        }
+    }
+
+    /**
+     * Resets our internal pointer to the beginning of the list. Use this to
+     * hide the internal storage (array, list, etc.) from client objects.
+     *
+     * @return Turba_Object  The next object in the list.
+     */
+    function reset()
+    {
+        return reset($this->objects);
+    }
+
+    /**
+     * Returns the next Turba_Object in the list. Use this to hide internal
+     * implementation details from client objects.
+     *
+     * @return Turba_Object  The next object in the list.
+     */
+    function next()
+    {
+        list(,$tmp) = each($this->objects);
+        return $tmp;
+    }
+
+    /**
+     * Returns the number of Turba_Objects that are in the list. Use this to
+     * hide internal implementation details from client objects.
+     *
+     * @return integer  The number of objects in the list.
+     */
+    function count()
+    {
+        return count($this->objects);
+    }
+
+    /**
+     * Filters/Sorts the list based on the specified sort routine.
+     * The default sort order is by last name, ascending.
+     *
+     * @param $order  Array of hashes describing sort fields.  Each hash has
+     *                the following fields:
+     *                'field'      =>  String sort field
+     *                'ascending'  =>  Boolean indicating sort direction
+     */
+    function sort($order = null)
+    {
+        if (!$order) {
+            $order = array(array('field' => 'lastname', 'ascending' => true));
+        }
+
+        $need_lastname = false;
+        $last_first = $GLOBALS['prefs']->getValue('name_format') == 'last_first';
+        foreach (array_keys($order) as $key) {
+            if ($last_first && $order[$key]['field'] == 'name') {
+                $order[$key]['field'] = 'lastname';
+            }
+            if ($order[$key]['field'] == 'lastname') {
+                $order[$key]['field'] = '__lastname';
+                $need_lastname = true;
+                break;
+            }
+        }
+
+        if (!$need_lastname) {
+            $sorted_objects = $this->objects;
+        } else {
+            $sorted_objects = array();
+            foreach ($this->objects as $key => $object) {
+                $lastname = $object->getValue('lastname');
+                if (!$lastname) {
+                    $lastname = Turba::guessLastname($object->getValue('name'));
+                }
+                $object->setValue('__lastname', $lastname);
+                $sorted_objects[$key] = $object;
+            }
+        }
+
+        $this->_usortCriteria = $order;
+        usort($sorted_objects, array($this, 'cmp'));
+        $this->objects = $sorted_objects;
+    }
+
+    /**
+     * Usort helper function.
+     *
+     * Compares two Turba_Objects based on the member variable
+     * $_usortCriteria, taking care to sort numerically if it is an integer
+     * field.
+     *
+     * @param Turba_Object $a  The first Turba_Object to compare.
+     * @param Turba_Object $b  The second Turba_Object to compare.
+     *
+     * @return integer  Comparison of the two field values.
+     */
+    function cmp($a, $b)
+    {
+        foreach ($this->_usortCriteria as $field) {
+            // Set the comparison type based on the type of attribute we're
+            // sorting by.
+            $usortType = 'text';
+            if (isset($attributes[$field['field']])) {
+                if (!empty($attributes[$field['field']]['cmptype'])) {
+                    $usortType = $attributes[$field['field']]['cmptype'];
+                } elseif ($attributes[$field['field']]['type'] == 'int' ||
+                          $attributes[$field['field']]['type'] == 'intlist'||
+                          $attributes[$field['field']]['type'] == 'number') {
+                    $usortType = 'int';
+                }
+            }
+
+            $method = 'cmp_' . $usortType;
+            $result = $this->$method($a->getValue($field['field']),
+                                     $b->getValue($field['field']));
+            if (!$field['ascending']) {
+                $result = -$result;
+            }
+            if ($result != 0) {
+                return $result;
+            }
+        }
+        return 0;
+    }
+
+    function cmp_text($a, $b)
+    {
+        $acmp = Horde_String::lower($a, true);
+        $bcmp = Horde_String::lower($b, true);
+
+        // Use strcoll for locale-safe comparisons.
+        return strcoll($acmp, $bcmp);
+    }
+
+    function cmp_int($a, $b)
+    {
+        return ($a > $b) ? 1 : -1;
+    }
+
+}
diff --git a/turba/lib/ListView.php b/turba/lib/ListView.php
new file mode 100644 (file)
index 0000000..157db8d
--- /dev/null
@@ -0,0 +1,497 @@
+<?php
+/**
+ * The Turba_ListView:: class provides an interface for objects that
+ * visualize Turba_lists.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@csh.rit.edu>
+ * @package Turba
+ */
+class Turba_ListView {
+
+    /**
+     * The Turba_List object that we are visualizing.
+     *
+     * @var Turba_List
+     */
+    var $list;
+
+    /**
+     * Show/hide "mark" column in the display.
+     *
+     * @var boolean
+     */
+    var $showMark = false;
+
+    /**
+     * Show/hide "edit" column in the display.
+     *
+     * @var boolean
+     */
+    var $showEdit = false;
+
+    /**
+     * Show/hide "vcard" column in the display.
+     *
+     * @var boolean
+     */
+    var $showVcard = false;
+
+    /**
+     * Show/hide "group" column in the display.
+     *
+     * @var boolean
+     */
+    var $showGroup = false;
+
+    /**
+     * Show/hide "sort" column in the display.
+     *
+     * @var boolean
+     */
+    var $showSort = false;
+
+    /**
+     * Type of list.
+     *
+     * @var string
+     */
+    var $type;
+
+    /**
+     * The HTML renderer.
+     *
+     * @var Horde_UI_VarRenderer_html
+     */
+    var $renderer;
+
+    /**
+     * A Horde_Variables object.
+     *
+     * @var Horde_Variables
+     */
+    var $vars;
+
+    /**
+     * A list of Horde_Form_Variable objects.
+     *
+     * @var array
+     */
+    var $variables = array();
+
+    /**
+     * A dummy form object.
+     *
+     * @var Horde_Form
+     */
+    var $form = null;
+
+    /**
+     * Which columns to render
+     *
+     * @var array
+     */
+    var $columns;
+
+    /**
+     * Constructs a new Turba_ListView object.
+     *
+     * @param Turba_List $list  List of contacts to display.
+     * @param array $controls   Which icons to display
+     * @param array $columns    The list of columns to display
+     */
+    function Turba_ListView(&$list, $controls = null, $columns = null)
+    {
+        if ($controls === null) {
+            $controls = array('Mark' => true,
+                              'Edit' => true,
+                              'Vcard' => true,
+                              'Group' => true,
+                              'Sort' => true);
+        }
+        $this->columns = $columns;
+
+        $this->list = &$list;
+        $this->setControls($controls);
+
+        $this->renderer = Horde_UI_VarRenderer::factory('html');
+        $this->vars = new Horde_Variables();
+    }
+
+    /**
+     * Set which controls are shown by the display templates.
+     *
+     * @param array $controls
+     */
+    function setControls($controls)
+    {
+        foreach ($controls as $control => $show) {
+            $key = 'show' . $control;
+            $this->$key = (bool)$show;
+        }
+    }
+
+    function setType($type)
+    {
+        $this->type = $type;
+    }
+
+    function getType()
+    {
+        return $this->type;
+    }
+
+    /**
+     * Returns the number of Turba_Objects that are in the list. Use this to
+     * hide internal implementation details from client objects.
+     *
+     * @return integer  The number of objects in the list.
+     */
+    function count()
+    {
+        return $this->list->count();
+    }
+
+    function display()
+    {
+        global $prefs, $default_source, $copymove_source_options;
+
+        $driver = Turba_Driver::singleton($default_source);
+        $hasDelete = false;
+        $hasEdit = false;
+        $hasExport = false;
+        if (!is_a($driver, 'PEAR_Error')) {
+            if ($driver->hasPermission(PERMS_DELETE)) {
+                $hasDelete = true;
+            }
+            if ($driver->hasPermission(PERMS_EDIT)) {
+                $hasEdit = true;
+            }
+            if ($GLOBALS['conf']['menu']['import_export']
+                && !empty($GLOBALS['cfgSources'][$default_source]['export'])) {
+                $hasExport = true;
+            }
+        }
+        list($addToList, $addToListSources) = $this->getAddSources();
+
+        $viewurl = urldecode(Horde_Util::addParameter(
+            'browse.php',
+            array('key' => Horde_Util::getFormData('key'),
+                  'url' => Horde::selfUrl(true, false, true))));
+
+        if ($this->type == 'search') {
+            $page = Horde_Util::getFormData('page', 0);
+            $numitem = $this->count();
+            $maxpage = $prefs->getValue('maxpage');
+            $perpage = $prefs->getValue('perpage');
+
+            $min = $page * $perpage;
+            while ($min > $numitem) {
+                $page--;
+                $min = $page * $perpage;
+            }
+
+            $max = $min + $perpage;
+            $start = ($page * $perpage) + 1;
+            $end = min($numitem, $start + $perpage - 1);
+
+            $listHtml = $this->getPage($numDisplayed, $min, $max);
+
+            $crit = array();
+            if ($_SESSION['turba']['search_mode'] == 'advanced') {
+                $map = $driver->getCriteria();
+                foreach ($map as $key => $value) {
+                    if ($key != '__key') {
+                        $val = Horde_Util::getFormData($key);
+                        if (!empty($val)) {
+                            $crit[$key] = $val;
+                        }
+                    }
+                }
+            }
+            $params = array_merge($crit, array(
+                'criteria' => Horde_Util::getFormData('criteria'),
+                'val' => Horde_Util::getFormData('val'),
+                'source' => Horde_Util::getFormData('source', $default_source)
+            ));
+            $viewurl = urldecode(Horde_Util::addParameter('search.php', $params));
+
+            $vars = Horde_Variables::getDefaultVariables();
+            $pager = new Horde_UI_Pager('page', $vars,
+                                        array('num' => $numitem,
+                                              'url' => $viewurl,
+                                              'page_limit' => $maxpage,
+                                              'perpage' => $perpage));
+
+            $pagerHeader = 'numPager.inc';
+        } else {
+            $page = Horde_Util::getFormData('page', '*');
+            if (!preg_match('/^[A-Za-z*]$/', $page)) {
+                $page = '*';
+            }
+            if ($this->count() > $prefs->getValue('perpage')) {
+                $page = Horde_Util::getFormData('page', 'A');
+                if (!preg_match('/^[A-Za-z*]$/', $page)) {
+                    $page = 'A';
+                }
+            }
+
+            $listHtml = $this->getAlpha($numDisplayed, $page);
+            $pagerHeader = 'alphaPager.inc';
+        }
+
+        if ($numDisplayed) {
+            require TURBA_TEMPLATES . '/browse/actions.inc';
+            require TURBA_TEMPLATES . '/list/' . $pagerHeader;
+            echo $listHtml;
+        } else {
+            require TURBA_TEMPLATES . '/list/' . $pagerHeader;
+            echo '<p><em>' . _("No matching contacts") . '</em></p>';
+        }
+    }
+
+    /**
+     * Renders the list contents into an HTML view.
+     *
+     * @param integer $numDisplayed  Ouptut parameter - the number of rows
+     *                               rendered.
+     * @param integer $min           Minimum number of rows to display.
+     * @param integer $max           Maximum number of rows to display.
+     * @return string  HTML to echo.
+     */
+    function getPage(&$numDisplayed, $min = 0, $max = null)
+    {
+        if (is_null($max)) {
+            $max = $this->list->count();
+        }
+        return $this->_get($numDisplayed,
+                           new Turba_ListView_PageFilter($min, $max));
+    }
+
+    /**
+     * Renders the list contents that match $alpha into an HTML view.
+     *
+     * @param integer $numDisplayed  This will be set to the number of contacts
+     *                               in the view.
+     * @param string $alpha The letter to display.
+     *
+     * @return string HTML of the list.
+     */
+    function getAlpha(&$numDisplayed, $alpha)
+    {
+        return $this->_get($numDisplayed,
+                           new Turba_ListView_AlphaFilter($alpha));
+    }
+
+    /**
+     * Retrieves a column's name
+     *
+     * @param integer $i  The zero-basd index of the column
+     * @return string
+     */
+    function getColumnName($i)
+    {
+        return Turba::getColumnName($i, $this->columns);
+    }
+
+    /**
+     * @param integer $i  The zero-based index of the column
+     */
+    function getSortInfoForColumn($i)
+    {
+        $sortorder = Turba::getPreferredSortOrder();
+        $column_name = $this->getColumnName($i);
+        $i = 0;
+        foreach ($sortorder as $sortfield) {
+            if ($column_name == $sortfield['field']) {
+                return array_merge($sortfield, array('rank' => $i));
+            }
+            $i++;
+        }
+        return null;
+    }
+
+    function getColumnSortImage($i, $title = null)
+    {
+        if (is_null($title)) {
+            $title = _("Sort Direction");
+        }
+        $sortdir = $this->getColumnSortDirection($i);
+        if ($this->isPrimarySortColumn($i)) {
+            return Horde::img($sortdir ? 'za.png' : 'az.png', $title, null, $GLOBALS['registry']->getImageDir('horde'));
+        } else {
+            return Horde::img($sortdir ? 'za_secondary.png' : 'az_secondary.png', _("Sort Direction"));
+        }
+    }
+
+    /**
+     * Retrieves a natural language description of the sort order
+     * @return string
+     */
+    function getSortOrderDescription()
+    {
+        $description = array();
+        $sortorder = Turba::getPreferredSortOrder();
+        foreach ($sortorder as $elt) {
+            $field = $elt['field'];
+            if ($field == 'lastname') {
+                $field = 'name';
+            }
+            $description[] = $GLOBALS['attributes'][$field]['label'];
+        }
+        return join(', ', $description);
+    }
+
+    /**
+     * @param integer $i  The zero-based index of the column
+     */
+    function getColumnSortDirection($i)
+    {
+        $result = $this->getSortInfoForColumn($i);
+        if (is_null($result)) {
+            return null;
+        }
+        return $result['ascending'] ? 0 : 1;
+    }
+
+    /**
+     * Determines whether we are sorting on the specified column
+     *
+     * @param integer $i  The zero-based column index
+     * @return boolean
+     */
+    function isSortColumn($i)
+    {
+        return !is_null($this->getSortInfoForColumn($i));
+    }
+
+    /**
+     * Determines whether this is the first column to sort by
+     * @param integer $i  The zero-based column index
+     * @return boolean
+     */
+    function isPrimarySortColumn($i)
+    {
+        $result = $this->getSortInfoForColumn($i);
+        if (is_null($result)) {
+            return false;
+        }
+        return ($result['rank'] == 0);
+    }
+
+    function _get(&$numDisplayed, $filter)
+    {
+        ob_start();
+        $width = floor(90 / (count($this->columns) + 1));
+        @list($own_source, $own_id) = explode(';', $GLOBALS['prefs']->getValue('own_contact'));
+
+        include TURBA_TEMPLATES . '/browse/column_headers.inc';
+
+        $numDisplayed = 0;
+        $this->list->reset();
+        while ($ob = $this->list->next()) {
+            if ($filter->skip($ob)) {
+                continue;
+            }
+
+            include TURBA_TEMPLATES . '/browse/row.inc';
+            $numDisplayed++;
+        }
+
+        include TURBA_TEMPLATES . '/browse/column_footers.inc';
+        return ob_get_clean();
+    }
+
+    function getAddSources()
+    {
+        global $addSources;
+
+        // Create list of lists for Add to.
+        $addToList = array();
+        $addToListSources = array();
+        foreach ($addSources as $src => $srcConfig) {
+            if (!empty($srcConfig['map']['__type'])) {
+                $addToListSources[] = array('key' => '',
+                                            'name' => '&nbsp;&nbsp;' . htmlspecialchars($srcConfig['title']),
+                                            'source' => htmlspecialchars($src));
+
+                $srcDriver = &Turba_Driver::singleton($src);
+                $listList = $srcDriver->search(array('__type' => 'Group'),
+                                               array(array('field' => 'name',
+                                                           'ascending' => true)),
+                                               'AND', array('name'));
+                if (is_a($listList, 'PEAR_Error')) {
+                    $GLOBALS['notification']->push($listList, 'horde.error');
+                } else {
+                    $listList->reset();
+                    $currentList = Horde_Util::getFormData('key');
+                    while ($listObject = $listList->next()) {
+                        if ($listObject->getValue('__key') != $currentList) {
+                            $addToList[] = array('name' => htmlspecialchars($listObject->getValue('name')),
+                                                 'source' => htmlspecialchars($src),
+                                                 'key' => htmlspecialchars($listObject->getValue('__key')));
+                        }
+                    }
+                }
+            }
+        }
+        if ($addToListSources) {
+            if ($addToList) {
+                array_unshift($addToList, '- - - - - - - - -');
+            }
+            $addToList = array_merge(array(_("Create a new Contact List in:")), $addToListSources, $addToList);
+            $addToListSources = null;
+        }
+
+        return array($addToList, $addToListSources);
+    }
+
+}
+
+/**
+ * Skips objects whose name does not start with the specified letter
+ */
+class Turba_ListView_AlphaFilter {
+
+    var $_alpha;
+
+    function Turba_ListView_AlphaFilter($alpha)
+    {
+        $this->_alpha = Horde_String::lower($alpha);
+    }
+
+    function skip(&$ob)
+    {
+        $name = Turba::formatName($ob);
+        if ($this->_alpha != '*' && Horde_String::lower(substr($name, 0, 1)) != $this->_alpha) {
+            return true;
+        }
+        return false;
+    }
+
+}
+
+/**
+ * Skips objects which are not on the current page
+ */
+class Turba_ListView_PageFilter {
+
+    var $_min;
+    var $_max;
+    var $_count = 0;
+
+    function Turba_ListView_PageFilter($min, $max)
+    {
+        $this->_min = $min;
+        $this->_max = $max;
+    }
+
+    function skip(&$ob)
+    {
+        if ($this->_count++ < $this->_min) {
+            return true;
+        }
+        return ($this->_count > $this->_max);
+    }
+
+}
diff --git a/turba/lib/LoginTasks/Task/UpgradeLists.php b/turba/lib/LoginTasks/Task/UpgradeLists.php
new file mode 100644 (file)
index 0000000..4bbe612
--- /dev/null
@@ -0,0 +1,160 @@
+<?php
+/**
+ * Login task for upgrading contact lists after upgrading to Turba 2.2.
+ *
+ * @author  Michael J. Rubinsky <mrubinsk@horde.org>
+ * @package Horde_LoginTasks
+ */
+class Turba_LoginTasks_Task_UpgradeList extends Horde_LoginTasks_Task
+{
+    /**
+     * The interval at which to run the task.
+     *
+     * @var integer
+     */
+    public $interval = Horde_LoginTasks::FIRST_LOGIN;
+
+    /**
+     * The style of the page output.
+     *
+     * @var integer
+     */
+    public $display = Horde_LoginTasks::DISPLAY_NONE;
+
+    /**
+     * The priority of the task.
+     *
+     * @var integer
+     */
+    public $priority = Horde_LoginTasks::PRIORITY_HIGH;
+
+    /**
+     * Cache array used in _updateShareName().
+     *
+     * @var array
+     */
+    protected $_cache = array();
+
+    /**
+     * Holds an array of Horde_Share_Object objects.
+     *
+     * @var array
+     */
+    protected $_shares = array();
+
+    /**
+     * Perform all functions for this task.
+     *
+     * @return mixed True | PEAR_Error
+     */
+    public function execute()
+    {
+        if (!empty($_SESSION['turba']['has_share'])) {
+            $criteria = array('__type' => 'Group');
+            $sources = array_keys($GLOBALS['cfgSources']);
+            foreach ($sources as $sourcekey) {
+                $driver = Turba_Driver::singleton($sourcekey);
+                $lists = $driver->search($criteria);
+                if (is_a($lists, 'PEAR_Error')) {
+                    return $lists;
+                }
+                $cnt = $lists->count();
+                for ($j = 0; $j < $cnt; ++$j) {
+                    $list = $lists->next();
+                    $attributes = $list->getAttributes();
+                    $members = @unserialize($attributes['__members']);
+                    if (is_array($members) && !empty($members[0])) {
+                        $c = count($members);
+                        for ($i = 0; $i < $c; ++$i) {
+                            if (substr_count($members[$i], ':') == 2) {
+                                preg_match('/^([a-zA-Z0-9]+:[a-zA-Z0-9]+)(:[a-zA-Z0-9]+)$/', $members[$i], $matches);
+                                $source = $matches[1];
+                                $contact_key = substr($matches[2], 1);
+                            } elseif (substr_count($members[$i], ':') == 1) {
+                                list($source, $contact_key) = explode(':', $members[$i]);
+                            } else {
+                                break;
+                            }
+                            $source = $this->_updateShareName($source);
+                            $members[$i] = $source . ':' . $contact_key;
+                        }
+                        $list->setValue('__members', serialize($members));
+                        $list->store();
+                    }
+                }
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Helper function to update a 'legacy' share name
+     * to the new flattened share style.
+     */
+    protected function _updateShareName($book)
+    {
+        // No sense going through all the logic if we know we're empty.
+        if (empty($book)) {
+            return $book;
+        }
+
+        if (empty($this->_shares)) {
+            $this->_shares = Turba::listShares();
+        }
+
+        // Have we seen this one yet?
+        if (!empty($this->_cache[$book])) {
+            return $this->_cache[$book];
+        }
+
+        // Is it an unmodified share key already?
+        if (strpos($book, ':') !== false) {
+            list($source, $key) = explode(':', $book, 2);
+            $source = trim($source);
+            $key = trim($key);
+            if (isset($this->_shares[$key])) {
+                $params = @unserialize($this->_shares[$key]->get('params'));
+                // I'm not sure if this would ever be not true, but...
+                if ($params['source'] == $source) {
+                    $this->_cache[$book] = $key;
+                    return $key;
+                }
+            } else {
+                // Maybe a key the upgrade script modified?
+                foreach ($this->_shares as $skey => $share) {
+                    $params = @unserialize($share->get('params'));
+                    if ($params['name'] == $key &&
+                        $params['source'] == $source) {
+
+                       $this->_cache[$book] = $skey;
+                       return $skey;
+                    }
+                }
+            }
+        } else {
+            // Need to check if this is a default address book for
+            // one of our sources that is share enabled.
+            foreach ($this->_shares as $skey => $share) {
+                $params = @unserialize($share->get('params'));
+                if ($params['source'] == $book &&
+                    !empty($params['default'])) {
+                    $this->_cache[$book] = $skey;
+                    return $skey;
+                }
+            }
+        }
+
+        // Special case for contacts from an IMSP source. The cfgSource
+        // keys changed from 2.1 to 2.2 due to needs of the share code.
+        if (strpos($book, 'IMSP_')) {
+            // @TODO: Perform magical matching of IMSP-# to username.bookname.
+        }
+
+        // Must be a normal, non-shared source, just pass it back.
+        $this->_cache[$book] = $book;
+
+        return $book;
+    }
+
+}
diff --git a/turba/lib/LoginTasks/Task/UpgradePrefs.php b/turba/lib/LoginTasks/Task/UpgradePrefs.php
new file mode 100644 (file)
index 0000000..8a921b1
--- /dev/null
@@ -0,0 +1,236 @@
+<?php
+/**
+ * Login task for upgrading user prefs after upgrading to Turba 2.2
+ *
+ * @author  Michael J. Rubinsky <mrubinsk@horde.org>
+ * @package Horde_LoginTasks
+ */
+class Turba_LoginTasks_Task_UpgradePrefs extends Horde_LoginTasks_Task
+{
+    /**
+     * The interval at which to run the task.
+     *
+     * @var integer
+     */
+    public $interval = Horde_LoginTasks::FIRST_LOGIN;
+
+    /**
+     * The style of the page output.
+     *
+     * @var integer
+     */
+    public $display = Horde_LoginTasks::DISPLAY_NONE;
+
+    /**
+     * The priority of the task.
+     *
+     * @var integer
+     */
+    public $priority = Horde_LoginTasks::PRIORITY_HIGH;
+
+    /**
+     * Cache array used in _updateShareName().
+     *
+     * @var array
+     */
+    protected $_cache = array();
+
+    /**
+     * Holds an array of Horde_Share_Object objects.
+     *
+     * @var array
+     */
+    protected $_shares;
+
+    /**
+     * Perform all functions for this task.
+     *
+     * @return mixed True | PEAR_Error
+     */
+    public function execute()
+    {
+        global $registry;
+
+        if (!empty($_SESSION['turba']['has_share'])) {
+            $this->_doAddressbooks();
+            $this->_doColumns();
+            $this->_doAddSource();
+
+            // Now take care of non-Turba prefs.
+            $apps = $registry->listApps(null, true);
+            if (!empty($apps['imp'])) {
+                $registry->loadPrefs('imp');
+                $this->_doImp();
+            }
+
+            if (!empty($apps['kronolith'])) {
+                $registry->loadPrefs('kronolith');
+                $this->_doKronolith();
+            }
+
+            $registry->loadPrefs('turba');
+        }
+
+        return true;
+    }
+
+    /**
+     * Update Turba's addressbooks pref.
+     */
+    protected function _doAddressbooks()
+    {
+        global $prefs;
+
+        $abooks = explode("\n", $prefs->getValue('addressbooks'));
+        if (is_array($abooks) && !empty($abooks[0])) {
+            $new_prefs = array();
+            foreach ($abooks as $abook) {
+                $new_prefs[] = $this->_updateShareName($abook);
+            }
+
+            return $prefs->setValue('addressbooks', implode("\n", $new_prefs));
+        }
+
+        return true;
+    }
+
+    /**
+     * Update Turba's columns pref
+     */
+    protected function _doColumns()
+    {
+        global $prefs;
+
+        // Turba's columns pref
+        $abooks = explode("\n", $prefs->getValue('columns'));
+        if (is_array($abooks) && !empty($abooks[0])) {
+            $new_prefs = array();
+            $cnt = count($abooks);
+            for ($i = 0; $i < $cnt; ++$i) {
+                $colpref = explode("\t", $abooks[$i]);
+                $colpref[0] = $this->_updateShareName($colpref[0]);
+                $abooks[$i] = implode("\t", $colpref);
+            }
+            return $prefs->setValue('columns', implode("\n", $abooks));
+        }
+
+        return true;
+    }
+
+    /**
+     * TODO
+     */
+    protected function _doAddsource()
+    {
+        global $prefs;
+
+        $newName = $this->_updateShareName($prefs->getValue('add_source'));
+        if (!empty($newName)) {
+            return $prefs->setValue('add_source', $newName);
+        }
+    }
+
+    /**
+     * Helper function to update a 'legacy' share name
+     * to the new flattened share style.
+     */
+    protected function _updateShareName($book)
+    {
+        // No sense going through all the logic if we know we're empty.
+        if (empty($book)) {
+            return $book;
+        }
+
+        if (empty($this->_shares)) {
+            $this->_shares = Turba::listShares();
+        }
+
+        // Have we seen this one yet?
+        if (!empty($this->_cache[$book])) {
+            return $this->_cache[$book];
+        }
+
+        // Is it an unmodified share key already?
+        if (strpos($book, ':') !== false) {
+            list($source, $key) = explode(':', $book, 2);
+            $source = trim($source);
+            $key = trim($key);
+            if (isset($this->_shares[$key])) {
+                $params = @unserialize($this->_shares[$key]->get('params'));
+                // I'm not sure if this would ever be not true, but...
+                if ($params['source'] == $source) {
+                    $this->_cache[$book] = $key;
+                    return $key;
+                }
+            } else {
+                // Maybe a key the upgrade script modified?
+                foreach ($this->_shares as $skey => $share) {
+                    $params = @unserialize($share->get('params'));
+                    if (!empty($params['name']) && $params['name'] == $key &&
+                        $params['source'] == $source) {
+
+                       $this->_cache[$book] = $skey;
+                       return $skey;
+                    }
+                }
+            }
+        } else {
+            // Need to check if this is a default address book for
+            // one of our sources that is share enabled.
+            foreach ($this->_shares as $skey => $share) {
+                $params = @unserialize($share->get('params'));
+                if ($params['source'] == $book &&
+                    !empty($params['default'])) {
+                    $this->_cache[$book] = $skey;
+                    return $skey;
+                }
+            }
+        }
+
+        // Must be a normal, non-shared source, just pass it back.
+        $this->_cache[$book] = $book;
+
+        return $book;
+    }
+
+    /**
+     * Update IMP's search_sources pref
+     */
+    protected function _doImp()
+    {
+        global $prefs;
+
+        $imp_pref = $prefs->getValue('search_sources');
+        if (!empty($imp_pref)) {
+            $books = explode("\t", $imp_pref);
+            $new_books = array();
+            foreach ($books as $book) {
+                $new_books[] = $this->_updateShareName($book);
+            }
+            $books = implode("\t", $new_books);
+            return $prefs->setValue('search_sources', $books);
+        }
+
+        return true;
+    }
+
+    /**
+     * Update Kronolith's search_abook pref
+     */
+    protected function _doKronolith()
+    {
+        global $prefs;
+
+        $books = @unserialize($prefs->getValue('search_abook'));
+        if (!empty($books)) {
+            $new_books = array();
+            foreach ($books as $book) {
+                $new_books[] = $this->_updateShareName($book);
+            }
+            return $prefs->setValue('search_abook', serialize($new_books));
+        }
+
+        return true;
+    }
+
+}
diff --git a/turba/lib/Object.php b/turba/lib/Object.php
new file mode 100644 (file)
index 0000000..12aaed5
--- /dev/null
@@ -0,0 +1,400 @@
+<?php
+/**
+ * The Turba_Object:: class provides a base implementation for Turba
+ * objects - people, groups, restaurants, etc.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@csh.rit.edu>
+ * @package Turba
+ */
+class Turba_Object {
+
+    /**
+     * Underlying driver.
+     *
+     * @var Turba_Driver
+     */
+    var $driver;
+
+    /**
+     * Hash of attributes for this contact.
+     *
+     * @var array
+     */
+    var $attributes;
+
+    /**
+     * Reference to this object's VFS instance.
+     *
+     * @var VFS
+     */
+    var $_vfs;
+
+    /**
+     * Constructs a new Turba_Object object.
+     *
+     * @param Turba_Driver $driver  The source that this object came from.
+     * @param array $attributes     Hash of attributes for this object.
+     */
+    function Turba_Object(&$driver, $attributes = array())
+    {
+        $this->driver = &$driver;
+        $this->attributes = $attributes;
+        $this->attributes['__type'] = 'Object';
+    }
+
+    /**
+     * Returns a key-value hash containing all properties of this object.
+     *
+     * @return array  All properties of this object.
+     */
+    function getAttributes()
+    {
+        return $this->attributes;
+    }
+
+    /**
+     * Returns the name of the address book that this object is from.
+     */
+    function getSource()
+    {
+        return $this->driver->getName();
+    }
+
+    /**
+     * Get a fully qualified key for this contact.
+     *
+     * @param string $delimiter Delimiter for the parts of the key, defaults to ':'.
+     *
+     * @return string Fully qualified contact id.
+     */
+    function getGuid($delimiter = ':')
+    {
+        return 'turba' . $delimiter . $this->driver->getName() . $delimiter . $this->getValue('__uid');
+    }
+
+    /**
+     * Returns the value of the specified attribute.
+     *
+     * @param string $attribute  The attribute to retrieve.
+     *
+     * @return mixed  The value of $attribute, an array (for photo type)
+     *                or the empty string.
+     */
+    function getValue($attribute)
+    {
+        /* Cache hooks to avoid multiple file_exists() calls. */
+        static $hooks;
+        if (!isset($hooks)) {
+            $hooks = array();
+            try {
+                Horde::loadConfiguration('hooks.php', null, 'turba');
+            } catch (Horde_Exception $e) {}
+        }
+        if (!isset($hooks[$attribute])) {
+            $function = '_turba_hook_decode_' . $attribute;
+            if (function_exists($function)) {
+                $hooks[$attribute] = $function;
+            } else {
+                $hooks[$attribute] = false;
+            }
+        }
+
+        if (isset($this->attributes[$attribute]) &&
+            !empty($hooks[$attribute])) {
+            return call_user_func_array($hooks[$attribute],
+                                        array($this->attributes[$attribute], &$this));
+        }
+
+        if (isset($this->driver->map[$attribute]) &&
+            is_array($this->driver->map[$attribute])) {
+            $args = array();
+            foreach ($this->driver->map[$attribute]['fields'] as $field) {
+                $args[] = $this->getValue($field);
+            }
+            return trim(vsprintf($this->driver->map[$attribute]['format'], $args), " \t\n\r\0\x0B,");
+        } elseif (!isset($this->attributes[$attribute])) {
+            return null;
+        } elseif (isset($GLOBALS['attributes'][$attribute]) &&
+                  $GLOBALS['attributes'][$attribute]['type'] == 'image') {
+            return empty($this->attributes[$attribute])
+                ? null
+                : array('load' => array('file' => basename(tempnam(Horde::getTempDir(), 'horde_form_')),
+                                        'data' => $this->attributes[$attribute]));
+        } else {
+            return $this->attributes[$attribute];
+        }
+    }
+
+    /**
+     * Sets the value of the specified attribute.
+     *
+     * @param string $attribute  The attribute to set.
+     * @param string $value      The value of $attribute.
+     */
+    function setValue($attribute, $value)
+    {
+        /* Cache hooks to avoid multiple file_exists() calls. */
+        static $hooks;
+        if (!isset($hooks)) {
+            $hooks = array();
+            try {
+                Horde::loadConfiguration('hooks.php', null, 'turba');
+            } catch (Horde_Exception $e) {}
+        }
+        if (!isset($hooks[$attribute])) {
+            $function = '_turba_hook_encode_' . $attribute;
+            if (function_exists($function)) {
+                $hooks[$attribute] = $function;
+            } else {
+                $hooks[$attribute] = false;
+            }
+        }
+        if ($hooks[$attribute]) {
+            $value = call_user_func_array($hooks[$attribute], array($value, $this->attributes[$attribute], &$this));
+        }
+
+        if (isset($this->driver->map[$attribute]) &&
+            is_array($this->driver->map[$attribute]) &&
+            !isset($this->driver->map[$attribute]['attribute'])) {
+            return false;
+        }
+
+        $this->attributes[$attribute] = $value;
+        return true;
+    }
+
+    /**
+     * Determines whether or not the object has a value for the specified
+     * attribute.
+     *
+     * @param string $attribute  The attribute to check.
+     *
+     * @return boolean  Whether or not there is a value for $attribute.
+     */
+    function hasValue($attribute)
+    {
+        if (isset($this->driver->map[$attribute]) &&
+            is_array($this->driver->map[$attribute])) {
+            foreach ($this->driver->map[$attribute]['fields'] as $field) {
+                if ($this->hasValue($field)) {
+                    return true;
+                }
+            }
+            return false;
+        } else {
+            return !is_null($this->getValue($attribute));
+        }
+    }
+
+    /**
+     * Returns true if this object is a group of multiple contacts.
+     *
+     * @return boolean  True if this object is a group of multiple contacts.
+     */
+    function isGroup()
+    {
+        return false;
+    }
+
+    /**
+     * Returns true if this object is editable by the current user.
+     *
+     * @return boolean  Whether or not the current user can edit this object
+     */
+    function isEditable()
+    {
+        return $this->driver->hasPermission(PERMS_EDIT);
+    }
+
+    /**
+     * Returns whether or not the current user has the requested permission.
+     *
+     * @param integer $perm  The permission to check.
+     *
+     * @return boolean True if user has the permission.
+     */
+    function hasPermission($perm)
+    {
+        return $this->driver->hasPermission($perm);
+    }
+
+    /**
+     * Contact url.
+     */
+    function url($view = null, $full = false)
+    {
+        $url = Horde_Util::addParameter('contact.php',
+                                  array('source' => $this->driver->name,
+                                        'key' => $this->getValue('__key')));
+        if (!is_null($view)) {
+            $url = Horde_Util::addParameter($url, 'view', $view);
+        }
+
+        return Horde::applicationUrl($url, $full);
+    }
+
+    /**
+     * Saves a file into the VFS backend associated with this object.
+     *
+     * @param array $info  A hash with the file information as returned from a
+     *                     Horde_Form_Type_file.
+     */
+    function addFile($info)
+    {
+        $result = $this->_vfsInit();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $dir = TURBA_VFS_PATH . '/' . $this->getValue('__uid');
+        $file = $info['name'];
+        while ($this->_vfs->exists($dir, $file)) {
+            if (preg_match('/(.*)\[(\d+)\](\.[^.]*)?$/', $file, $match)) {
+                $file = $match[1] . '[' . ++$match[2] . ']' . $match[3];
+            } else {
+                $dot = strrpos($file, '.');
+                if ($dot === false) {
+                    $file .= '[1]';
+                } else {
+                    $file = substr($file, 0, $dot) . '[1]' . substr($file, $dot);
+                }
+            }
+        }
+
+        return $this->_vfs->write($dir, $file, $info['tmp_name'], true);
+    }
+
+    /**
+     * Deletes a file from the VFS backend associated with this object.
+     *
+     * @param string $file  The file name.
+     */
+    function deleteFile($file)
+    {
+        $this->_vfsInit();
+
+        return $this->_vfs->deleteFile(TURBA_VFS_PATH . '/' . $this->getValue('__uid'), $file);
+    }
+
+    /**
+     * Deletes all files from the VFS backend associated with this object.
+     */
+    function deleteFiles()
+    {
+        $this->_vfsInit();
+
+        if ($this->_vfs->exists(TURBA_VFS_PATH, $this->getValue('__uid'))) {
+            return $this->_vfs->deleteFolder(TURBA_VFS_PATH, $this->getValue('__uid'), true);
+        }
+
+        return true;
+    }
+
+    /**
+     * Returns all files from the VFS backend associated with this object.
+     *
+     * @return array  A list of hashes with file informations.
+     */
+    function listFiles()
+    {
+        $result = $this->_vfsInit();
+
+        if (!is_a($result, 'PEAR_Error') && $this->_vfs->exists(TURBA_VFS_PATH, $this->getValue('__uid'))) {
+            return $this->_vfs->listFolder(TURBA_VFS_PATH . '/' . $this->getValue('__uid'));
+        } else {
+            return array();
+        }
+    }
+
+    /**
+     * Returns a link to display and download a file from the VFS backend
+     * associated with this object.
+     *
+     * @param string $file  The file name.
+     *
+     * @return string  The HTML code of the generated link.
+     */
+    function vfsDisplayUrl($file)
+    {
+        global $registry, $mime_drivers_map, $mime_drivers;
+
+        $mime_part = new Horde_Mime_Part();
+        $mime_part->setType(Horde_Mime_Magic::extToMime($file['type']));
+        $viewer = Horde_Mime_Viewer::factory($mime_part);
+
+        // We can always download files.
+        $url_params = array('actionID' => 'download_file',
+                            'file' => $file['name'],
+                            'type' => $file['type'],
+                            'source' => $this->driver->name,
+                            'key' => $this->getValue('__key'));
+        $dl = Horde::link(Horde::downloadUrl($file['name'], $url_params), $file['name']) . Horde::img('download.png', _("Download"), '', $registry->getImageDir('horde')) . '</a>';
+
+        // Let's see if we can view this one, too.
+        if ($viewer && !is_a($viewer, 'Horde_Mime_Viewer_default')) {
+            $url = Horde::applicationUrl('view.php');
+            $url_params['actionID'] = 'view_file';
+            $url = Horde_Util::addParameter($url, $url_params);
+            $link = Horde::link($url, $file['name'], null, '_blank') . $file['name'] . '</a>';
+        } else {
+            $link = $file['name'];
+        }
+
+        return $link . ' ' . $dl;
+    }
+
+    /**
+     * Returns a link to display, download, and delete a file from the VFS
+     * backend associated with this object.
+     *
+     * @param string $file  The file name.
+     *
+     * @return string  The HTML code of the generated link.
+     */
+    function vfsEditUrl($file)
+    {
+        $delform = '<form action="deletefile.php" style="display:inline" method="post">' . Horde_Util::formInput() .
+            '<input type="hidden" name="file" value="' . htmlspecialchars($file['name']) . '" />' .
+            '<input type="hidden" name="source" value="' . htmlspecialchars($this->driver->name) . '" />' .
+            '<input type="hidden" name="key" value="' . htmlspecialchars($this->getValue('__key')) . '" />' .
+            '<input type="image" class="img" src="' . $GLOBALS['registry']->getImageDir('horde') . '/delete.png" />' .
+            '</form>';
+
+        return $this->vfsDisplayUrl($file) . ' ' . $delform;
+    }
+
+    /**
+     * Saves the current state of the object to the storage backend.
+     */
+    function store()
+    {
+        $object_id = $this->driver->save($this);
+        if (is_a($object_id, 'PEAR_Error')) {
+            return $object_id;
+        }
+
+        return $this->setValue('__key', $object_id);
+    }
+
+    /**
+     * Loads the VFS configuration and initializes the VFS backend.
+     */
+    function _vfsInit()
+    {
+        if (!isset($this->_vfs)) {
+            $v_params = Horde::getVFSConfig('documents');
+            if (is_a($v_params, 'PEAR_Error')) {
+                Horde::fatal($v_params, __FILE__, __LINE__);
+            }
+            $result = VFS::singleton($v_params['type'], $v_params['params']);
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            } else {
+                $this->_vfs = &$result;
+                return true;
+            }
+        }
+    }
+
+}
diff --git a/turba/lib/Object/Group.php b/turba/lib/Object/Group.php
new file mode 100644 (file)
index 0000000..4b47d72
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+/**
+ * The Turba_Object_Group:: class provides a set of methods for dealing with
+ * contact groups.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@csh.rit.edu>
+ * @package Turba
+ */
+class Turba_Object_Group extends Turba_Object {
+
+    /**
+     * Constructs a new Turba_Object_Group.
+     *
+     * @param Turba_Driver $driver  The driver object that this group comes
+     *                              from.
+     * @param array $attributes     Hash of attributes for this group.
+     */
+    function Turba_Object_Group(&$driver, $attributes = array())
+    {
+        parent::Turba_Object($driver, $attributes);
+        $this->attributes['__type'] = 'Group';
+    }
+
+    /**
+     * Returns true if this object is a group of multiple contacts.
+     *
+     * @return boolean  True.
+     */
+    function isGroup()
+    {
+        return true;
+    }
+
+    /**
+     * Contact url.
+     */
+    function url($view = null, $full = false)
+    {
+        $url = Horde_Util::addParameter('browse.php',
+                                  array('source' => $this->getSource(),
+                                        'key' => $this->getValue('__key')));
+        return Horde::applicationUrl($url, $full);
+    }
+
+    /**
+     * Adds a new contact entry to this group.
+     *
+     * @param string $contactId  The id of the contact to add.
+     * @param string $sourceId   The source $contactId is from.
+     *
+     * @since Turba 1.2
+     */
+    function addMember($contactId, $sourceId = null)
+    {
+        // Default to the same source as the group.
+        if (is_null($sourceId)) {
+            $sourceId = $this->getSource();
+        }
+
+        // Can't add a group to itself.
+        if ($contactId == $this->attributes['__key']) {
+            return PEAR::raiseError(_("Can't add a group to itself."));
+        }
+
+        // Try to find the contact being added.
+        if ($sourceId == $this->getSource()) {
+            $contact = $this->driver->getObject($contactId);
+        } else {
+            $driver = Turba_Driver::singleton($sourceId);
+            if (is_a($driver, 'PEAR_Error')) {
+                return $driver;
+            }
+            $contact = $driver->getObject($contactId);
+        }
+
+        // Bail out if the contact being added doesn't exist or can't
+        // be retrieved.
+        if (is_a($contact, 'PEAR_Error')) {
+            return $contact;
+        }
+
+        // Explode members.
+        $members = @unserialize($this->attributes['__members']);
+        if (!is_array($members)) {
+            $members = array();
+        }
+
+        // If the contact is from a different source, store its source
+        // id as well.
+        if ($sourceId == $this->getSource()) {
+            $members[] = $contactId;
+        } else {
+            $members[] = $sourceId . ':' . $contactId;
+        }
+
+        // Remove duplicates.
+        $members = array_unique($members);
+
+        $this->attributes['__members'] = serialize($members);
+
+        return true;
+    }
+
+    /**
+     * Deletes a contact from this group.
+     *
+     * @param string $contactId  The id of the contact to remove.
+     * @param string $sourceId   The source $contactId is from.
+     *
+     * @since Turba 1.2
+     */
+    function removeMember($contactId, $sourceId = null)
+    {
+        $members = @unserialize($this->attributes['__members']);
+
+        if (is_null($sourceId) || $sourceId == $this->getSource()) {
+            $i = array_search($contactId, $members);
+        } else {
+            $i = array_search($sourceId . ':' . $contactId, $members);
+        }
+
+        if ($i !== false) {
+            unset($members[$i]);
+        }
+
+        $this->attributes['__members'] = serialize($members);
+
+        return true;
+    }
+
+    /**
+     * Count the number of contacts in this group.
+     *
+     * @return integer
+     *
+     * @since Turba 2.1.7
+     */
+    function count()
+    {
+        $children = @unserialize($this->attributes['__members']);
+        if (!is_array($children)) {
+            return 0;
+        } else {
+            return count($children);
+        }
+    }
+
+    /**
+     * Retrieve the Objects in this group
+     *
+     * @param array $sort   The requested sort order which is passed to
+     *                      Turba_List::sort().
+     *
+     * @return Turba_List   List containing the members of this group
+     *
+     * @since Turba 1.2
+     */
+    function &listMembers($sort = null)
+    {
+        $list = new Turba_List();
+
+        $children = unserialize($this->attributes['__members']);
+        if (!is_array($children)) {
+            $children = array();
+        }
+
+        reset($children);
+        $modified = false;
+        foreach ($children as $member) {
+            if (strpos($member, ':') === false) {
+                $contact = $this->driver->getObject($member);
+                if (is_a($contact, 'PEAR_Error')) {
+                    // Remove the contact if it no longer exists
+                    $this->removeMember($member);
+                    $modified = true;
+                }
+            } else {
+                list($sourceId, $contactId) = explode(':', $member, 2);
+                if (strpos($contactId, ':')) {
+                    list($owner, $contactId) = explode(':', $contactId, 2);
+                    $sourceId .= ':' . $owner;
+                }
+                $driver = Turba_Driver::singleton($sourceId);
+                if (!is_a($driver, 'PEAR_Error')) {
+                    $contact = $driver->getObject($contactId);
+                    if (is_a($contact, 'PEAR_Error')) {
+                        continue;
+                    }
+                } else {
+                    continue;
+                }
+            }
+
+            $list->insert($contact);
+        }
+
+        // If we've pruned any dead entries, store the changes.
+        if ($modified) {
+            $this->store();
+        }
+
+        $list->sort($sort);
+        return $list;
+    }
+
+}
diff --git a/turba/lib/Turba.php b/turba/lib/Turba.php
new file mode 100644 (file)
index 0000000..40fe877
--- /dev/null
@@ -0,0 +1,619 @@
+<?php
+/** The virtual path to use for VFS data. */
+define('TURBA_VFS_PATH', '.horde/turba/documents');
+
+/**
+ * Turba Base Class.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @author  Jon Parise <jon@horde.org>
+ * @package Turba
+ */
+class Turba {
+
+    /**
+     * @todo Consolidate on a single mail/compose method.
+     */
+    function formatEmailAddresses($data, $name)
+    {
+        global $registry;
+        static $batchCompose;
+
+        if (!isset($batchCompose)) {
+            $batchCompose = $registry->hasMethod('mail/batchCompose');
+        }
+
+        $array = is_array($data);
+        if (!$array) {
+            $data = array($data);
+        }
+
+        $addresses = array();
+        foreach ($data as $i => $email_vals) {
+            $email_vals = explode(',', $email_vals);
+            foreach ($email_vals as $j => $email_val) {
+                $email_val = trim($email_val);
+
+                // Format the address according to RFC822.
+                $mailbox_host = explode('@', $email_val);
+                if (!isset($mailbox_host[1])) {
+                    $mailbox_host[1] = '';
+                }
+                $address = Horde_Mime_Address::writeAddress($mailbox_host[0], $mailbox_host[1], $name);
+
+                // Get rid of the trailing @ (when no host is included in
+                // the email address).
+                $addresses[$i . ':' . $j] = array('to' => addslashes(str_replace('@>', '>', $address)));
+                if (!$batchCompose) {
+                    $addresses[$i . ':' . $j] = $GLOBALS['registry']->call('mail/compose', $addresses[$i . ':' . $j]);
+                }
+            }
+        }
+
+        if ($batchCompose) {
+            $addresses = $GLOBALS['registry']->call('mail/batchCompose', array($addresses));
+        }
+
+        foreach ($data as $i => $email_vals) {
+            $email_vals = explode(',', $email_vals);
+            $email_values = false;
+            foreach ($email_vals as $j => $email_val) {
+                if (!is_a($addresses, 'PEAR_Error')) {
+                    $mail_link = $addresses[$i . ':' . $j];
+                    if (is_a($mail_link, 'PEAR_Error')) {
+                        $mail_link = 'mailto:' . urlencode($email_val);
+                    }
+                } else {
+                    $mail_link = 'mailto:' . urlencode($email_val);
+                }
+
+                $email_value = Horde::link($mail_link) . htmlspecialchars($email_val) . '</a>';
+                if ($email_values) {
+                    $email_values .= ', ' . $email_value;
+                } else {
+                    $email_values = $email_value;
+                }
+            }
+        }
+
+        if ($array) {
+            return $email_values[0];
+        } else {
+            return $email_values;
+        }
+    }
+
+    /**
+     * Get all the address books the user has the requested permissions to and
+     * return them in the user's preferred order.
+     *
+     * @param integer $permission  The PERMS_* constant to filter on.
+     *
+     * @return array  The filtered, ordered $cfgSources entries.
+     */
+    function getAddressBooks($permission = PERMS_READ)
+    {
+        $addressbooks = array();
+        foreach (array_keys(Turba::getAddressBookOrder()) as $addressbook) {
+            $addressbooks[$addressbook] = $GLOBALS['cfgSources'][$addressbook];
+        }
+
+        if (!$addressbooks) {
+            $addressbooks = $GLOBALS['cfgSources'];
+        }
+
+        return Turba::permissionsFilter($addressbooks, $permission);
+    }
+
+    /**
+     * Get the order the user selected for displaying address books.
+     *
+     * @return array  An array describing the order to display the address books.
+     */
+    function getAddressBookOrder()
+    {
+        $i = 0;
+        $lines = explode("\n", $GLOBALS['prefs']->getValue('addressbooks'));
+        $temp = $lines;
+        $addressbooks = array();
+        foreach ($lines as $line) {
+            $line = trim($line);
+            if ($line && isset($GLOBALS['cfgSources'][$line])) {
+                $addressbooks[$line] = $i++;
+            }
+        }
+        return $addressbooks;
+    }
+
+    /**
+     * Returns the current user's default address book.
+     *
+     * @return string  The default address book name.
+     */
+    function getDefaultAddressBook()
+    {
+        $lines = explode("\n", $GLOBALS['prefs']->getValue('addressbooks'));
+        foreach ($lines as $line) {
+            $line = trim($line);
+            if ($line && isset($GLOBALS['cfgSources'][$line])) {
+                return $line;
+            }
+        }
+
+        reset($GLOBALS['cfgSources']);
+        return key($GLOBALS['cfgSources']);
+    }
+
+    /**
+     * Returns the sort order selected by the user
+     */
+    function getPreferredSortOrder()
+    {
+        return @unserialize($GLOBALS['prefs']->getValue('sortorder'));
+    }
+
+    /**
+     * Retrieves a column's field name
+     */
+    function getColumnName($i, $columns)
+    {
+        return $i == 0 ? 'name' : $columns[$i - 1];
+    }
+
+    /**
+     */
+    function getColumns()
+    {
+        $columns = array();
+        $lines = explode("\n", $GLOBALS['prefs']->getValue('columns'));
+        foreach ($lines as $line) {
+            $line = trim($line);
+            if ($line) {
+                $cols = explode("\t", $line);
+                if (count($cols) > 1) {
+                    $source = array_splice($cols, 0, 1);
+                    $columns[$source[0]] = $cols;
+                }
+            }
+        }
+
+        return $columns;
+    }
+
+    /**
+     * Returns a best guess at the lastname in a string.
+     *
+     * @param string $name  String contain the full name.
+     *
+     * @return string  String containing the last name.
+     */
+    function guessLastname($name)
+    {
+        $name = trim(preg_replace('|\s|', ' ', $name));
+        if (!empty($name)) {
+            /* Assume that last names are always before any commas. */
+            if (is_int(strpos($name, ','))) {
+                $name = Horde_String::substr($name, 0, strpos($name, ','));
+            }
+
+            /* Take out anything in parentheses. */
+            $name = trim(preg_replace('|\(.*\)|', '', $name));
+
+            $namelist = explode(' ', $name);
+            $name = $namelist[($nameindex = (count($namelist) - 1))];
+
+            while (!empty($name) && Horde_String::length($name) < 5 &&
+                   strspn($name[(Horde_String::length($name) - 1)], '.:-') &&
+                   !empty($namelist[($nameindex - 1)])) {
+                $nameindex--;
+                $name = $namelist[$nameindex];
+            }
+        }
+        return strlen($name) ? $name : null;
+    }
+
+    /**
+     * Formats the name according to the user's preference.
+     *
+     * @param Turba_Object $ob  The object to get a name from.
+     *
+     * @return string  The formatted name, either "Firstname Lastname"
+     *                 or "Lastname, Firstname" depending on the user's
+     *                 preference.
+     */
+    function formatName($ob)
+    {
+        global $prefs;
+        static $name_format;
+
+        if (!isset($name_format)) {
+            $name_format = $prefs->getValue('name_format');
+        }
+
+        /* if no formatting, return original name */
+        if ($name_format != 'first_last' && $name_format != 'last_first') {
+            return $ob->getValue('name');
+        }
+
+        /* See if we have the name fields split out explicitly. */
+        if ($ob->hasValue('firstname') && $ob->hasValue('lastname')) {
+            if ($name_format == 'last_first') {
+                return $ob->getValue('lastname') . ', ' . $ob->getValue('firstname');
+            } else {
+                return $ob->getValue('firstname') . ' ' . $ob->getValue('lastname');
+            }
+        } else {
+            /* One field, we'll have to guess. */
+            $name = $ob->getValue('name');
+            $lastname = Turba::guessLastname($name);
+            if ($name_format == 'last_first' &&
+                !is_int(strpos($name, ',')) &&
+                Horde_String::length($name) > Horde_String::length($lastname)) {
+                $name = preg_replace('/\s+' . preg_quote($lastname, '/') . '/', '', $name);
+                $name = $lastname . ', ' . $name;
+            }
+            if ($name_format == 'first_last' &&
+                is_int(strpos($name, ',')) &&
+                Horde_String::length($name) > Horde_String::length($lastname)) {
+                $name = preg_replace('/' . preg_quote($lastname, '/') . ',\s*/', '', $name);
+                $name = $name . ' ' . $lastname;
+            }
+            return $name;
+        }
+    }
+
+    /**
+     * Returns the real name, if available, of a user.
+     *
+     * @since Turba 2.2
+     */
+    function getUserName($uid)
+    {
+        static $names = array();
+
+        if (!isset($names[$uid])) {
+            require_once 'Horde/Identity.php';
+            $ident = Identity::singleton('none', $uid);
+            $ident->setDefault($ident->getDefault());
+            $names[$uid] = $ident->getValue('fullname');
+            if (empty($names[$uid])) {
+                $names[$uid] = $uid;
+            }
+        }
+
+        return $names[$uid];
+    }
+
+    /**
+     * Gets extended permissions on an address book.
+     *
+     * @since Turba 2.1
+     *
+     * @param Turba_Driver $addressBook The address book to get extended permissions for.
+     * @param string $permission  What extended permission to get.
+     *
+     * @return mixed  The requested extended permissions value, or true if it doesn't exist.
+     */
+    function getExtendedPermission($addressBook, $permission)
+    {
+        global $perms;
+
+        // We want to check the base source as extended permissions
+        // are enforced per backend, not per share.
+        $key = $addressBook->name . ':' . $permission;
+
+        if (!$GLOBALS['perms']->exists('turba:sources:' . $key)) {
+            return true;
+        }
+
+        $allowed = $GLOBALS['perms']->getPermissions('turba:sources:' . $key);
+        if (is_array($allowed)) {
+            switch ($permission) {
+            case 'max_contacts':
+                $allowed = max($allowed);
+                break;
+            }
+        }
+        return $allowed;
+    }
+
+    /**
+     * Filters data based on permissions.
+     *
+     * @param array $in            The data we want filtered.
+     * @param string $filter       What type of data we are filtering.
+     * @param integer $permission  The PERMS_* constant we will filter on.
+     *
+     * @return array  The filtered data.
+     */
+    function permissionsFilter($in, $permission = PERMS_READ)
+    {
+        $out = array();
+
+        foreach ($in as $sourceId => $source) {
+            $driver = Turba_Driver::singleton($sourceId);
+            if (is_a($driver, 'PEAR_Error')) {
+                continue;
+            }
+
+            if ($driver->hasPermission($permission)) {
+                $out[$sourceId] = $source;
+            }
+        }
+
+        return $out;
+    }
+
+    /**
+     * Replaces all share-enabled sources in a source list with all shares
+     * from this source that the current user has access to.
+     *
+     * This will only sync shares that are unique to Horde (basically, a SQL
+     * driver source for now).  Any backend that supports ACLs or similar
+     * mechanism should be configured from within sources.php or
+     * _horde_hook_share_* calls.
+     *
+     * @param array $sources  The default $cfgSources array.
+     *
+     * @return array  The $cfgSources array.
+     */
+    function getConfigFromShares($sources)
+    {
+        global $notification;
+
+        $shares = Turba::listShares();
+
+        // Notify the user if we failed, but still return the $cfgSource array.
+        if (is_a($shares, 'PEAR_Error')) {
+            $notification->push($shares, 'horde.error');
+            return $sources;
+        }
+
+        $sortedShares = $defaults = $vbooks = array();
+        foreach (array_keys($shares) as $name) {
+            if (isset($sources[$name])) {
+                continue;
+            }
+
+            $params = @unserialize($shares[$name]->get('params'));
+            if (isset($params['type']) && $params['type'] == 'vbook') {
+                // We load vbooks last in case they're based on other shares.
+                $params['share'] = &$shares[$name];
+                $vbooks[$name] = $params;
+            } elseif (!empty($params['source']) &&
+                      !empty($sources[$params['source']]['use_shares'])) {
+                if (empty($params['name'])) {
+                    $params['name'] = $name;
+                    $shares[$name]->set('params', serialize($params));
+                    $shares[$name]->save();
+                }
+
+                // Default share?
+                if (empty($defaults[$params['source']])) {
+                    $driver = Turba_Driver::singleton($params['source']);
+                    if (!is_a($driver, 'PEAR_Error')) {
+                        $defaults[$params['source']] =
+                            $driver->checkDefaultShare(
+                                $shares[$name],
+                                $sources[$params['source']]);
+                    } else {
+                        $notification->push($driver, 'horde.error');
+                    }
+                }
+
+                $share = $sources[$params['source']];
+                $share['params']['config'] = $sources[$params['source']];
+                $share['params']['config']['params']['share'] = &$shares[$name];
+                $share['params']['config']['params']['name'] = $params['name'];
+                $share['title'] = $shares[$name]->get('name');
+                $share['type'] = 'share';
+                $share['use_shares'] = false;
+                $sortedSources[$params['source']][$name] = $share;
+            }
+        }
+
+        // Check for the user's default share and built new source list.
+        $newSources = array();
+        foreach (array_keys($sources) as $source) {
+            if (empty($sources[$source]['use_shares'])) {
+                $newSources[$source] = $sources[$source];
+                continue;
+            }
+            if (isset($sortedSources[$source])) {
+                $newSources = array_merge($newSources, $sortedSources[$source]);
+            }
+            if (Horde_Auth::getAuth() && empty($defaults[$source])) {
+                // User's default share is missing.
+                $driver = Turba_Driver::singleton($source);
+                if (!is_a($driver, 'PEAR_Error')) {
+                    $sourceKey = md5(mt_rand());
+                    $share = &$driver->createShare(
+                        $sourceKey,
+                        array('params' => array('source' => $source,
+                                                'default' => true,
+                                                'name' => Horde_Auth::getAuth())));
+                    if (is_a($share, 'PEAR_Error')) {
+                        Horde::logMessage($share, __FILE__, __LINE__, PEAR_LOG_ERR);
+                        continue;
+                    }
+
+                    $source_config = $sources[$source];
+                    $source_config['params']['share'] = &$share;
+                    $newSources[$sourceKey] = $source_config;
+                } else {
+                    $notification->push($driver, 'horde.error');
+                }
+            }
+        }
+
+        // Add vbooks now that all available address books are loaded.
+        foreach ($vbooks as $name => $params) {
+            $newSources[$name] = array(
+                'title' => $shares[$name]->get('name'),
+                'type' => 'vbook',
+                'params' => $params,
+                'export' => true,
+                'browse' => true,
+                'map' => $newSources[$params['source']]['map'],
+                'search' => $newSources[$params['source']]['search'],
+                'strict' => $newSources[$params['source']]['strict'],
+                'use_shares' => false,
+            );
+        }
+
+        return $newSources;
+    }
+
+    /**
+     * Retrieve a new source config entry based on a Turba share.
+     *
+     * @param Horde_Share object  The share to base config on.
+     *
+     * @since Turba 2.2
+     */
+    function getSourceFromShare(&$share)
+    {
+        // Require a fresh config file.
+        require TURBA_BASE . '/config/sources.php';
+
+        $params = @unserialize($share->get('params'));
+        $newConfig = $cfgSources[$params['source']];
+        $newConfig['params']['config'] = $cfgSources[$params['source']];
+        $newConfig['params']['config']['params']['share'] = &$share;
+        $newConfig['params']['config']['params']['name'] = $params['name'];
+        $newConfig['title'] = $share->get('name');
+        $newConfig['type'] = 'share';
+        $newConfig['use_shares'] = false;
+
+        return $newConfig;
+    }
+
+    /**
+     * Returns all shares the current user has specified permissions to.
+     *
+     * @param boolean $owneronly   Only return address books owned by the user?
+     *                             Defaults to false.
+     * @param integer $permission  Permissions to filter by.
+     *
+     * @return array  Shares the user has the requested permissions to.
+     */
+    function listShares($owneronly = false, $permission = PERMS_READ)
+    {
+        if (empty($_SESSION['turba']['has_share'])) {
+            // No backends are configured to provide shares
+            return array();
+        }
+
+        $sources = $GLOBALS['turba_shares']->listShares(
+            Horde_Auth::getAuth(), $permission,
+            $owneronly ? Horde_Auth::getAuth() : null);
+        if (is_a($sources, 'PEAR_Error')) {
+            Horde::logMessage($sources, __FILE__, __LINE__, PEAR_LOG_ERR);
+            return array();
+        }
+        return $sources;
+    }
+
+    /**
+     * Create a new Turba share.
+     *
+     * @param string $share_id The id for the new share.
+     * @param array $params Parameters for the new share.
+     *
+     * @return mixed  The new share object or PEAR_Error
+     */
+    function &createShare($share_id, $params)
+    {
+        if (!isset($params['name'])) {
+            /* Sensible default for empty display names */
+            require_once 'Horde/Identity.php';
+            $identity = Identity::singleton();
+            $name = $identity->getValue('fullname');
+            if (trim($name) == '') {
+                $name = Horde_Auth::removeHook(Horde_Auth::getAuth());
+            }
+            $name = sprintf(_("%s's Address Book"), $name);
+        } else {
+            $name = $params['name'];
+            unset($params['name']);
+        }
+
+        /* Generate the new share. */
+        $share = &$GLOBALS['turba_shares']->newShare($share_id);
+        if (is_a($share, 'PEAR_Error')) {
+            return $share;
+        }
+
+        /* Set the display name for this share. */
+        $share->set('name', $name);
+
+        /* Now any other params. */
+        foreach ($params as $key => $value) {
+            if (!is_scalar($value)) {
+                $value = serialize($value);
+            }
+            $share->set($key, $value);
+        }
+
+        $result = $GLOBALS['turba_shares']->addShare($share);
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        $result = $share->save();
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        }
+
+        /* Update share_id as backends like Kolab change it to the IMAP folder
+         * name. */
+        $share_id = $share->getName();
+
+        /* Add the new addressbook to the user's list of visible address
+         * books. */
+        $prefs = $GLOBALS['prefs']->getValue('addressbooks');
+        if ($prefs) {
+            $prefs = explode("\n", $prefs);
+            if (array_search($share_id, $prefs) === false) {
+                $prefs[] = $share_id;
+                $GLOBALS['prefs']->setValue('addressbooks', implode("\n", $prefs));
+            }
+        }
+
+        return $share;
+    }
+
+    /**
+     * Build Turba's list of menu items.
+     */
+    function getMenu($returnType = 'object')
+    {
+        $menu = new Horde_Menu();
+
+        if (!empty($_SESSION['turba']['has_share'])) {
+            $menu->add(Horde::applicationUrl('addressbooks/index.php'), _("_My Address Books"), 'turba.png');
+        }
+        if ($GLOBALS['browse_source_count']) {
+            $menu->add(Horde::applicationUrl('browse.php'), _("_Browse"), 'menu/browse.png', null, null, null, (($GLOBALS['prefs']->getValue('initial_page') == 'browse.php' && basename($_SERVER['PHP_SELF']) == 'index.php' && basename(dirname($_SERVER['PHP_SELF'])) != 'addressbooks') || (basename($_SERVER['PHP_SELF']) == 'browse.php' && Horde_Util::getFormData('key') != '**search')) ? 'current' : '__noselection');
+        }
+        if (count($GLOBALS['addSources'])) {
+            $menu->add(Horde::applicationUrl('add.php'), _("_New Contact"), 'menu/new.png');
+        }
+        $menu->add(Horde::applicationUrl('search.php'), _("_Search"), 'search.png', $GLOBALS['registry']->getImageDir('horde'), null, null, (($GLOBALS['prefs']->getValue('initial_page') == 'search.php' && basename($_SERVER['PHP_SELF']) == 'index.php' && strpos($_SERVER['PHP_SELF'], 'addressbooks/index.php') === false) || (basename($_SERVER['PHP_SELF']) == 'browse.php' && Horde_Util::getFormData('key') == '**search')) ? 'current' : null);
+
+        /* Import/Export */
+        if ($GLOBALS['conf']['menu']['import_export']) {
+            $menu->add(Horde::applicationUrl('data.php'), _("_Import/Export"), 'data.png', $GLOBALS['registry']->getImageDir('horde'));
+        }
+
+        /* Print. */
+        if (isset($GLOBALS['print_link'])) {
+            $menu->add($GLOBALS['print_link'], _("_Print"), 'print.png', $GLOBALS['registry']->getImageDir('horde'), '_blank', 'return !popup(this.href);', '__noselection');
+        }
+
+        return ($returnType == 'object')
+            ? $menu
+            : $menu->render();
+    }
+
+}
diff --git a/turba/lib/View/Browse.php b/turba/lib/View/Browse.php
new file mode 100644 (file)
index 0000000..c313df7
--- /dev/null
@@ -0,0 +1,402 @@
+<?php
+/**
+ * The Turba_View_Browse class provides the logic for browsing lists
+ * of contacts.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you did
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+class Turba_View_Browse {
+
+    /**
+     * @var array
+     */
+    var $_params;
+
+    /**
+     * Constructor;
+     *
+     * @param array $params Stuff to import into the view's scope.
+     */
+    public function __construct($params)
+    {
+        $this->_params = $params;
+    }
+
+    function updateSortOrderFromVars()
+    {
+        extract($this->_params, EXTR_REFS);
+
+        if (strlen($sortby = $vars->get('sortby'))) {
+            $sources = Turba::getColumns();
+            $columns = isset($sources[$source]) ? $sources[$source] : array();
+            $column_name = Turba::getColumnName($sortby, $columns);
+
+            $append = true;
+            $ascending = ($vars->get('sortdir') == 0);
+            if ($vars->get('sortadd')) {
+                $sortorder = Turba::getPreferredSortOrder();
+                foreach ($sortorder as $i => $elt) {
+                    if ($elt['field'] == $column_name) {
+                        $sortorder[$i]['ascending'] = $ascending;
+                        $append = false;
+                    }
+                }
+            } else {
+                $sortorder = array();
+            }
+            if ($append) {
+                $sortorder[] = array('field' => $column_name,
+                                     'ascending' => $ascending);
+            }
+            $prefs->setValue('sortorder', serialize($sortorder));
+        }
+    }
+
+    function run()
+    {
+        extract($this->_params, EXTR_REFS);
+
+        $this->updateSortOrderFromVars();
+
+        $title = _("Address Book Listing");
+        if (!$browse_source_count && $vars->get('key') != '**search') {
+            $notification->push(_("There are no browseable address books."), 'horde.warning');
+        } else {
+            $driver = Turba_Driver::singleton($source);
+            if (is_a($driver, 'PEAR_Error')) {
+                $notification->push(sprintf(_("Failed to access the address book: %s"), $driver->getMessage()), 'horde.error');
+                unset($driver);
+            }
+        }
+
+        if (isset($driver)) {
+            $actionID = $vars->get('actionID');
+
+            // Run through the action handlers.
+            switch ($actionID) {
+            case 'delete':
+                $keys = $vars->get('objectkeys');
+                if (!is_array($keys)) {
+                    break;
+                }
+
+                $key = false;
+                if ($vars->exists('key')) {
+                    $key = $vars->get('key');
+                }
+                if ($key && $key != '**search') {
+                    // We are removing a contact from a list.
+                    $errorCount = 0;
+                    $list = &$driver->getObject($key);
+                    foreach ($keys as $sourceKey) {
+                        list($objectSource, $objectKey) = explode(':', $sourceKey, 2);
+                        if (!$list->removeMember($objectKey, $objectSource)) {
+                            $errorCount++;
+                        }
+                    }
+                    if (!$errorCount) {
+                        $notification->push(sprintf(_("Successfully removed %d contact(s) from list."), count($keys)), 'horde.success');
+                    } elseif (count($keys) == $errorCount) {
+                        $notification->push(sprintf(_("Error removing %d contact(s) from list."), count($keys)), 'horde.error');
+                    } else {
+                        $notification->push(sprintf(_("Error removing %d of %d requested contact(s) from list."), $errorCount, count($keys)), 'horde.error');
+                    }
+                    $list->store();
+                } else {
+                    // We are deleting an object.
+                    $errorCount = 0;
+                    foreach ($keys as $sourceKey) {
+                        list($objectSource, $objectKey) = explode(':', $sourceKey, 2);
+                        if (is_a($driver->delete($objectKey), 'PEAR_Error')) {
+                            $errorCount++;
+                        }
+                    }
+                    if (!$errorCount) {
+                        $notification->push(sprintf(_("Successfully deleted %d contact(s)."), count($keys)), 'horde.success');
+                    } elseif (count($keys) == $errorCount) {
+                        $notification->push(sprintf(_("Error deleting %d contact(s)."), count($keys)), 'horde.error');
+                    } else {
+                        $notification->push(sprintf(_("Error deleting %d of %d requested contacts(s)."), $errorCount, count($keys)), 'horde.error');
+                    }
+                }
+                break;
+
+            case 'move':
+            case 'copy':
+                $keys = $vars->get('objectkeys');
+                if (!(is_array($keys) && $keys)) {
+                    break;
+                }
+
+                // If we have data, try loading the target address book driver.
+                $targetSource = $vars->get('targetAddressbook');
+                $targetDriver = Turba_Driver::singleton($targetSource);
+                if (is_a($targetDriver, 'PEAR_Error')) {
+                    $notification->push(sprintf(_("Failed to access the address book: %s"), $targetDriver->getMessage()), 'horde.error');
+                    break;
+                }
+
+                $max_contacts = Turba::getExtendedPermission($targetDriver, 'max_contacts');
+                if ($max_contacts !== true
+                    && $max_contacts <= $targetDriver->count()) {
+                    $message = @htmlspecialchars(sprintf(_("You are not allowed to create more than %d contacts in \"%s\"."), $max_contacts, $cfgSources[$targetSource]['title']), ENT_COMPAT, Horde_Nls::getCharset());
+                    if (!empty($this->_conf['hooks']['permsdenied'])) {
+                        $message = Horde::callHook('_perms_hook_denied', array('turba:max_contacts'), 'horde', $message);
+                    }
+                    $notification->push($message, 'horde.error', array('content.raw'));
+                    break;
+                }
+
+                foreach ($keys as $sourceKey) {
+                    // Split up the key into source and object ids.
+                    list($objectSource, $objectKey) = explode(':', $sourceKey, 2);
+
+                    // Ignore this entry if the target is the same as the
+                    // source.
+                    if ($objectSource == $targetDriver->getName()) {
+                        continue;
+                    }
+
+                    // Try and load the driver for the source.
+                    $sourceDriver = Turba_Driver::singleton($objectSource);
+                    if (is_a($sourceDriver, 'PEAR_Error')) {
+                        $notification->push(sprintf(_("Failed to access the address book: %s"), $sourceDriver->getMessage()), 'horde.error');
+                        continue;
+                    }
+
+                    $object = &$sourceDriver->getObject($objectKey);
+                    if (is_a($object, 'PEAR_Error')) {
+                        $notification->push(sprintf(_("Failed to find object to be added: %s"), $object->getMessage()), 'horde.error');
+                        continue;
+                    } elseif ($object->isGroup()) {
+                        if ($actionID == 'move') {
+                            $notification->push(sprintf(_("\"%s\" was not moved because it is a list."), $object->getValue('name')), 'horde.warning');
+                        } else {
+                            $notification->push(sprintf(_("\"%s\" was not copied because it is a list."), $object->getValue('name')), 'horde.warning');
+                        }
+                        continue;
+                    }
+
+                    // Try adding to the target.
+                    $objAttributes = array();
+
+                    // Get the values through the Turba_Object class.
+                    foreach ($targetDriver->getCriteria() as $info_key => $info_val) {
+                        if (!is_array($targetDriver->map[$info_key]) ||
+                            isset($targetDriver->map[$info_key]['attribute'])) {
+                            $objAttributes[$info_key] = $object->getValue($info_key);
+                        }
+                    }
+                    unset($objAttributes['__owner']);
+
+                    $result = $targetDriver->add($objAttributes);
+                    if (is_a($result, 'PEAR_Error')) {
+                        $notification->push(sprintf(_("Failed to add %s to %s: %s"), $object->getValue('name'), $targetDriver->title, $result->getMessage()), 'horde.error');
+                        break;
+                    }
+
+                    $notification->push(sprintf(_("Successfully added %s to %s"), $object->getValue('name'), $targetDriver->title), 'horde.success');
+
+                    // If we're moving objects, and we succeeded,
+                    // delete them from the original source now.
+                    if ($actionID == 'move') {
+                        if (is_a($sourceDriver->delete($objectKey), 'PEAR_Error')) {
+                            $notification->push(sprintf(_("There was an error deleting \"%s\" from the source address book."), $object->getValue('name')), 'horde.error');
+                        }
+
+                        /* Log the adding of this item in the history again,
+                         * because otherwise the delete log would be after the
+                         * add log. */
+                        $history = Horde_History::singleton();
+                        $history->log('turba:' . $targetDriver->getName() . ':' . $objAttributes['__uid'],
+                                      array('action' => 'add'), true);
+                    }
+                }
+                break;
+
+            case 'add':
+                // Add a contact to a list.
+                $keys = $vars->get('objectkeys');
+                $targetKey = $vars->get('targetList');
+                if (empty($targetKey)) {
+                    break;
+                }
+
+                if (!$vars->exists('targetNew') || $vars->get('targetNew') == '') {
+                    list($targetSource, $targetKey) = explode(':', $targetKey, 2);
+                    if (!isset($cfgSources[$targetSource])) {
+                        break;
+                    }
+                    $targetDriver = Turba_Driver::singleton($targetSource);
+                    $target = &$targetDriver->getObject($targetKey);
+                    if (is_a($target, 'PEAR_Error')) {
+                        $notification->push($target, 'horde.error');
+                        break;
+                    }
+                } else {
+                    $targetSource = $vars->get('targetAddressbook');
+                    $targetDriver = Turba_Driver::singleton($targetSource);
+                }
+                if (!empty($target) && $target->isGroup()) {
+                    // Adding contact to an existing list.
+                    if (is_array($keys)) {
+                        $errorCount = 0;
+                        foreach ($keys as $sourceKey) {
+                            list($objectSource, $objectKey) = explode(':', $sourceKey, 2);
+                            if (!$target->addMember($objectKey, $objectSource)) {
+                                $errorCount++;
+                            }
+                        }
+                        if (!$errorCount) {
+                            $notification->push(sprintf(_("Successfully added %d contact(s) to list."), count($keys)), 'horde.success');
+                        } elseif ($errorCount == count($keys)) {
+                            $notification->push(sprintf(_("Error adding %d contact(s) to list."), count($keys)), 'horde.error');
+                        } else {
+                            $notification->push(sprintf(_("Error adding %d of %d requested contact(s) to list."), $errorCount, count($keys)), 'horde.error');
+                        }
+                        $target->store();
+                    }
+                } else {
+                    // Check permissions.
+                    $max_contacts = Turba::getExtendedPermission($driver, 'max_contacts');
+                    if ($max_contacts !== true &&
+                        $max_contacts <= $driver->count()) {
+                        $message = @htmlspecialchars(sprintf(_("You are not allowed to create more than %d contacts in \"%s\"."), $max_contacts, $cfgSources[$source]['title']), ENT_COMPAT, Horde_Nls::getCharset());
+                        if (!empty($this->_conf['hooks']['permsdenied'])) {
+                            $message = Horde::callHook('_perms_hook_denied', array('turba:max_contacts'), 'horde', $message);
+                        }
+
+                        $notification->push($message, 'horde.error', array('content.raw'));
+                        break;
+                    }
+
+                    // Adding contact to a new list.
+                    $newList = array('__owner' => $targetDriver->getContactOwner(),
+                                     '__type' => 'Group',
+                                     'name' => $targetKey);
+                    $targetKey = $targetDriver->add($newList);
+                    if (!is_a($targetKey, 'PEAR_Error')) {
+                        $target = &$targetDriver->getObject($targetKey);
+                        if (!is_a($target, 'PEAR_Error') && $target->isGroup()) {
+                            $notification->push(sprintf(_("Successfully created the contact list \"%s\"."), $newList['name']), 'horde.success');
+                            if (is_array($keys)) {
+                                $errorCount = 0;
+                                foreach ($keys as $sourceKey) {
+                                    list($objectSource, $objectKey) = explode(':', $sourceKey, 2);
+                                    if (!$target->addMember($objectKey, $objectSource)) {
+                                        $errorCount++;
+                                    }
+                                }
+                                if (!$errorCount) {
+                                    $notification->push(sprintf(_("Successfully added %d contact(s) to list."), count($keys)), 'horde.success');
+                                } elseif ($errorCount == count($keys)) {
+                                    $notification->push(sprintf(_("Error adding %d contact(s) to list."), count($keys)), 'horde.error');
+                                } else {
+                                    $notification->push(sprintf(_("Error adding %d of %d requested contact(s) to list."), $errorCount, count($keys)), 'horde.error');
+                                }
+                                $target->store();
+                            }
+                        }
+                    } else {
+                        $notification->push(_("There was an error creating a new list."), 'horde.error');
+                    }
+                }
+                break;
+            }
+
+            // We might get here from the search page but are not allowed to browse
+            // the current address book.
+            if ($actionID && empty($cfgSources[$source]['browse'])) {
+                header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+                exit;
+            }
+        }
+
+        $templates = array();
+        if (isset($driver)) {
+            $templates[] = '/browse/javascript.inc';
+
+            // Read the columns to display from the preferences.
+            $sources = Turba::getColumns();
+            $columns = isset($sources[$source]) ? $sources[$source] : array();
+            $sortorder = Turba::getPreferredSortOrder();
+
+            if ($vars->get('key')) {
+                // We are displaying a list.
+                $list = &$driver->getObject($vars->get('key'));
+                if (isset($list) && is_object($list) &&
+                    !is_a($list, 'PEAR_Error') && $list->isGroup()) {
+                    $title = sprintf(_("Contacts in list: %s"),
+                                     $list->getValue('name'));
+                    $templates[] = '/browse/header.inc';
+
+                    // Show List Members.
+                    if (!is_object($results = $list->listMembers($sortorder))) {
+                        $notification->push(_("Failed to browse list"), 'horde.error');
+                    } else {
+                        if ($results->count() != $list->count()) {
+                            $count = $list->count() - $results->count();
+                            $notification->push(sprintf(ngettext("There is %d contact in this list that is not viewable to you", "There are %d contacts in this list that are not viewable to you", $count), $count), 'horde.message');
+                        }
+                        $view = new Turba_ListView($results, null, $columns);
+                        $view->setType('list');
+                    }
+                } else {
+                    $notification->push(_("There was an error displaying the list"), 'horde.error');
+                }
+            } else {
+                // We are displaying an address book.
+                $title = $cfgSources[$source]['title'];
+                $templates[] = '/browse/header.inc';
+                if (empty($cfgSources[$source]['browse'])) {
+                    $notification->push(_("Your default address book is not browseable."), 'horde.warning');
+                } else {
+                    $type_filter = array();
+                    switch ($vars->get('show')) {
+                    case 'contacts':
+                        $type_filter = array('__type' => 'Object');
+                        break;
+
+                    case 'lists':
+                        $type_filter = array('__type' => 'Group');
+                        break;
+                    }
+                    $results = $driver->search($type_filter, $sortorder, 'AND', $columns);
+                    if (!is_object($results)) {
+                        $notification->push(_("Failed to browse the directory"), 'horde.error');
+                    } elseif (is_a($results, 'PEAR_Error')) {
+                        $notification->push($results, 'horde.error');
+                    } else {
+                        $view = new Turba_ListView($results, null, $columns);
+                        $view->setType('directory');
+                    }
+                }
+            }
+        } else {
+            $templates[] = '/browse/header.inc';
+        }
+
+        Horde::addScriptFile('prototype.js', 'horde', true);
+        Horde::addScriptFile('QuickFinder.js', 'horde', true);
+        Horde::addScriptFile('effects.js', 'horde', true);
+        Horde::addScriptFile('redbox.js', 'horde', true);
+        require TURBA_TEMPLATES . '/common-header.inc';
+        require TURBA_TEMPLATES . '/menu.inc';
+        foreach ($templates as $template) {
+            require TURBA_TEMPLATES . $template;
+        }
+
+        if (isset($view) && is_object($view)) {
+            $view->display();
+        }
+
+        require $registry->get('templates', 'horde') . '/common-footer.inc';
+    }
+
+}
diff --git a/turba/lib/View/Contact.php b/turba/lib/View/Contact.php
new file mode 100644 (file)
index 0000000..9183c32
--- /dev/null
@@ -0,0 +1,125 @@
+<?php
+/** Turba_ContactForm */
+require_once TURBA_BASE . '/lib/Forms/Contact.php';
+
+/**
+ * The Turba_View_Contact:: class provides an API for viewing events.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+class Turba_View_Contact {
+
+    /**
+     * @var Turba_Object
+     */
+    var $contact;
+
+    /**
+     * @var boolean
+     */
+    var $print = false;
+
+    /**
+     * @param Turba_Object &$contact
+     */
+    public function __construct(&$contact, $print = null)
+    {
+        $this->contact = &$contact;
+        if (!is_null($print)) {
+            $this->print = $print;
+        }
+
+        /* Set print link. */
+        if (!$this->print) {
+            $GLOBALS['print_link'] = Horde_Util::addParameter($this->contact->url(), 'print', 1);
+        }
+    }
+
+    function getTitle()
+    {
+        if (!$this->contact || is_a($this->contact, 'PEAR_Error')) {
+            return _("Not Found");
+        }
+        return $this->contact->getValue('name');
+    }
+
+    function html($active = true)
+    {
+        global $conf, $prefs, $registry;
+
+        if (!$this->contact || is_a($this->contact, 'PEAR_Error') || !$this->contact->hasPermission(PERMS_READ)) {
+            echo '<h3>' . _("The requested contact was not found.") . '</h3>';
+            return;
+        }
+
+        $vars = new Horde_Variables();
+        $form = new Turba_ContactForm($vars, $this->contact);
+        $userId = Horde_Auth::getAuth();
+
+        /* Get the contact's history. */
+        if ($this->contact->getValue('__uid')) {
+            $history = Horde_History::singleton();
+            $log = $history->getHistory($this->contact->getGuid());
+            if ($log && !is_a($log, 'PEAR_Error')) {
+                foreach ($log->getData() as $entry) {
+                    switch ($entry['action']) {
+                    case 'add':
+                        if ($userId != $entry['who']) {
+                            $createdby = sprintf(_("by %s"), Turba::getUserName($entry['who']));
+                        } else {
+                            $createdby = _("by me");
+                        }
+                        $v = &$form->addVariable(_("Created"), 'object[__created]', 'text', false, false);
+                        $v->disable();
+                        $vars->set('object[__created]', strftime($prefs->getValue('date_format'), $entry['ts']) . ' ' . date($prefs->getValue('twentyFour') ? 'G:i' : 'g:i a', $entry['ts']) . ' ' . @htmlspecialchars($createdby, ENT_COMPAT, Horde_Nls::getCharset()));
+                        break;
+
+                    case 'modify':
+                        if ($userId != $entry['who']) {
+                            $modifiedby = sprintf(_("by %s"), Turba::getUserName($entry['who']));
+                        } else {
+                            $modifiedby = _("by me");
+                        }
+                        $v = &$form->addVariable(_("Last Modified"), 'object[__modified]', 'text', false, false);
+                        $v->disable();
+                        $vars->set('object[__modified]', strftime($prefs->getValue('date_format'), $entry['ts']) . ' ' . date($prefs->getValue('twentyFour') ? 'G:i' : 'g:i a', $entry['ts']) . ' ' . @htmlspecialchars($modifiedby, ENT_COMPAT, Horde_Nls::getCharset()));
+                        break;
+                    }
+                }
+            }
+        }
+
+        echo '<div id="Contact"' . ($active ? '' : ' style="display:none"') . '>';
+        $form->renderInactive(new Horde_Form_Renderer(), $vars);
+
+        /* Comments. */
+        if (!empty($conf['comments']['allow']) && $registry->hasMethod('forums/doComments')) {
+            $comments = $registry->call('forums/doComments', array('turba', $this->contact->driver->name . '.' . $this->contact->getValue('__key'), 'commentCallback'));
+            if (is_a($comments, 'PEAR_Error')) {
+                Horde::logMessage($comments, __FILE__, __LINE__, PEAR_LOG_DEBUG);
+                $comments = array();
+            }
+        }
+        if (!empty($comments['threads'])) {
+            echo '<br />' . $comments['threads'];
+        }
+        if (!empty($comments['comments']) && !$this->print) {
+            echo '<br />' . $comments['comments'];
+        }
+
+        echo '</div>';
+
+        if ($active && $GLOBALS['browser']->hasFeature('dom')) {
+            if ($this->contact->hasPermission(PERMS_EDIT)) {
+                $edit = new Turba_View_EditContact($this->contact);
+                $edit->html(false);
+            }
+            if ($this->contact->hasPermission(PERMS_DELETE)) {
+                $delete = new Turba_View_DeleteContact($this->contact);
+                $delete->html(false);
+            }
+        }
+    }
+
+}
diff --git a/turba/lib/View/DeleteContact.php b/turba/lib/View/DeleteContact.php
new file mode 100644 (file)
index 0000000..749465d
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+/**
+ * The Turba_View_DeleteContact:: class provides an API for viewing events.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+class Turba_View_DeleteContact {
+
+    var $contact;
+
+    /**
+     * @param Turba_Object &$contact
+     */
+    public function __construct($contact)
+    {
+        $this->contact = $contact;
+    }
+
+    function getTitle()
+    {
+        if (!$this->contact || is_a($this->contact, 'PEAR_Error')) {
+            return _("Not Found");
+        }
+        return sprintf(_("Delete %s"), $this->contact->getValue('name'));
+    }
+
+    function html($active = true)
+    {
+        global $conf, $prefs;
+
+        if (!$this->contact || is_a($this->contact, 'PEAR_Error')) {
+            echo '<h3>' . _("The requested contact was not found.") . '</h3>';
+            return;
+        }
+
+        if (!$this->contact->hasPermission(PERMS_DELETE)) {
+            if (!$this->contact->hasPermission(PERMS_READ)) {
+                echo '<h3>' . _("You do not have permission to view this contact.") . '</h3>';
+                return;
+            } else {
+                echo '<h3>' . _("You only have permission to view this contact.") . '</h3>';
+                return;
+            }
+        }
+
+        echo '<div id="DeleteContact"' . ($active ? '' : ' style="display:none"') . '>';
+?>
+<form action="delete.php" method="post">
+<?php echo Horde_Util::formInput() ?>
+<input type="hidden" name="source" value="<?php echo htmlspecialchars($this->contact->driver->name) ?>" />
+<input type="hidden" name="key" value="<?php echo htmlspecialchars($this->contact->getValue('__key')) ?>" />
+<div class="headerbox" style="padding: 8px">
+ <p><?php echo _("Permanently delete this contact?") ?></p>
+ <input type="submit" class="button" name="delete" value="<?php echo _("Delete") ?>" />
+</div>
+</form>
+</div>
+<?php
+        if ($active && $GLOBALS['browser']->hasFeature('dom')) {
+            if ($this->contact->hasPermission(PERMS_READ)) {
+                $view = new Turba_View_Contact($this->contact);
+                $view->html(false);
+            }
+            if ($this->contact->hasPermission(PERMS_EDIT)) {
+                $delete = new Turba_View_EditContact($this->contact);
+                $delete->html(false);
+            }
+        }
+    }
+
+}
diff --git a/turba/lib/View/EditContact.php b/turba/lib/View/EditContact.php
new file mode 100644 (file)
index 0000000..55d9c36
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+/** Turba_EditContactForm */
+require_once TURBA_BASE . '/lib/Forms/EditContact.php';
+
+/**
+ * The Turba_View_EditContact:: class provides an API for viewing events.
+ *
+ * @author  Chuck Hagenbuch <chuck@horde.org>
+ * @package Turba
+ */
+class Turba_View_EditContact {
+
+    var $contact;
+
+    /**
+     * @param Turba_Object $contact
+     */
+    public function __construct($contact)
+    {
+        $this->contact = $contact;
+    }
+
+    function getTitle()
+    {
+        if (!$this->contact || is_a($this->contact, 'PEAR_Error')) {
+            return _("Not Found");
+        }
+        return sprintf(_("Edit %s"), $this->contact->getValue('name'));
+    }
+
+    function html($active = true)
+    {
+        global $conf, $prefs, $vars;
+
+        if (!$this->contact || is_a($this->contact, 'PEAR_Error')) {
+            echo '<h3>' . _("The requested contact was not found.") . '</h3>';
+            return;
+        }
+
+        if (!$this->contact->hasPermission(PERMS_EDIT)) {
+            if (!$this->contact->hasPermission(PERMS_READ)) {
+                echo '<h3>' . _("You do not have permission to view this contact.") . '</h3>';
+                return;
+            } else {
+                echo '<h3>' . _("You only have permission to view this contact.") . '</h3>';
+                return;
+            }
+        }
+
+        echo '<div id="EditContact"' . ($active ? '' : ' style="display:none"') . '>';
+        $form = &new Turba_EditContactForm($vars, $this->contact);
+        $form->renderActive(new Horde_Form_Renderer, $vars, 'edit.php', 'post');
+        echo '</div>';
+
+        if ($active && $GLOBALS['browser']->hasFeature('dom')) {
+            if ($this->contact->hasPermission(PERMS_READ)) {
+                $view = new Turba_View_Contact($this->contact);
+                $view->html(false);
+            }
+            if ($this->contact->hasPermission(PERMS_DELETE)) {
+                $delete = new Turba_View_DeleteContact($this->contact);
+                $delete->html(false);
+            }
+        }
+    }
+
+}
diff --git a/turba/lib/api.php b/turba/lib/api.php
new file mode 100644 (file)
index 0000000..bcec2d6
--- /dev/null
@@ -0,0 +1,2064 @@
+<?php
+/**
+ * Turba external API interface.
+ *
+ * This file defines Turba's external API interface. Other applications can
+ * interact with Turba through this API.
+ *
+ * @package Turba
+ */
+
+$_services['perms'] = array(
+    'args' => array(),
+    'type' => '{urn:horde}hashHash'
+);
+
+$_services['removeUserData'] = array(
+    'args' => array('user' => 'string'),
+    'type' => 'boolean'
+);
+
+$_services['show'] = array(
+    'link' => '%application%/contact.php?source=|source|&key=|key|&uid=|uid|',
+);
+
+$_services['browse'] = array(
+    'args' => array('path' => 'string', 'properties' => '{urn:horde}stringArray'),
+    'type' => '{urn:horde}hashHash',
+);
+
+$_services['path_delete'] = array(
+    'args' => array('path' => 'string'),
+    'type' => 'boolean',
+);
+
+$_services['sources'] = array(
+    'args' => array('writeable' => 'boolean'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['fields'] = array(
+    'args' => array('source' => '{urn:horde}stringArray'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['list'] = array(
+    'args' => array(),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['listBy'] = array(
+    'args' => array('action' => 'string', 'timestamp' => 'int'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['getActionTimestamp'] = array(
+    'args' => array('uid' => 'string', 'action' => 'string', 'sources' => '{urn:horde}stringArray'),
+    'type' => 'int',
+);
+
+$_services['import'] = array(
+    'args' => array('content' => 'string', 'contentType' => 'string', 'source' => 'string'),
+    'type' => 'string',
+);
+
+$_services['export'] = array(
+    'args' => array('uid' => 'string', 'contentType' => 'string'),
+    'type' => 'string',
+);
+
+$_services['ownVCard'] = array(
+    'args' => array(),
+    'type' => 'string',
+);
+
+$_services['ownContact'] = array(
+    'args' => array(),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['delete'] = array(
+    'args' => array('uid' => 'string'),
+    'type' => 'boolean',
+);
+
+$_services['replace'] = array(
+    'args' => array('uid' => 'string', 'content' => 'string', 'contentType' => 'string'),
+    'type' => 'boolean',
+);
+
+$_services['search'] = array(
+    'args' => array('names' => '{urn:horde}stringArray',
+                    'sources' => '{urn:horde}stringArray',
+                    'fields' => '{urn:horde}stringArray',
+                    'matchBegin' => 'boolean',
+                    'forceSource' => 'boolean'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['getContact'] = array(
+    'args' => array('source' => 'string', 'objectId' => 'string'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['getContacts'] = array(
+    'args' => array('source' => 'string', 'objectIds' => '{urn:horde}stringArray'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['addField'] = array(
+    'args' => array('address' => 'string', 'name' => 'string', 'field' => 'string', 'value' => 'string', 'source' => 'string'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['deleteField'] = array(
+    'args' => array('address' => 'string', 'field' => 'string', 'sources' => '{urn:horde}stringArray'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['getField'] = array(
+    'args' => array('address' => 'string', 'field' => 'string', 'sources' => '{urn:horde}stringArray', 'strict' => 'boolean', 'multiple' => 'boolean'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['getAllAttributeValues'] = array(
+    'args' => array('field' => 'string', 'sources' => '{urn:horde}stringArray'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['listTimeObjectCategories'] = array(
+    'type' => '{urn:horde}stringArray'
+);
+
+$_services['listTimeObjects'] = array(
+    'args' => array('categories' => '{urn:horde}stringArray', 'start' => 'int', 'end' => 'int'),
+    'type' => '{urn:horde}hashHash'
+);
+
+$_services['getClientSource'] = array(
+    'checkperms' => false,
+    'args' => array(),
+    'type' => 'string',
+);
+
+$_services['clientFields'] = array(
+    'args' => array(),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['getClient'] = array(
+    'checkperms' => false,
+    'args' => array('objectId' => 'string'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['getClients'] = array(
+    'checkperms' => false,
+    'args' => array('objectIds' => '{urn:horde}stringArray'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['addClient'] = array(
+    'args' => array('attributes' => '{urn:horde}stringArray'),
+    'type' => 'string',
+);
+
+$_services['updateClient'] = array(
+    'args' => array('objectId' => 'string', 'attributes' => '{urn:horde}stringArray'),
+    'type' => 'string',
+);
+
+$_services['deleteClient'] = array(
+    'args' => array('objectId' => 'string'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['searchClients'] = array(
+    'checkperms' => false,
+    'args' => array('names' => '{urn:horde}stringArray',
+                    'fields' => '{urn:horde}stringArray',
+                    'matchBegin' => 'boolean'),
+    'type' => '{urn:horde}stringArray',
+);
+
+$_services['commentCallback'] = array(
+    'args' => array('id' => 'string'),
+    'type' => 'string'
+);
+
+$_services['hasComments'] = array(
+    'args' => array(),
+    'type' => 'boolean'
+);
+
+$_services['getDefaultShare'] = array(
+    'args' => array(),
+    'type' => 'string'
+);
+
+/**
+ * Removes user data.
+ *
+ * @param string $user  Name of user to remove data for.
+ *
+ * @return mixed  true on success | PEAR_Error on failure
+ */
+function _turba_removeUserData($user)
+{
+    require_once dirname(__FILE__) . '/base.php';
+
+    if (!Horde_Auth::isAdmin() && $user != Horde_Auth::getAuth()) {
+        return PEAR::raiseError(_("You are not allowed to remove user data."));
+    }
+
+    /* We need a clean copy of the $cfgSources array here.*/
+    require TURBA_BASE . '/config/sources.php';
+    $hasError = false;
+
+    foreach ($cfgSources as $source) {
+        if (empty($source['use_shares'])) {
+            // Shares not enabled for this source
+            $driver = &Turba_Driver::singleton($source);
+            if (is_a($driver, 'PEAR_Error')) {
+                Horde::logMessage($driver, __FILE__, __LINE__, PEAR_LOG_ERR);
+                $hasError = true;
+            } else {
+                $result = $driver->removeUserData($user);
+                if (is_a($result, 'PEAR_Error')) {
+                    Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+                }
+            }
+        }
+    }
+
+    /* Only attempt share removal if we have shares configured */
+    if ($_SESSION['turba']['has_share']) {
+        $shares = &$GLOBALS['turba_shares']->listShares(
+            $user, PERMS_EDIT, $user);
+
+        /* Look for the deleted user's default share and remove it */
+        foreach ($shares as $share) {
+            $params = @unserialize($share->get('params'));
+            /* Only attempt to delete the user's default share */
+            if (!empty($params['default'])) {
+                $config = Turba::getSourceFromShare($share);
+                $driver = &Turba_Driver::singleton($config);
+                $result = $driver->removeUserData($user);
+                if (is_a($result, 'PEAR_Error')) {
+                    Horde::logMessage($result, __FILE__, __LINE__, PEAR_LOG_ERR);
+                    $hasError = true;
+                }
+            }
+        }
+
+        /* Get a list of all shares this user has perms to and remove the perms */
+        $shares = $GLOBALS['turba_shares']->listShares($user);
+        if (is_a($shares, 'PEAR_Error')) {
+            Horde::logMessage($shares, __FILE__, __LINE__, PEAR_LOG_ERR);
+        }
+        foreach ($shares as $share) {
+            $share->removeUser($user);
+        }
+
+    }
+
+    if ($hasError) {
+        return PEAR::raiseError(sprintf(_("There was an error removing an address book for %s"), $user));
+    }
+
+    return true;
+}
+
+/**
+ * Callback for comment API
+ *
+ * @param integer $id  Internal data identifier
+ *
+ * @return mixed  Name of object on success | false on failure
+ */
+function _turba_commentCallback($id)
+{
+    if (!$GLOBALS['conf']['comments']['allow']) {
+        return false;
+    }
+
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    @list($source, $key) = explode('.', $id, 2);
+    if (isset($cfgSources[$source]) && $key) {
+        $driver = &Turba_Driver::singleton($source);
+        if (!is_a($driver, 'PEAR_Error')) {
+            $object = $driver->getObject($key);
+            if (!is_a($object, 'PEAR_Error')) {
+                return $object->getValue('name');
+            }
+        }
+    }
+
+    return false;
+}
+
+/**
+ * Returns if applications allows comments
+ *
+ * @return boolean
+ */
+function _turba_hasComments()
+{
+    return $GLOBALS['conf']['comments']['allow'];
+}
+
+/**
+ * Returns a list of available permissions.
+ *
+ * @return array  An array describing all available permissions.
+ */
+function _turba_perms()
+{
+    static $perms = array();
+    if (!empty($perms)) {
+        return $perms;
+    }
+
+    require_once dirname(__FILE__) . '/base.php';
+    require TURBA_BASE . '/config/sources.php';
+
+    $perms['tree']['turba']['sources'] = false;
+    $perms['title']['turba:sources'] = _("Sources");
+
+    // Run through every contact source.
+    foreach ($cfgSources as $source => $curSource) {
+        $perms['tree']['turba']['sources'][$source] = false;
+        $perms['title']['turba:sources:' . $source] = $curSource['title'];
+        $perms['tree']['turba']['sources'][$source]['max_contacts'] = false;
+        $perms['title']['turba:sources:' . $source . ':max_contacts'] = _("Maximum Number of Contacts");
+        $perms['type']['turba:sources:' . $source . ':max_contacts'] = 'int';
+    }
+
+    return $perms;
+}
+
+/**
+ * Returns a list of available sources.
+ *
+ * @param boolean $writeable  Set to true to limit to writeable sources.
+ *
+ * @return array  An array of the available sources.
+ */
+function _turba_sources($writeable = false)
+{
+    require_once dirname(__FILE__) . '/base.php';
+
+    $addressbooks = Turba::getAddressBooks($writeable ? PERMS_EDIT : PERMS_READ);
+    foreach ($addressbooks as $addressbook => $config) {
+        $addressbooks[$addressbook] = $config['title'];
+    }
+
+    return $addressbooks;
+}
+
+/**
+ * Returns a list of fields avaiable in a source.
+ *
+ * @param string $source  The name of the source
+ *
+ * @return mixed  An array describing the fields | PEAR_Error
+ */
+function _turba_fields($source = null)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources, $attributes;
+
+    if (empty($source) || !isset($cfgSources[$source])) {
+        return PEAR::raiseError(sprintf(_("Invalid address book: %s"), $source), 'horde.error', null, null, $source);
+    }
+
+    $fields = array();
+    foreach ($cfgSources[$source]['map'] as $field_name => $null) {
+        if (substr($field_name, 0, 2) != '__') {
+            $fields[$field_name] = array('name' => $field_name,
+                                         'type' => $attributes[$field_name]['type'],
+                                         'label' => $attributes[$field_name]['label'],
+                                         'search' => in_array($field_name, $cfgSources[$source]['search']));
+        }
+    }
+
+    return $fields;
+}
+
+/**
+ * Retrieve the UID for the current user's default Turba share.
+ *
+ */
+function _turba_getDefaultShare()
+{
+    global $prefs;
+
+    // Bring in turba's base and a clean copy of sources.
+    require_once dirname(__FILE__) . '/base.php';
+    require TURBA_BASE . '/config/sources.php';
+
+    if (!empty($_SESSION['turba']['has_share'])) {
+        $shares = Turba::listShares(true);
+        if (is_a($shares, 'PEAR_Error')) {
+            return false;
+        }
+        foreach ($shares as $uid => $share) {
+            $params = @unserialize($share->get('params'));
+            if (empty($params['source'])) {
+                continue;
+            }
+            $driver = &Turba_Driver::factory($params['source'], $cfgSources[$params['source']]);
+            if (is_a($driver, 'PEAR_Error')) {
+                continue;
+            }
+            if ($driver->checkDefaultShare($share, $cfgSources[$params['source']])) {
+                return $uid;
+            }
+        }
+    }
+
+    // Return Turba's default_dir as default
+    return $prefs->getValue('default_dir');
+}
+
+/**
+ * Browses through Turba's object tree.
+ *
+ * @param string $path       The path of the tree to browse.
+ * @param array $properties  The item properties to return. Defaults to 'name',
+ *                           'icon', and 'browseable'.
+ *
+ * @return array  Content of the specified path.
+ */
+function _turba_browse($path = '', $properties = array())
+{
+    function _modified($uid)
+    {
+        $modified = _turba_getActionTimestamp($uid, 'modify');
+        if (empty($modified)) {
+            $modified = _turba_getActionTimestamp($uid, 'add');
+        }
+        return $modified;
+    }
+
+    require_once dirname(__FILE__) . '/base.php';
+    global $registry, $cfgSources;
+
+    // Default properties.
+    if (!$properties) {
+        $properties = array('name', 'icon', 'browseable');
+    }
+
+    // Strip off the application name if present
+    if (substr($path, 0, 5) == 'turba') {
+        $path = substr($path, 5);
+    }
+    $path = trim($path, '/');
+    $parts = explode('/', $path);
+
+    $now = time();
+    $results = array();
+    if (empty($path)) {
+        // We always provide the "global" folder which contains address book
+        // sources that are shared among all users.  Per-user shares are shown
+        // in a folder for each respective user.
+        $results = array();
+        $shares = Turba::listShares();
+        $owners = array('global' => true);
+        foreach ($shares as $share) {
+            $owners[$share->get('owner')] = true;
+        }
+
+        foreach (array_keys($owners) as $owner) {
+            if (in_array('name', $properties)) {
+                $results['turba/' . $owner]['name'] = $owner;
+            }
+            if (in_array('icon', $properties)) {
+                $results['turba/' . $owner]['icon'] = $registry->getImageDir() . '/turba.png';
+            }
+            if (in_array('browseable', $properties)) {
+                $results['turba/' . $owner]['browseable'] = true;
+            }
+            if (in_array('contenttype', $properties)) {
+                $results['turba/' . $owner]['contenttype'] = 'httpd/unix-directory';
+            }
+            if (in_array('contentlength', $properties)) {
+                $results['turba/' . $owner]['contentlength'] = 0;
+            }
+            if (in_array('modified', $properties)) {
+                // @TODO: Get a real modification date
+                $results['turba/' . $owner]['modified'] = $now;
+            }
+            if (in_array('created', $properties)) {
+                // @TODO Get a real creation date
+                $results['turba/' . $owner]['created'] = 0;
+            }
+        }
+        return $results;
+    } elseif (count($parts) == 1) {
+        //
+        // We should either have the username that is a valid share owner or
+        // 'global'
+        //
+        if (empty($parts[0])) {
+            // We need either 'global' or a valid username with shares
+            return array();
+        }
+
+        if ($parts[0] == 'global') {
+            // The client is requesting a list of global address books.
+            $addressbooks = Turba::getAddressBooks();
+            foreach ($addressbooks as $addressbook => $info) {
+                if ($info['type'] == 'share') {
+                    // Ignore address book shares in the 'global' folder
+                    unset($addressbooks[$addressbook]);
+                }
+            }
+        } else {
+            // Assume $parts[0] is a valid username and we need to list their
+            // shared addressbooks.
+            if (empty($_SESSION['turba']['has_share'])) {
+                // No backends are configured to provide shares
+                return array();
+            }
+            $addressbooks = $GLOBALS['turba_shares']->listShares($parts[0],
+                                                                 PERMS_READ,
+                                                                 $parts[0]);
+            // The last check returns all addressbooks for the requested user,
+            // but that does not mean the requesting user has access to them.
+            // Filter out those address books for which the requesting user has
+            // no access.
+            $addressbooks = Turba::permissionsFilter($addressbooks);
+        }
+
+        $curpath = 'turba/' . $parts[0] . '/';
+        foreach ($addressbooks as $addressbook => $info) {
+            if (in_array('name', $properties)) {
+                if (is_a($info, 'Horde_Share_Object')) {
+                    $name = $info->get('title');
+                } else {
+                    $name = $info['title'];
+                 }
+                $results[$curpath . $addressbook]['name'] = $name;
+            }
+            if (in_array('icon', $properties)) {
+                $results[$curpath . $addressbook]['icon'] = $registry->getImageDir() . '/turba.png';
+            }
+            if (in_array('browseable', $properties)) {
+                $results[$curpath . $addressbook]['browseable'] = true;
+            }
+            if (in_array('contenttype', $properties)) {
+                $results[$curpath . $addressbook]['contenttype'] = 'httpd/unix-directory';
+            }
+            if (in_array('contentlength', $properties)) {
+                $results[$curpath . $addressbook]['contentlength'] = 0;
+            }
+            if (in_array('modified', $properties)) {
+                // @TODO: Get a real modification date
+                $results[$curpath . $addressbook]['modified'] = $now;
+            }
+            if (in_array('created', $properties)) {
+                // @TODO Get a real creation date
+                $results[$curpath . $addressbook]['created'] = 0;
+            }
+        }
+        return $results;
+
+    } elseif (count($parts) == 2) {
+        //
+        // The client is requesting all contacts from a given addressbook
+        //
+        if (empty($parts[0]) || empty($parts[1])) {
+            // $parts[0] must be either 'global' or a valid user with shares
+            // $parts[1] must be an address book ID
+            return array();
+        }
+
+        $addressbooks = Turba::getAddressBooks();
+        if (!isset($addressbooks[$parts[1]])) {
+            // We must have a valid addressbook to continue.
+            return array();
+        }
+
+        // Load the Turba driver.
+        $driver = &Turba_Driver::singleton($parts[1]);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $cfgSources[$parts[1]]);
+        }
+
+        $contacts = $driver->search(array());
+        if (is_a($contacts, 'PEAR_Error')) {
+            return $contacts;
+        }
+
+        $contacts->reset();
+        $curpath = 'turba/' . $parts[0] . '/' . $parts[1] . '/';
+        while ($contact = $contacts->next()) {
+            $key = $curpath . $contact->getValue('__key');
+            if (in_array('name', $properties)) {
+                $results[$key]['name'] = Turba::formatName($contact);
+            }
+            if (in_array('icon', $properties)) {
+                $results[$key]['icon'] = $registry->getImageDir('horde') . '/mime/vcard.png';
+            }
+            if (in_array('browseable', $properties)) {
+                $results[$key]['browseable'] = false;
+            }
+            if (in_array('contenttype', $properties)) {
+                $results[$key]['contenttype'] = 'text/x-vcard';
+            }
+            if (in_array('contentlength', $properties)) {
+                $data = _turba_export($contact->getValue('__uid'), 'text/x-vcard', $contact->getSource());
+                if (is_a($data, 'PEAR_Error')) {
+                    $data = '';
+                }
+                $results[$key]['contentlength'] = strlen($data);
+            }
+            if (in_array('modified', $properties)) {
+                $results[$key]['modified'] = _modified($contact->getValue('__uid'));
+            }
+            if (in_array('created', $properties)) {
+                $results[$key]['created'] = _turba_getActionTimestamp($contact->getValue('__uid'), 'add');
+            }
+        }
+
+        return $results;
+
+    } elseif (count($parts) == 3) {
+        //
+        // The client is requesting an individual contact
+        //
+        $addressbooks = Turba::getAddressBooks();
+        if (!isset($addressbooks[$parts[1]])) {
+            // We must have a valid addressbook to continue.
+            return array();
+        }
+
+        // Load the Turba driver.
+        $driver = &Turba_Driver::singleton($parts[1]);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $cfgSources[$parts[1]]);
+        }
+
+        $contact = &$driver->getObject($parts[2]);
+        if (is_a($contact, 'PEAR_Error')) {
+            return $contact;
+        }
+
+        $result = array('data' => _turba_export($contact->getValue('__uid'), 'text/x-vcard', $contact->getSource()),
+                        'mimetype' => 'text/x-vcard');
+        $modified = _modified($contact->getValue('__uid'));
+        if (!empty($modified)) {
+            $result['mtime'] = $modified;
+        }
+        return $result;
+    } else {
+        return PEAR::raiseError(_("Malformed request."));
+    }
+}
+
+/**
+ * Deletes a file from the Turba tree.
+ *
+ * @param string $path  The path to the file.
+ *
+ * @return mixed  The event's UID, or a PEAR_Error on failure.
+ */
+function _turba_path_delete($path)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $registry, $cfgSources;
+
+    // Strip off the application name if present
+    if (substr($path, 0, 5) == 'turba') {
+        $path = substr($path, 5);
+    }
+    $path = trim($path, '/');
+    $parts = explode('/', $path);
+
+    $now = time();
+    $results = array();
+
+    if (count($parts) < 3) {
+        // Deletes must be on individual contacts
+        return PEAR::raiseError(_("Delete denied."), 403);
+    }
+    if (!array_key_exists($parts[1], Turba::getAddressBooks())) {
+        return PEAR::raiseError("Address book does not exist", 404);
+    }
+
+    // Load the Turba driver.
+    $driver = &Turba_Driver::singleton($parts[1]);
+    if (is_a($driver, 'PEAR_Error')) {
+        return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 500, null, null, $cfgSources[$parts]);
+    }
+
+    $ret = $driver->delete($parts[2]);
+    if (is_a($ret, 'PEAR_Error')) {
+        // A deeper error occurred.  Make sure the code is a valid HTTP response
+        $ret->code = 500;
+        return $ret;
+    }
+}
+
+/**
+ * Returns an array of UIDs for all contacts that the current user is
+ * authorized to see.
+ *
+ * @param string|array $sources  The name(s) of the source(s) to return
+ *                               contacts of. If left empty, the current user's
+ *                               sync sources or default source are used.
+ *
+ * @return array  An array of UIDs for all contacts the user can access.
+ */
+function _turba_list($sources = null)
+{
+    require_once dirname(__FILE__) . '/base.php';
+
+    global $cfgSources, $prefs;
+
+    /* Get default address book from user preferences. */
+    if (empty($sources)) {
+        $sources = @unserialize($prefs->getValue('sync_books'));
+    } elseif (!is_array($sources)) {
+        $sources = array($sources);
+    }
+    if (empty($sources)) {
+        $sources = array(Turba::getDefaultAddressbook());
+    }
+    if (empty($sources)) {
+        return PEAR::raiseError(_("No address book specified"), 'horde.error');
+    }
+
+    $uids = array();
+    foreach ($sources as $source) {
+        if (empty($source) || !isset($cfgSources[$source])) {
+            return PEAR::raiseError(sprintf(_("Invalid address book: %s"), $source), 'horde.error', null, null, $source);
+        }
+
+        $storage = &Turba_Driver::singleton($source);
+        if (is_a($storage, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $storage->getMessage()), 'horde.error', null, null, $source);
+        }
+
+        $results = $storage->search(array());
+
+        if (is_a($results, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Error searching the address book: %s"), $results->getMessage()), 'horde.error', null, null, $source);
+        }
+
+        foreach ($results->objects as $o) {
+            $uids[] = $o->getValue('__uid');
+        }
+    }
+
+    return $uids;
+}
+
+/**
+ * Returns an array of UIDs for contacts that have had $action happen since
+ * $timestamp.
+ *
+ * @param string  $action        The action to check for - add, modify, or
+ *                               delete.
+ * @param integer $timestamp     The time to start the search.
+ * @param string|array $sources  The source(s) for which to retrieve the
+ *                               history.
+ *
+ * @return array  An array of UIDs matching the action and time criteria.
+ */
+function _turba_listBy($action, $timestamp, $sources = null)
+{
+    global $prefs, $cfgSources;
+    require_once dirname(__FILE__) . '/base.php';
+
+    /* Get default address book from user preferences. */
+    if (empty($sources)) {
+        $sources = @unserialize($prefs->getValue('sync_books'));
+    } elseif (!is_array($sources)) {
+        $sources = array($sources);
+    }
+    if (empty($sources)) {
+        $sources = array(Turba::getDefaultAddressbook());
+    }
+    if (empty($sources)) {
+        return PEAR::raiseError(_("No address book specified"), 'horde.error');
+    }
+
+    $uids = array();
+    foreach ($sources as $source) {
+        if (empty($source) || !isset($cfgSources[$source])) {
+            return PEAR::raiseError(sprintf(_("Invalid address book: %s"), $source), 'horde.error', null, null, $source);
+        }
+
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $source);
+        }
+
+        $history = &Horde_History::singleton();
+        $histories = $history->getByTimestamp('>', $timestamp,
+                                              array(array('op' => '=',
+                                                          'field' => 'action',
+                                                          'value' => $action)),
+                                              'turba:' . $driver->getName());
+        if (is_a($histories, 'PEAR_Error')) {
+            return $histories;
+        }
+
+        // Strip leading turba:addressbook:.
+        $uids = array_merge($uids,
+                            str_replace('turba:' . $driver->getName() . ':',
+                                        '',
+                                        array_keys($histories)));
+    }
+
+    return $uids;
+}
+
+/**
+ * Returns the timestamp of an operation for a given uid an action.
+ *
+ * @param string $uid            The uid to look for.
+ * @param string $action         The action to check for - add, modify, or
+ *                               delete.
+ * @param string|array $sources  The source(s) for which to retrieve the
+ *                               history.
+ *
+ * @return integer  The timestamp for this action.
+ */
+function _turba_getActionTimestamp($uid, $action, $sources = null)
+{
+    global $prefs, $cfgSources;
+    require_once dirname(__FILE__) . '/base.php';
+
+    /* Get default address book from user preferences. */
+    if (empty($sources)) {
+        $sources = @unserialize($prefs->getValue('sync_books'));
+    } elseif (!is_array($sources)) {
+        $sources = array($sources);
+    }
+    if (empty($sources)) {
+        $sources = array(Turba::getDefaultAddressbook());
+    }
+    if (empty($sources)) {
+        return PEAR::raiseError(_("No address book specified"), 'horde.error');
+    }
+
+    foreach ($sources as $source) {
+        if (empty($source) || !isset($cfgSources[$source])) {
+            return PEAR::raiseError(sprintf(_("Invalid address book: %s"), $source), 'horde.error', null, null, $source);
+        }
+
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $source);
+        }
+
+        $history = &Horde_History::singleton();
+        $ts = $history->getActionTimestamp('turba:' . $driver->getName()
+                                           . ':' . $uid,
+                                           $action);
+        if (!empty($ts)) {
+            return $ts;
+        }
+    }
+
+    return 0;
+}
+
+/**
+ * Import a contact represented in the specified contentType.
+ *
+ * @param string $content      The content of the contact.
+ * @param string $contentType  What format is the data in? Currently supports
+ *                             array, text/directory, text/vcard and
+ *                             text/x-vcard.
+ * @param string $source       The source into which the contact will be
+ *                             imported.
+ *
+ * @return string  The new UID, or false on failure.
+ */
+function _turba_import($content, $contentType = 'array', $import_source = null)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources, $prefs;
+
+    /* Get default address book from user preferences. */
+    if (empty($import_source)) {
+        $import_source = $prefs->getValue('default_dir');
+        /* On new installations default_dir is not set, use first source
+         * instead. */
+        if (empty($import_source)) {
+            $import_source = key(Turba::getAddressBooks(PERMS_EDIT));
+        }
+    }
+
+    // Check existance of and permissions on the specified source.
+    if (!isset($cfgSources[$import_source])) {
+        return PEAR::raiseError(sprintf(_("Invalid address book: %s"),
+                                        $import_source),
+                                'horde.warning');
+    }
+
+    $driver = &Turba_Driver::singleton($import_source);
+    if (is_a($driver, 'PEAR_Error')) {
+        return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $import_source);
+    }
+
+    if (!$driver->hasPermission(PERMS_EDIT)) {
+        return PEAR::raiseError(_("Permission denied"), 'horde.error', null, null, $import_source);
+    }
+
+    /* Create a category manager. */
+    require_once 'Horde/Prefs/CategoryManager.php';
+    $cManager = new Prefs_CategoryManager();
+    $categories = $cManager->get();
+
+    if (!is_a($content, 'Horde_iCalendar_vcard')) {
+        switch ($contentType) {
+        case 'array':
+            break;
+
+        case 'text/x-vcard':
+        case 'text/vcard':
+        case 'text/directory':
+            require_once 'Horde/iCalendar.php';
+            $iCal = new Horde_iCalendar();
+            if (!$iCal->parsevCalendar($content)) {
+                return PEAR::raiseError(_("There was an error importing the iCalendar data."));
+            }
+            switch ($iCal->getComponentCount()) {
+            case 0:
+                return PEAR::raiseError(_("No vCard data was found."));
+
+            case 1:
+                $content = $iCal->getComponent(0);
+                break;
+
+            default:
+                $ids = array();
+                foreach ($iCal->getComponents() as $c) {
+                    if (is_a($c, 'Horde_iCalendar_vcard')) {
+                        $content = $driver->toHash($c);
+                        $result = $driver->search($content);
+                        if (is_a($result, 'PEAR_Error')) {
+                            return $result;
+                        } elseif ($result->count() > 0) {
+                            continue;
+                        }
+                        $result = $driver->add($content);
+                        if (is_a($result, 'PEAR_Error')) {
+                            return $result;
+                        }
+                        if (!empty($content['category']) &&
+                            !in_array($content['category'], $categories)) {
+                            $cManager->add($content['category']);
+                            $categories[] = $content['category'];
+                        }
+                        $ids[] = $result;
+                    }
+                }
+                return $ids;
+            }
+            break;
+
+        default:
+            return PEAR::raiseError(sprintf(_("Unsupported Content-Type: %s"), $contentType));
+        }
+    }
+
+    if (is_a($content, 'Horde_iCalendar_vcard')) {
+        $content = $driver->toHash($content);
+    }
+
+    // Check if the entry already exists in the data source:
+    $result = $driver->search($content);
+    if (is_a($result, 'PEAR_Error')) {
+        return $result;
+    } elseif ($result->count() > 0) {
+        $o = $result->objects[0];
+        return PEAR::raiseError(_("Already Exists"), 'horde.message', null, null, $o->getValue('__uid'));
+    }
+
+    $result = $driver->add($content);
+    if (is_a($result, 'PEAR_Error')) {
+        return $result;
+    }
+
+    if (!empty($content['category']) &&
+        !in_array($content['category'], $categories)) {
+        $cManager->add($content['category']);
+    }
+
+    $object = &$driver->getObject($result);
+    return is_a($object, 'PEAR_Error') ? $object : $object->getValue('__uid');
+}
+
+/**
+ * Export a contact, identified by UID, in the requested contentType.
+ *
+ * @param string $uid            Identify the contact to export.
+ * @param mixed $contentType     What format should the data be in?
+ *                               Either a string with one of:
+ *                               - text/directory
+ *                               - text/vcard
+ *                               - text/x-vcard
+ *                               The first two produce a vcard3.0 (rfc2426),
+ *                               the second produces a vcard in old 2.1 format
+ *                               defined by imc.org
+ * @param string|array $sources  The source(s) from which the contact will be
+ *                               exported.
+ *
+ * @return mixed  The requested data | PEAR_Error
+ */
+function _turba_export($uid, $contentType, $sources = null)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources, $prefs;
+
+    /* Get default address book from user preferences. */
+    if (empty($sources)) {
+        $sources = @unserialize($prefs->getValue('sync_books'));
+    } elseif (!is_array($sources)) {
+        $sources = array($sources);
+    }
+    if (empty($sources)) {
+        $sources = array(Turba::getDefaultAddressbook());
+    }
+    if (empty($sources)) {
+        return PEAR::raiseError(_("No address book specified"), 'horde.error');
+    }
+
+    foreach ($sources as $source) {
+        if (empty($source) || !isset($cfgSources[$source])) {
+            return PEAR::raiseError(sprintf(_("Invalid address book: %s"), $source), 'horde.error', null, null, $source);
+        }
+
+        if (empty($uid)) {
+            return PEAR::raiseError(_("Invalid ID"), 'horde.error', null, null, $source);
+        }
+
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $source);
+        }
+
+        if (!$driver->hasPermission(PERMS_READ)) {
+            continue;
+        }
+
+        $result = $driver->search(array('__uid' => $uid));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        } elseif ($result->count() == 0) {
+            continue;
+        } elseif ($result->count() > 1) {
+            return PEAR::raiseError("Internal Horde Error: multiple turba objects with same objectId.", 'horde.error', null, null, $source);
+        }
+
+        $version = '3.0';
+        list($contentType,) = explode(';', $contentType);
+        switch ($contentType) {
+        case 'text/x-vcard':
+            $version = '2.1';
+        case 'text/vcard':
+        case 'text/directory':
+            require_once 'Horde/iCalendar.php';
+            $export = '';
+            foreach ($result->objects as $obj) {
+                $vcard = $driver->tovCard($obj, $version);
+                /* vCards are not enclosed in BEGIN:VCALENDAR..END:VCALENDAR.
+                 * Export the individual cards instead. */
+                $export .= $vcard->exportvCalendar();
+            }
+            return $export;
+        }
+
+        return PEAR::raiseError(sprintf(_("Unsupported Content-Type: %s"), $contentType));
+    }
+
+    return PEAR::raiseError(_("Object not found"));
+}
+
+/**
+ * Exports the user's own contact as a vCard string.
+ *
+ * @return string  The requested vCard data or PEAR_Error.
+ */
+function _turba_ownVCard()
+{
+    $contact = _turba_getOwnContactObject();
+    if (is_a($contact, 'PEAR_Error')) {
+        return $contact;
+    }
+    $driver = &Turba_Driver::singleton($contact['source']);
+    if (is_a($driver, 'PEAR_Error')) {
+        return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()));
+    }
+    require_once 'Horde/iCalendar.php';
+    $vcard = $driver->tovCard($contact['contact'], '3.0');
+    $vcard->setAttribute('VERSION', '3.0');
+
+    return $vcard->exportvCalendar();
+}
+
+/**
+ * Export the user's own contact as a hash
+ *
+ * @return Array  The contact hash or PEAR_Error
+ */
+function _turba_ownContact()
+{
+    $contact = _turba_getOwnContactObject();
+    if (is_a($contact, 'PEAR_Error')) {
+        return $contact;
+    }
+
+    return $contact['contact']->getAttributes();
+}
+
+/**
+ * Helper function to  return the user's own contact object
+ *
+ * @return Array  A hash containing the Turba_Object representing the user's
+ *                own contact and the source that it is from or PEAR_Error.
+ */
+function _turba_getOwnContactObject()
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    $own_contact = $GLOBALS['prefs']->getValue('own_contact');
+    if (empty($own_contact)) {
+        return PEAR::raiseError(_("You didn't mark a contact as your own yet."));
+    }
+    @list($source, $id) = explode(';', $own_contact);
+
+    if (!isset($cfgSources[$source])) {
+        return PEAR::raiseError(_("The address book with your own contact doesn't exist anymore."));
+    }
+
+    $driver = &Turba_Driver::singleton($source);
+    if (is_a($driver, 'PEAR_Error')) {
+        return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()));
+    }
+
+    if (!$driver->hasPermission(PERMS_READ)) {
+        return PEAR::raiseError(_("You don't have sufficient permissions to read the address book that contains your own contact."));
+    }
+
+    $contact = $driver->getObject($id);
+    if (is_a($contact, 'PEAR_Error')) {
+        return PEAR::raiseError(_("Your own contact cannot be found in the address book."));
+    }
+
+    $return = array('contact' => $contact,
+                    'source'=> $source);
+
+    return $return;
+}
+
+
+/**
+ * Deletes a contact identified by UID.
+ *
+ * @param string|array $uid      Identify the contact to delete, either a
+ *                               single UID or an array.
+ * @param string|array $sources  The source(s) from which the contact will be
+ *                               deleted.
+ *
+ * @return boolean  Success or failure.
+ */
+function _turba_delete($uid, $sources = null)
+{
+    // Handle an array of UIDs for convenience of deleting multiple contacts
+    // at once.
+    if (is_array($uid)) {
+        foreach ($uid as $g) {
+            $result = _turba_delete($uid, $source);
+            if (is_a($result, 'PEAR_Error')) {
+                return $result;
+            }
+        }
+
+        return true;
+    }
+
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources, $prefs;
+
+    /* Get default address book from user preferences. */
+    if (empty($sources)) {
+        $sources = @unserialize($prefs->getValue('sync_books'));
+    } elseif (!is_array($sources)) {
+        $sources = array($sources);
+    }
+    if (empty($sources)) {
+        $sources = array(Turba::getDefaultAddressbook());
+    }
+    if (empty($sources)) {
+        return PEAR::raiseError(_("No address book specified"), 'horde.error');
+    }
+
+    foreach ($sources as $source) {
+        if (empty($source) || !isset($cfgSources[$source])) {
+            return PEAR::raiseError(sprintf(_("Invalid address book: %s"), $source), 'horde.error', null, null, $source);
+        }
+
+        if (empty($uid)) {
+            return PEAR::raiseError(_("Invalid ID"), 'horde.error', null, null, $source);
+        }
+
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $source);
+        }
+
+        if (!Horde_Auth::isAdmin() && !$driver->hasPermission(PERMS_DELETE)) {
+            continue;
+        }
+
+        // If the objectId isn't in $source in the first place, just return
+        // true. Otherwise, try to delete it and return success or failure.
+        $result = $driver->search(array('__uid' => $uid));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        } elseif ($result->count() == 0) {
+            continue;
+        } else {
+            $r = $result->objects[0];
+            return $driver->delete($r->getValue('__key'));
+        }
+    }
+
+    return true;
+}
+
+/**
+ * Replaces the contact identified by UID with the content represented in the
+ * specified contentType.
+ *
+ * @param string $uid            Idenfity the contact to replace.
+ * @param string $content        The content of the contact.
+ * @param string $contentType    What format is the data in? Currently supports
+ *                               array, text/directory, text/vcard and
+ *                               text/x-vcard.
+ * @param string|array $sources  The source(s) where the contact will be
+ *                               replaced.
+ *
+ * @return boolean  Success or failure.
+ */
+function _turba_replace($uid, $content, $contentType, $sources = null)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources, $prefs;
+
+    /* Get default address book from user preferences. */
+    if (empty($sources)) {
+        $sources = @unserialize($prefs->getValue('sync_books'));
+    } elseif (!is_array($sources)) {
+        $sources = array($sources);
+    }
+    if (empty($sources)) {
+        $sources = array(Turba::getDefaultAddressbook());
+    }
+    if (empty($sources)) {
+        return PEAR::raiseError(_("No address book specified"), 'horde.error');
+    }
+
+    foreach ($sources as $source) {
+        if (empty($source) || !isset($cfgSources[$source])) {
+            return PEAR::raiseError(sprintf(_("Invalid address book: %s"), $source), 'horde.error', null, null, $source);
+        }
+
+        if (empty($uid)) {
+            return PEAR::raiseError(_("Invalid contact unique ID"), 'horde.error', null, null, $source);
+        }
+
+        // Check permissions.
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $source);
+        }
+        if (!$driver->hasPermission(PERMS_EDIT)) {
+            continue;
+        }
+        $result = $driver->search(array('__uid' => $uid));
+        if (is_a($result, 'PEAR_Error')) {
+            return $result;
+        } elseif (!$result->count()) {
+            continue;
+        } elseif ($result->count() > 1) {
+            return PEAR::raiseError("Multiple contacts found with same unique ID.", 'horde.error', null, null, $source);
+        }
+
+        $object = $result->objects[0];
+
+        switch ($contentType) {
+        case 'array':
+            break;
+
+        case 'text/x-vcard':
+        case 'text/vcard':
+        case 'text/directory':
+            require_once 'Horde/iCalendar.php';
+            $iCal = new Horde_iCalendar();
+            if (!$iCal->parsevCalendar($content)) {
+                return PEAR::raiseError(_("There was an error importing the iCalendar data."));
+            }
+
+            switch ($iCal->getComponentCount()) {
+            case 0:
+                return PEAR::raiseError(_("No vCard data was found."));
+
+            case 1:
+                $content = $iCal->getComponent(0);
+                $content = $driver->toHash($content);
+                break;
+
+            default:
+                return PEAR::raiseError(_("Only one vcard supported."));
+            }
+            break;
+
+        default:
+            return PEAR::raiseError(sprintf(_("Unsupported Content-Type: %s"), $contentType));
+        }
+
+        foreach ($content as $attribute => $value) {
+            if ($attribute != '__key') {
+                $object->setValue($attribute, $value);
+            }
+        }
+
+        return $object->store();
+    }
+
+    return PEAR::raiseError(_("Object not found"));
+}
+
+/**
+ * Returns a contact search result.
+ *
+ * @param array $names          The search filter values
+ * @param array $sources        The sources to serach in
+ * @param array $fields         The fields to serach on
+ * @param boolean $matchBegin   Match word boundaries only
+ * @param boolean $forceSource  Whether to use the specified sources, even if
+ *                              they have been disabled in the preferences.
+ *
+ * @return array  Hash containing the search results.
+ */
+function _turba_search($names = array(), $sources = array(), $fields = array(),
+                       $matchBegin = false, $forceSource = false)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    require_once 'Horde/Mime/Address.php';
+    global $cfgSources, $attributes, $prefs;
+
+    if (!isset($cfgSources) || !is_array($cfgSources) || !count($cfgSources)) {
+        return array();
+    }
+
+    if (!is_array($names)) {
+        $names = is_null($names) ? array() : array($names);
+    }
+
+    if (!$forceSource) {
+        // Make sure the selected source is activated in Turba.
+        $addressbooks = array_keys(Turba::getAddressBooks());
+        foreach (array_keys($sources) as $id) {
+            if (!in_array($sources[$id], $addressbooks)) {
+                unset($sources[$id]);
+            }
+        }
+    }
+
+    // ...and ensure the default source is used as a default.
+    if (!count($sources)) {
+        $sources = array(Turba::getDefaultAddressBook());
+    }
+
+    // Read the columns to display from the preferences.
+    $sort_columns = Turba::getColumns();
+
+    $results = array();
+    $seen = array();
+    foreach ($sources as $source) {
+        // Skip invalid sources.
+        if (!isset($cfgSources[$source])) {
+            continue;
+        }
+
+        // Skip sources that aren't browseable if the search is empty.
+        if (empty($cfgSources[$source]['browse']) &&
+            (!count($names) || (count($names) == 1 && empty($names[0])))) {
+            continue;
+        }
+
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $source);
+        }
+
+        // Determine the name of the column to sort by.
+        $columns = isset($sort_columns[$source])
+            ? $sort_columns[$source] : array();
+
+        foreach ($names as $name) {
+            $criteria = array();
+            if (isset($fields[$source])) {
+                foreach ($fields[$source] as $field) {
+                    $criteria[$field] = trim($name);
+                }
+            }
+            if (count($criteria) == 0) {
+                $criteria['name'] = trim($name);
+            }
+
+            $search = $driver->search($criteria, Turba::getPreferredSortOrder(), 'OR', array(), array(), $matchBegin);
+            if (!is_a($search, 'Turba_List')) {
+                continue;
+            }
+
+            while ($ob = $search->next()) {
+                if (!$ob->isGroup()) {
+                    /* Not a group. */
+                    $att = array('__key' => $ob->getValue('__key'));
+                    foreach ($ob->driver->getCriteria() as $info_key => $info_val) {
+                        $att[$info_key] = $ob->getValue($info_key);
+                    }
+                    $email = array();
+                    foreach (array_keys($att) as $key) {
+                        if (!$ob->getValue($key) ||
+                            !isset($attributes[$key]) ||
+                            $attributes[$key]['type'] != 'email') {
+                            continue;
+                        }
+                        $email_val = $ob->getValue($key);
+
+                        // Multiple addresses support
+                        if (isset($attributes[$key]['params'])
+                            && is_array($attributes[$key]['params'])
+                            && !empty($attributes[$key]['params']['allow_multi'])) {
+                            $addrs = Horde_Mime_Address::explode($email_val);
+                        } else {
+                            $addrs = array($email_val);
+                        }
+
+                        foreach ($addrs as $addr) {
+                            $email[] = trim($addr);
+                        }
+                    }
+
+                    if ($ob->hasValue('name') ||
+                        !isset($ob->driver->alternativeName)) {
+                        $display_name = Turba::formatName($ob);
+                    } else {
+                        $display_name = $ob->getValue($ob->driver->alternativeName);
+                    }
+                    if (count($email)) {
+                        for ($i = 0; $i < count($email); $i++) {
+                            $seen_key = trim(Horde_String::lower($display_name)) . '/' . trim(Horde_String::lower($email[$i]));
+                            if (!empty($seen[$seen_key])) {
+                                continue;
+                            }
+                            $seen[$seen_key] = true;
+                            if (!isset($results[$name])) {
+                                $results[$name] = array();
+                            }
+                            $results[$name][] = array_merge($att,
+                                array('id' => $att['__key'],
+                                      'name' => $display_name,
+                                      'email' => $email[$i],
+                                      '__type' => 'Object',
+                                      'source' => $source));
+                        }
+                    } else {
+                        if (!isset($results[$name])) {
+                            $results[$name] = array();
+                        }
+                        $results[$name][] = array_merge($att,
+                            array('id' => $att['__key'],
+                                  'name' => $display_name,
+                                  'email' => null,
+                                  '__type' => 'Object',
+                                  'source' => $source));
+                    }
+                } else {
+                    /* Is a distribution list. */
+                    $listatt = $ob->getAttributes();
+                    $seeninlist = array();
+                    $members = $ob->listMembers();
+                    $listName = $ob->getValue('name');
+                    if (!is_a($members, 'Turba_List')) {
+                        continue;
+                    }
+                    if ($members->count() > 0) {
+                        if (!isset($results[$name])) {
+                            $results[$name] = array();
+                        }
+                        $emails = array();
+                        while ($ob = $members->next()) {
+                            $att = $ob->getAttributes();
+                            foreach (array_keys($att) as $key) {
+                                $value = $ob->getValue($key);
+                                if (empty($value)) {
+                                    continue;
+                                }
+                                if (!is_array($value)) {
+                                    $seen_key = trim(Horde_String::lower($ob->getValue('name')))
+                                        . trim(Horde_String::lower($value));
+                                } else {
+                                    $seen_key = trim(Horde_String::lower($ob->getValue('name')))
+                                        . trim(Horde_String::lower($value['load']['file']));
+                                }
+                                if (isset($attributes[$key]) &&
+                                    $attributes[$key]['type'] == 'email' &&
+                                    empty($seeninlist[$seen_key])) {
+                                    $emails[] = $value;
+                                    $seeninlist[$seen_key] = true;
+                                }
+                            }
+                        }
+                        $results[$name][] = array('name' => $listName,
+                                                  'email' => implode(', ', $emails),
+                                                  'id' => $listatt['__key'],
+                                                  'source' => $source);
+                    }
+                }
+            }
+        }
+    }
+
+    return $results;
+}
+
+/**
+ * Retrieves a contact.
+ *
+ * @param string $source    The source name where the contact is stored
+ * @param string $objectId  The unique id of the contact to retrieve
+ *
+ * @return array  The retrieved contact.
+ */
+function _turba_getContact($source = null, $objectId = '')
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    if (!isset($cfgSources) || !is_array($cfgSources) || !count($cfgSources)) {
+        return array();
+    }
+
+    if (isset($cfgSources[$source])) {
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            return $driver;
+        }
+
+        $object = $driver->getObject($objectId);
+        if (is_a($object, 'PEAR_Error')) {
+            return $object;
+        }
+
+        $attributes = array();
+        foreach ($cfgSources[$source]['map'] as $field => $map) {
+            $attributes[$field] = $object->getValue($field);
+        }
+        return $attributes;
+    }
+
+    return array();
+}
+
+/**
+ * Retrieves a set of contacts from a single source.
+ *
+ * @param string $source    The source name where the contact is stored
+ * @param array $objectIds  The unique ids of the contact to retrieve.
+ *
+ * @return mixed  The retrieved contact | PEAR_Error
+ */
+function _turba_getContacts($source = '', $objectIds = array())
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+    $results = array();
+    if (!is_array($objectIds)) {
+        $objectIds = array($objectIds);
+    }
+
+    if (!isset($cfgSources) || !is_array($cfgSources) || !count($cfgSources)) {
+        return array();
+    }
+
+    if (isset($cfgSources[$source])) {
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            return $driver;
+        }
+
+        $objects = $driver->getObjects($objectIds);
+        if (is_a($objects, 'PEAR_Error')) {
+            return $objects;
+        }
+
+        foreach ($objects as $object) {
+            $attributes = array();
+            foreach ($cfgSources[$source]['map'] as $field => $map) {
+                $attributes[$field] = $object->getValue($field);
+            }
+            $results[] = $attributes;
+        }
+    }
+
+    return $results;
+}
+
+/**
+ * Retrieves a list of all possible values of a field in specified source(s).
+ *
+ * @param string $field   Field name to check
+ * @param array $sources  Array containing the sources to look in
+ *
+ * @return mixed  An array of fields and possible values | PEAR_Error
+ */
+function _turba_getAllAttributeValues($field = '', $sources = array())
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    if (!isset($cfgSources) || !is_array($cfgSources) || !count($cfgSources)) {
+        return array();
+    }
+
+    if (!count($sources)) {
+        $sources = array(Turba::getDefaultAddressBook());
+    }
+
+    $results = array();
+    foreach ($sources as $source) {
+        if (isset($cfgSources[$source])) {
+            $driver = &Turba_Driver::singleton($source);
+            if (is_a($driver, 'PEAR_Error')) {
+                return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $source);
+            }
+
+            $res = $driver->search(array());
+            if (!is_a($res, 'Turba_List')) {
+                return PEAR::raiseError(_("Search failed"), 'horde.error', null, null, $source);
+            }
+
+            while ($ob = $res->next()) {
+                if ($ob->hasValue($field)) {
+                    $results[$source . ':' . $ob->getValue('__key')] = array(
+                        'name' => $ob->getValue('name'),
+                        'email' => $ob->getValue('email'),
+                        $field => $ob->getValue($field));
+                }
+            }
+        }
+    }
+
+    return $results;
+}
+
+/**
+ * Retrieves a list of available time objects categories
+ *
+ * @return array  An array of all configured time object categories.
+ */
+function _turba_listTimeObjectCategories()
+{
+    include dirname(__FILE__) . '/../config/attributes.php';
+    include dirname(__FILE__) . '/../config/sources.php';
+    $categories = array();
+    foreach ($attributes as $key => $attribute) {
+        if ($attribute['type'] == 'monthdayyear' &&
+            !empty($attribute['time_object_label'])) {
+
+            foreach ($cfgSources as $source) {
+                if (!empty($source['map'][$key])) {
+                    $categories[$key] = $attribute['time_object_label'];
+                    break;
+                }
+            }
+        }
+    }
+
+
+
+    return $categories;
+}
+
+/**
+ * Lists birthdays and/or anniversaries as time objects.
+ *
+ * @param array $time_categories  The time categories (from
+ *                                listTimeObjectCategories) to list.
+ * @param mixed $start            The start date of the period.
+ * @param mixed $end              The end date of the period.
+ *
+ * @return mixed  An array of timeObject results || PEAR_Error
+ */
+function _turba_listTimeObjects($time_categories, $start, $end)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    $start = new Horde_Date($start);
+    $end = new Horde_Date($end);
+
+    if (!isset($cfgSources) || !is_array($cfgSources) || !count($cfgSources)) {
+        return array();
+    }
+
+    $objects = array();
+    foreach ($cfgSources as $name => $source) {
+        // Check if we even have to load the driver.
+        $check = array();
+        foreach ($time_categories as $category) {
+            if (!empty($source['map'][$category])) {
+                $check[] = $category;
+            }
+        }
+        if (!count($check)) {
+            continue;
+        }
+        $driver = &Turba_Driver::singleton($name);
+        if (is_a($driver, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Connection failed: %s"),
+                                    $driver->getMessage()), 'horde.error',
+                                    null, null, $name);
+        }
+        foreach ($check as $category) {
+            $new_objects = $driver->listTimeObjects($start, $end, $category);
+            if (is_a($new_objects, 'PEAR_Error')) {
+                return $new_objects;
+            }
+            $objects = array_merge($objects, $new_objects);
+        }
+    }
+
+    return $objects;
+}
+
+/**
+ * Returns the client source name
+ *
+ * @return string  The name of the source to use with the clients api.
+ */
+function _turba_getClientSource()
+{
+    return !empty($GLOBALS['conf']['client']['addressbook']) ? $GLOBALS['conf']['client']['addressbook'] : false;
+}
+
+/**
+ * Returns the availabble client fields
+ *
+ * @return mixed  An array describing the fields | PEAR_Error
+ */
+function _turba_clientFields()
+{
+    return _turba_fields($GLOBALS['conf']['client']['addressbook']);
+}
+
+/**
+ * Returns a contact from the client source.
+ *
+ * @param string $objectId  Client unique ID
+ *
+ * @return mixed  Array of client data | PEAR_Error
+ */
+function _turba_getClient($objectId = '')
+{
+    return _turba_getContact($GLOBALS['conf']['client']['addressbook'],
+                             $objectId);
+}
+
+/**
+ * Returns mulitple contacts from the client source
+ *
+ * @param array $objectIds  client unique ids
+ *
+ * @return mixed  An array of clients data | PEAR_Error
+ */
+function _turba_getClients($objectIds = array())
+{
+    return _turba_getContacts($GLOBALS['conf']['client']['addressbook'],
+                              $objectIds);
+}
+
+/**
+ * Adds a client to the client source
+ *
+ * @param array $attributes  Array containing the client attributes
+ */
+function _turba_addClient($attributes = array())
+{
+    return _turba_import($attributes, 'array', _turba_getClientSource());
+}
+
+/**
+ * Updates client data
+ *
+ * @param string $objectId   The unique id of the client
+ * @param array $attributes  An array of client attributes
+ *
+ * @return boolean
+ */
+function _turba_updateClient($objectId = '', $attributes = array())
+{
+    return _turba_replace(_turba_getClientSource() . ':' . $objectId,
+                          $attributes, 'array');
+}
+
+/**
+ * Deletes a client
+ *
+ * @param string $objectId  The unique id of the client
+ *
+ * @return boolean
+ */
+function _turba_deleteClient($objectId = '')
+{
+    return _turba_delete(_turba_getClientSource() . ':' . $objectId);
+}
+
+/**
+ * Search for clients
+ *
+ * @param array $names         The search filter values
+ * @param array $fields        The fields to serach in
+ * @param boolean $matchBegin  Match word boundaries only
+ *
+ * @return mixed  A hash containing the search results | PEAR_Error
+ */
+function _turba_searchClients($names = array(), $fields = array(), $matchBegin = false)
+{
+    return _turba_search(
+        $names,
+        array($GLOBALS['conf']['client']['addressbook']),
+        array($GLOBALS['conf']['client']['addressbook'] => $fields),
+        $matchBegin,
+        true);
+}
+
+/**
+ * Sets the value of the specified attribute of a contact
+ *
+ * @param string $address  Contact email address
+ * @param string $name     Contact name
+ * @param string $field    Field to update
+ * @param string $value    Field value to set
+ * @param string $source   Contact source
+ *
+ * @return mixed  The new __key value on success | PEAR_Error on failure
+ */
+function _turba_addField($address = '', $name = '', $field = '', $value = '',
+                         $source = '')
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    if (empty($source) || !isset($cfgSources[$source])) {
+        return PEAR::raiseError(sprintf(_("Invalid address book: %s"), $source), 'horde.error', null, null, $source);
+    }
+
+    if (empty($address)) {
+        return PEAR::raiseError(_("Invalid email"), 'horde.error', null, null, $source);
+    }
+
+    if (empty($name)) {
+        return PEAR::raiseError(_("Invalid name"), 'horde.error', null, null, $source);
+    }
+
+    if (empty($value)) {
+        return PEAR::raiseError(_("Invalid entry"), 'horde.error', null, null, $source);
+    }
+
+    $driver = &Turba_Driver::singleton($source);
+    if (is_a($driver, 'PEAR_Error')) {
+        return PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $source);
+    }
+
+    if (!$driver->hasPermission(PERMS_EDIT)) {
+        return PEAR::raiseError(_("Permission denied"), 'horde.error', null, null, $source);
+    }
+
+    $res = $driver->search(array('email' => trim($address)), null, 'AND');
+    if (is_a($res, 'PEAR_Error')) {
+        return PEAR::raiseError(sprintf(_("Search failed: %s"), $res->getMessage()), 'horde.message', null, null, $source);
+    }
+
+    if ($res->count() > 1) {
+        $res2 = $driver->search(array('email' => trim($address), 'name' => trim($name)), null, 'AND');
+        if (is_a($res2, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Search failed: %s"), $res2->getMessage()), 'horde.message', null, null, $source);
+        }
+
+        if (!$res2->count()) {
+            return PEAR::raiseError(sprintf(_("Multiple persons with address [%s], but none with name [%s] already exist"), trim($address), trim($name)), 'horde.message', null, null, $source);
+        }
+
+        $res3 = $driver->search(array('email' => $address, 'name' => $name, $field => $value));
+        if (is_a($res3, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Search failed: %s"), $res3->getMessage()), 'horde.message', null, null, $source);
+        }
+
+        if ($res3->count()) {
+            return PEAR::raiseError(sprintf(_("This person already has a %s entry in the address book"), $field), 'horde.message', null, null, $source);
+        }
+
+        $ob = $res2->next();
+        $ob->setValue($field, $value);
+        $ob->store();
+    } elseif ($res->count() == 1) {
+        $res4 = $driver->search(array('email' => $address, $field => $value));
+        if (is_a($res4, 'PEAR_Error')) {
+            return PEAR::raiseError(sprintf(_("Search failed: %s"), $res4->getMessage()), 'horde.message', null, null, $source);
+        }
+
+        if ($res4->count()) {
+            return PEAR::raiseError(sprintf(_("This person already has a %s entry in the address book"), $field), 'horde.message', null, null, $source);
+        }
+
+        $ob = $res->next();
+        $ob->setValue($field, $value);
+        $ob->store();
+    } else {
+        return $driver->add(array('email' => $address, 'name' => $name, $field => $value, '__owner' => Horde_Auth::getAuth()));
+    }
+
+    return;
+}
+
+/**
+ * Returns a field value
+ *
+ * @param string $address    Contact email address
+ * @param string $field      Field to get
+ * @param array $sources     Sources to check
+ * @param boolean $strict    Match the email address strictly
+ * @param boolean $multiple  Return more than one entry if found and true,
+ *                           return an error if this is false.
+ *
+ * @return mixed  An array of field value(s) | PEAR_Error on failure.
+ */
+function _turba_getField($address = '', $field = '', $sources = array(),
+                         $strict = false, $multiple = false)
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    if (empty($address)) {
+        return PEAR::raiseError(_("Invalid email"), 'horde.error');
+    }
+
+    if (!isset($cfgSources) || !is_array($cfgSources) || !count($cfgSources)) {
+        return array();
+    }
+
+    if (!count($sources)) {
+        $sources = array(Turba::getDefaultAddressbook());
+    }
+
+    $result = array();
+    foreach ($sources as $source) {
+        if (!isset($cfgSources[$source])) {
+            continue;
+        }
+
+        $driver = &Turba_Driver::singleton($source);
+        if (is_a($driver, 'PEAR_Error')) {
+            continue;
+        }
+
+        $list = $driver->search(array('email' => $address), null, 'AND', array(), $strict ? array('email') : array());
+        if (!is_a($list, 'Turba_List')) {
+            continue;
+        }
+
+        while ($ob = $list->next()) {
+            if ($ob->hasValue($field)) {
+                $result[] = $ob->getValue($field);
+            }
+        }
+    }
+
+    if (count($result) > 1) {
+        if ($multiple) {
+            return $result;
+        } else {
+            return PEAR::raiseError(_("More than 1 entry found"), 'horde.warning', null, null, $source);
+        }
+    } elseif (empty($result)) {
+        return PEAR::raiseError(sprintf(_("No %s entry found for %s"), $field, $address), 'horde.warning', null, null, $source);
+    }
+    return reset($result);
+}
+
+/**
+ * Deletes a field value
+ *
+ * @param string $address Contact email address
+ * @param string $field   Field to delete value for
+ * @param array $sources  Sources to delete value from
+ *
+ * @return boolean
+ */
+function _turba_deleteField($address = '', $field = '', $sources = array())
+{
+    require_once dirname(__FILE__) . '/base.php';
+    global $cfgSources;
+
+    if (empty($address)) {
+        return PEAR::raiseError(_("Invalid email"), 'horde.error');
+    }
+
+    if (!isset($cfgSources) || !is_array($cfgSources) || !count($cfgSources)) {
+        return array();
+    }
+
+    if (count($sources) == 0) {
+        $sources = array(Turba::getDefaultAddressbook());
+    }
+
+    $success = false;
+
+    foreach ($sources as $source) {
+        if (isset($cfgSources[$source])) {
+            $driver = &Turba_Driver::singleton($source);
+            if (is_a($driver, 'PEAR_Error')) {
+                continue;
+            }
+            if (!$driver->hasPermission(PERMS_EDIT)) {
+                continue;
+            }
+
+            $res = $driver->search(array('email' => $address));
+            if (is_a($res, 'Turba_List')) {
+                if ($res->count() > 1) {
+                    continue;
+                }
+
+                $ob = $res->next();
+                if (is_object($ob) && $ob->hasValue($field)) {
+                    $ob->setValue($field, '');
+                    $ob->store();
+                    $success = true;
+                }
+            }
+        }
+    }
+
+    if (!$success) {
+        return PEAR::raiseError(sprintf(_("No %s entry found for %s"), $field, $address), 'horde.error');
+    }
+
+    return;
+}
diff --git a/turba/lib/base.load.php b/turba/lib/base.load.php
new file mode 100644 (file)
index 0000000..3fced9d
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * Script to determine the correct *_BASE values.
+ *
+ * Copyright 2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (GPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/gpl.html.
+ *
+ * @package Turba
+ */
+
+$curr_dir = dirname(__FILE__);
+
+if (!defined('HORDE_BASE')) {
+    /* Temporary fix - if horde does not live directly under the app
+     * directory, the HORDE_BASE constant should be defined in
+     * lib/base.local.php. */
+    if (file_exists($curr_dir . '/base.local.php')) {
+        include $curr_dir . '/base.local.php';
+    } else {
+        define('HORDE_BASE', $curr_dir . '/../..');
+    }
+}
+
+if (!defined('TURBA_BASE')) {
+    define('TURBA_BASE', $curr_dir . '/..');
+}
diff --git a/turba/lib/base.php b/turba/lib/base.php
new file mode 100644 (file)
index 0000000..46296fb
--- /dev/null
@@ -0,0 +1,109 @@
+<?php
+/**
+ * Turba base inclusion file.
+ *
+ * The following global variables are used:
+ *   $turba_no_maintenance - Don't perform maintenance tasks.
+ *
+ * This file brings in all of the dependencies that every Turba script will
+ * need, and sets up objects that all scripts use.
+ */
+
+
+// Determine BASE directories.
+require_once dirname(__FILE__) . '/base.load.php';
+
+// Load the Horde Framework core, and set up inclusion paths.
+require_once HORDE_BASE . '/lib/core.php';
+
+// Registry.
+$registry = Horde_Registry::singleton();
+try {
+    $registry->pushApp('turba', !defined('AUTH_HANDLER'));
+} catch (Horde_Exception $e) {
+    if ($e->getCode() == 'permission_denied') {
+        Horde::authenticationFailureRedirect();
+    }
+    Horde::fatal($e, __FILE__, __LINE__, false);
+}
+$conf = $GLOBALS['conf'];
+define('TURBA_TEMPLATES', $registry->get('templates'));
+
+// Notification system.
+$notification = Horde_Notification::singleton();
+$notification->attach('status');
+
+// Turba source and attribute configuration.
+include TURBA_BASE . '/config/attributes.php';
+include TURBA_BASE . '/config/sources.php';
+
+// Ensure we have cfgSources in global scope since base.php might be loaded
+// within a function scope and the share hooks require access to cfgSources.
+$GLOBALS['cfgSources'] = $cfgSources;
+
+// See if any of our sources are configured to use Horde_Share.
+foreach ($cfgSources as $key => $cfg) {
+    if (!empty($cfg['use_shares'])) {
+        $_SESSION['turba']['has_share'] = true;
+        break;
+    }
+}
+if (!empty($_SESSION['turba']['has_share'])) {
+    // Create a share instance.
+    $GLOBALS['turba_shares'] = &Horde_Share::singleton($registry->getApp());
+    $GLOBALS['cfgSources'] = Turba::getConfigFromShares($cfgSources);
+}
+$GLOBALS['cfgSources'] = Turba::permissionsFilter($GLOBALS['cfgSources']);
+$GLOBALS['attributes'] = $attributes;
+
+// Check for any login tasks needed. Don't need a URL argument since we will
+// never redirect to the confirmation screen.
+if (empty($_SESSION['turba']['maintenance']) &&
+    !Horde_Util::nonInputVar('turba_no_maintenance')) {
+    $tasks = Horde_LoginTasks::singleton('turba', null);
+    $tasks->runTasks();
+    $_SESSION['turba']['maintenance'] = true;
+}
+
+// Build the directory sources select widget.
+$default_source = Horde_Util::nonInputVar('source');
+if (empty($default_source)) {
+    $default_source = empty($_SESSION['turba']['source']) ? Turba::getDefaultAddressBook() : $_SESSION['turba']['source'];
+    $default_source = Horde_Util::getFormData('source', $default_source);
+}
+$browse_source_options = '';
+$browse_source_count = 0;
+foreach (Turba::getAddressBooks() as $key => $curSource) {
+    if (!empty($curSource['browse'])) {
+        $selected = ($key == $default_source) ? ' selected="selected"' : '';
+        $browse_source_options .= '<option value="' . htmlspecialchars($key) . '" ' . $selected . '>' .
+            htmlspecialchars($curSource['title']) . '</option>';
+
+        $browse_source_count++;
+
+        if (empty($default_source)) {
+            $default_source = $key;
+        }
+    }
+}
+if (empty($cfgSources[$default_source]['browse'])) {
+    $default_source = Turba::getDefaultAddressBook();
+}
+$_SESSION['turba']['source'] = $default_source;
+
+// Only set $add_source_options if there is at least one editable address book
+// that is not the current address book.
+$addSources = Turba::getAddressBooks(PERMS_EDIT);
+$copymove_source_options = '';
+$copymoveSources = $addSources;
+unset($copymoveSources[$default_source]);
+foreach ($copymoveSources as $key => $curSource) {
+    if ($key != $default_source) {
+        $copymove_source_options .= '<option value="' . htmlspecialchars($key) . '">' .
+            htmlspecialchars($curSource['title']) . '</option>';
+    }
+}
+$GLOBALS['addSources'] = $addSources;
+
+// Start compression, if requested.
+Horde::compressOutput();
diff --git a/turba/lib/prefs.php b/turba/lib/prefs.php
new file mode 100644 (file)
index 0000000..349b3b7
--- /dev/null
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright 2001-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ */
+
+function handle_columnselect($updated)
+{
+    $columns = Horde_Util::getFormData('columns');
+    if (!empty($columns)) {
+        $GLOBALS['prefs']->setValue('columns', $columns);
+        return true;
+    }
+
+    return false;
+}
+
+function handle_addressbookselect($updated)
+{
+    $addressbooks = Horde_Util::getFormData('addressbooks');
+    $GLOBALS['prefs']->setValue('addressbooks', str_replace("\r", '', $addressbooks));
+    return true;
+}
+
+/* Assign variables for select lists. */
+if (!$prefs->isLocked('default_dir')) {
+    $default_dir_options = array();
+    foreach ($cfgSources as $key => $info) {
+        $default_dir_options[$key] = $info['title'];
+    }
+}
+
+foreach (Turba::getAddressBooks() as $key => $curSource) {
+    if (empty($curSource['map']['__uid'])) {
+        continue;
+    }
+    if (!empty($curSource['browse'])) {
+        $_prefs['sync_books']['enum'][$key] = $curSource['title'];
+    }
+    $sync_books = @unserialize($prefs->getValue('sync_books'));
+    if (empty($sync_books)) {
+        $prefs->setValue('sync_books',
+                         serialize(array(Turba::getDefaultAddressbook())));
+    }
+}
diff --git a/turba/lib/tests/ApiTest.php b/turba/lib/tests/ApiTest.php
new file mode 100644 (file)
index 0000000..e33cf2b
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+
+require_once dirname(__FILE__) . '/TestBase.php';
+
+/**
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_ApiTest extends Turba_TestBase {
+
+    function setUp()
+    {
+        parent::setUp();
+        require_once TURBA_BASE . '/lib/api.php';
+        $this->setUpDatabase();
+    }
+
+    function test_search_api_should_return_results()
+    {
+        global $registry;
+
+        /* HACK: ensure we've included this so that it won't get included
+         * again, then override the globals it provides. */
+        try {
+            $pushed = $registry->pushApp('turba', false);
+        } catch (Horde_Exception $e) {
+            return;
+        }
+
+        require_once TURBA_BASE . '/lib/base.php';
+        $GLOBALS['source'] = '_test_sql';
+        $GLOBALS['cfgSources'] = array('_test_sql' => $this->getDriverConfig());
+
+        $this->fakeAuth();
+
+        $results = _turba_search(array('Fabetes'));
+        $this->assertNotEqual(0, count($results));
+        if ($this->assertTrue(!empty($results['Fabetes']))) {
+            $entry = array_shift($results['Fabetes']);
+            $this->assertEqual('_test_sql', $entry['source']);
+            $this->assertEqual('Joe Fabetes', $entry['name']);
+        }
+
+        if ($pushed) {
+            $registry->popApp();
+        }
+    }
+
+}
diff --git a/turba/lib/tests/BrowsePageTest.php b/turba/lib/tests/BrowsePageTest.php
new file mode 100644 (file)
index 0000000..e6d5d96
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+
+require_once dirname(__FILE__) . '/TestBase.php';
+
+/**
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ */
+class Turba_BrowsePageTest extends Turba_TestBase {
+
+    function setUp()
+    {
+        parent::setUp();
+        require_once TURBA_BASE . '/lib/BrowsePage.php';
+        $this->setUpDatabase();
+        $this->setUpBrowsePage();
+    }
+
+    function setUpBrowsePage()
+    {
+        $vars = new Horde_Variables();
+        $notification = $GLOBALS['notification'];
+        $turbaConf = array();
+        $turbaConf['menu']['import_export'] = true;
+        $turbaConf['menu']['apps'] = array();
+        $turbaConf['client']['addressbook'] = '_test_sql';
+        $turbaConf['shares']['source'] = 'foo';
+        $turbaConf['comments']['allow'] = true;
+        $turbaConf['documents']['type'] = 'horde';
+        include TURBA_BASE . '/config/attributes.php';
+
+        $cfgSources = array('_test_sql' => $this->getDriverConfig());
+        $this->_pageParams = array('vars' => $vars,
+                                   'prefs' => $GLOBALS['prefs'],
+                                   'notification' => $notification,
+                                   'registry' => $GLOBALS['registry'],
+                                   'browse_source_count' => 1,
+                                   'browse_source_options' => "My Address Book",
+                                   'copymove_source_options' => null,
+                                   'copymoveSources' => array(),
+                                   'addSources' => $cfgSources,
+                                   'cfgSources' => $cfgSources,
+                                   'attributes' => $attributes,
+                                   'turba_shares' => false,
+                                   'conf' => $turbaConf,
+                                   'source' => '_test_sql',
+                                   'browser' => $GLOBALS['browser']);
+
+        // These are referenced explicitly from $GLOBALS, *sigh*
+        $GLOBALS['browse_source_count'] = $this->_pageParams['browse_source_count'];
+        $GLOBALS['addSources'] = $cfgSources;
+        $GLOBALS['copymoveSources'] = array();
+        $GLOBALS['cfgSources'] = $cfgSources;
+
+        $this->setPref('addressbooks', '_test_sql');
+    }
+
+    function getPage()
+    {
+        $this->_pageParams['registry']->pushApp('turba', false);
+        $this->fakeAuth();
+        $page = new Turba_BrowsePage($this->_pageParams);
+        $this->_output = Horde_Util::bufferOutput(array($page, 'run'));
+        if ($push_result) {
+            $this->_pageParams['registry']->popApp();
+        }
+
+        $this->assertNoUnwantedPattern('/<b>Warning/', $this->_output);
+        $this->assertNoUnwantedPattern('/<b>Fatal error/i', $this->_output);
+
+        return $this->_output;
+    }
+
+    function setPref($name, $value)
+    {
+        $prefs = $this->_pageParams['prefs'];
+        $this->assertOk($prefs->setValue($name, $value));
+        $this->assertEqual($value, $prefs->getValue($name));
+    }
+
+    function getPref($name)
+    {
+        return $this->_pageParams['prefs']->getValue($name);
+    }
+
+    function setVar($name, $value)
+    {
+        $vars = $this->_pageParams['vars'];
+        $vars->set($name, $value);
+    }
+
+    function assertOutputContainsItems($items, $m = 'assertWantedPattern')
+    {
+        $fail = false;
+        foreach ($items as $item) {
+            $pattern = '!>' . preg_quote($item, '!') . '</a>!';
+            if (!$this->$m($pattern, $this->_output)) {
+                $fail = true;
+            }
+        }
+        if ($fail) {
+            print $this->_output;
+        }
+        return !$fail;
+    }
+
+    function assertOutputDoesNotContainItems($items)
+    {
+        return $this->assertOutputContainsItems($items,
+                                                'assertNoUnwantedPattern');
+    }
+
+    function test_getting_page_shows_all_contacts_and_groups_from_test_addressbook()
+    {
+        $this->getPage();
+        $this->assertOutputContainsItems(array_merge($this->_sortedByLastname,                                                       $this->_groups));
+    }
+
+    function test_getting_page_with_sort_parameters_updates_sort_preferences()
+    {
+        $this->setPref('sortorder', '');
+        $this->setVar('sortby', '0');
+        $this->setVar('sortdir', '1');
+        $this->getPage();
+        $this->assertEqual(serialize(array(array('field' => 'lastname', 'ascending' => false))),
+                           $this->getPref('sortorder'));
+    }
+
+    function test_getting_page_with_show_equals_contacts_will_show_only_contacts()
+    {
+        $this->setVar('show', 'contacts');
+        $this->getPage();
+        $this->assertOutputContainsItems($this->_sortedByLastname);
+        $this->assertOutputDoesNotContainItems($this->_groups);
+    }
+
+    function test_getting_page_with_show_equals_lists_will_show_only_groups()
+    {
+        $this->setVar('show', 'lists');
+        $this->getPage();
+        $this->assertOutputDoesNotContainItems($this->_sortedByLastname);
+        $this->assertOutputContainsItems($this->_groups);
+    }
+
+    function test_browsing_list_shows_list_members_only()
+    {
+        $groupId = 'ggg';
+        $this->setVar('key', $groupId);
+        $this->getPage();
+
+        $found = false;
+        foreach ($this->_fixtures as $fixture) {
+            if ($fixture['object_id'] == $groupId) {
+                $found = true;
+                $this->assertEqual('Group', $fixture['object_type']);
+                $memberIds = unserialize($fixture['object_members']);
+            }
+        }
+        $this->assertTrue($found);
+
+        $inList = array();
+        $notInList = array();
+        foreach ($this->_fixtures as $fixture) {
+            if ($fixture['object_type'] == 'Object') {
+                if (in_array($fixture['object_id'], $memberIds)) {
+                    $inList[] = $fixture['object_name'];
+                } else {
+                    $notInList[] = $fixture['object_name'];
+                }
+            }
+        }
+
+        $this->assertFalse(empty($inList));
+        $this->assertOutputContainsItems($inList);
+        $this->assertFalse(empty($notInList));
+        $this->assertOutputDoesNotContainItems($notInList);
+    }
+
+}
diff --git a/turba/lib/tests/DriverTest.php b/turba/lib/tests/DriverTest.php
new file mode 100644 (file)
index 0000000..1b6f3a0
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+
+require_once dirname(__FILE__) . '/TestBase.php';
+
+/**
+ * Test cases for the Turba_Driver:: class
+ *
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_DriverTest extends Turba_TestBase {
+
+    function setUp()
+    {
+        parent::setUp();
+        $this->setUpDatabase();
+    }
+
+    function test_search_results_should_be_sorted_according_to_supplied_sort_order()
+    {
+        $this->assertSortsList(array($this, 'doSearch'));
+    }
+
+    /**
+     * This is how we are called from the addField API
+     */
+    function test_search_with_null_order_parameter_works()
+    {
+        $driver = $this->getDriver();
+        $this->fakeAuth();
+        $list = $driver->search(array(), null, 'AND');
+        $this->assertOk($list);
+        if (!$this->assertTrue(is_a($list, 'Turba_List'))) {
+            return;
+        }
+        $this->assertOk($list->reset());
+        $this->assertTrue($list->next());
+        $this->assertTrue($list->next());
+    }
+
+    function doSearch($order)
+    {
+        $driver = $this->getDriver();
+        $this->fakeAuth();
+        return $driver->search(array('__type' => 'Object'), $order, 'AND');
+    }
+
+}
diff --git a/turba/lib/tests/GroupTest.php b/turba/lib/tests/GroupTest.php
new file mode 100644 (file)
index 0000000..0917c38
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+
+require_once dirname(__FILE__) . '/TestBase.php';
+
+/**
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_GroupTest extends Turba_TestBase {
+
+    var $group;
+
+    function setUp()
+    {
+        parent::setUp();
+        $this->setUpDatabase();
+
+        $driver = $this->getDriver();
+        $this->group = $driver->getObject('fff');
+        $this->assertOk($this->group);
+    }
+
+    function test_listMembers_returns_objects_sorted_according_to_parameters()
+    {
+        $this->assertSortsList(array($this->group, 'listMembers'));
+    }
+
+}
diff --git a/turba/lib/tests/KolabTest.php b/turba/lib/tests/KolabTest.php
new file mode 100644 (file)
index 0000000..f418415
--- /dev/null
@@ -0,0 +1,201 @@
+<?php
+
+require_once dirname(__FILE__) . '/KolabTestBase.php';
+
+/**
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_KolabTest extends Turba_KolabTestBase {
+
+    /**
+     * Test setup.
+     *
+     * @return NULL
+     */
+    public function setUp()
+    {
+        $this->prepareTurba();
+
+        $this->_kolab = &new Kolab();
+    }
+
+    function testBug5476()
+    {
+        /* Open our addressbook */
+        $this->_kolab->open('INBOX/Contacts', 1);
+
+        $object = array(
+            'uid' => 1,
+            'given-name' => 'test',
+            'last-name' => 'test',
+            'full-name' => 'test  test',
+        );
+
+        // Save the contact
+        $this->_kolab->_storage->save($object);
+
+        $object = array(
+            'uid' => 2,
+            'given-name' => 'test2',
+            'last-name' => 'test2',
+            'full-name' => 'test2  test2',
+        );
+
+        // Save the contact
+        $this->_kolab->_storage->save($object);
+
+        // Check that the driver can be created
+        $turba = Turba_Driver::singleton('wrobel@example.org');
+        $this->assertNoError($turba);
+
+        $result = $turba->search(array(), array('last-name'));
+        $this->assertNoError($result);
+        $this->assertEquals(2, $result->count());
+
+        $turba = Turba_Driver::singleton('INBOX%2Ftest2');
+        $result = $turba->search(array(), array('last-name'));
+
+        $this->assertEquals(0, $result->count());
+    }
+
+    function testPhoto()
+    {
+        /* Open our addressbook */
+        $this->_kolab->open('INBOX/Contacts', 1);
+
+        $object = array(
+            'uid' => 1,
+            'given-name' => 'photo',
+            'last-name' => 'photo',
+            'full-name' => 'photo photo',
+            'photo' => 'abcd',
+            'phototype' => 'image/jpeg',
+        );
+
+        // Save the contact
+        $turba = Turba_Driver::singleton('wrobel@example.org');
+        $this->assertNoError($turba);
+
+        $this->assertNoError($turba->_add($object));
+
+        $list = Kolab_List::singleton();
+        $share = &$list->getByShare('INBOX/Contacts', 'contact');
+        $data = &$share->getData();
+        $object = $data->getObject('1');
+        $this->assertTrue(isset($object['_attachments'][$object['picture']]));
+        $attachment = $data->getAttachment($object['_attachments'][$object['picture']]['key']);
+        $this->assertEquals("abcd\n", $attachment);
+    }
+
+    function testAttachments()
+    {
+        /* Open our addressbook */
+        $this->_kolab->open('INBOX/Contacts', 1);
+
+        $object = array(
+            'uid' => 'a',
+            'given-name' => 'atc',
+            'last-name' => 'atc',
+            'full-name' => 'atc atc',
+        );
+
+        // Save the contact
+        $turba = Turba_Driver::singleton('wrobel@example.org');
+        $this->assertNoError($turba);
+
+        $this->assertNoError($turba->_add($object));
+
+        $contact = $turba->getObject('a');
+        $this->assertNoError($contact);
+
+        $list = Kolab_List::singleton();
+        $share = &$list->getByShare('INBOX/Contacts', 'contact');
+        $data = &$share->getData();
+
+        $atc1 = Horde_Util::getTempFile();
+        $fh = fopen($atc1, 'w');
+        fwrite($fh, 'test');
+        fclose($fh);
+
+        $info = array('tmp_name' => $atc1,
+                      'name' => 'test.txt');
+        $this->assertNoError($contact->addFile($info));
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(isset($object['_attachments']));
+        $this->assertEquals(1, count($object['_attachments']));
+        $this->assertEquals(1, count($object['link-attachment']));
+        $this->assertContains('test.txt', $object['link-attachment']);
+        $attachment = $data->getAttachment($object['_attachments']['test.txt']['key']);
+        $this->assertEquals("test\n", $attachment);
+
+        $atc1 = Horde_Util::getTempFile();
+        $fh = fopen($atc1, 'w');
+        fwrite($fh, 'hhhh');
+        fclose($fh);
+
+        $info = array('tmp_name' => $atc1,
+                      'name' => 'test.txt');
+        $this->assertNoError($contact->addFile($info));
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(isset($object['_attachments']));
+        $this->assertEquals(2, count($object['_attachments']));
+        $this->assertEquals(2, count($object['link-attachment']));
+        $this->assertContains('test[1].txt', $object['link-attachment']);
+        $attachment = $data->getAttachment($object['_attachments']['test[1].txt']['key']);
+        $this->assertEquals("hhhh\n", $attachment);
+
+        $atc1 = Horde_Util::getTempFile();
+        $fh = fopen($atc1, 'w');
+        fwrite($fh, 'dummy');
+        fclose($fh);
+
+        $info = array('tmp_name' => $atc1,
+                      'name' => 'dummy.txt');
+        $this->assertNoError($contact->addFile($info));
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(isset($object['_attachments']));
+        $this->assertEquals(3, count($object['_attachments']));
+        $this->assertEquals(3, count($object['link-attachment']));
+        $this->assertContains('dummy.txt', $object['link-attachment']);
+        $attachment = $data->getAttachment($object['_attachments']['dummy.txt']['key']);
+        $this->assertEquals("dummy\n", $attachment);
+
+        $this->assertError($contact->deleteFile('doesnotexist.txt'), "Unable to delete VFS file.");
+
+        $this->assertNoError($contact->deleteFile('test[1].txt'));
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(!isset($object['_attachments']['test[1].txt']));
+        $this->assertEquals(2, count($object['_attachments']));
+        $this->assertEquals(2, count($object['link-attachment']));
+        $this->assertNotContains('test[1].txt', $object['link-attachment']);
+
+        $files = $contact->listFiles();
+        $this->assertNoError($files);
+        
+        $this->assertContains('test.txt', array_keys($files));
+        $this->assertContains('dummy.txt', array_keys($files));
+
+        $this->assertNoError($contact->deleteFiles());
+
+        $objects = $data->getObjects();
+        $this->assertEquals(1, count($objects));
+        $object = $data->getObject('a');
+        $this->assertTrue(!isset($object['_attachments']['test.txt']));
+        $this->assertTrue(!isset($object['_attachments']));
+        $this->assertTrue(!isset($object['link-attachment']));
+    }
+}
diff --git a/turba/lib/tests/KolabTestBase.php b/turba/lib/tests/KolabTestBase.php
new file mode 100644 (file)
index 0000000..b528018
--- /dev/null
@@ -0,0 +1,179 @@
+<?php
+/**
+ * Base for PHPUnit scenarios.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package  Kolab_Test
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ *  We need the unit test framework
+ */
+require_once 'Horde/Kolab/Test/Storage.php';
+
+/**
+ *  We need some additional tools for Turba
+ */
+require_once 'Horde/Share.php';
+require_once 'Horde/Kolab.php';
+
+/**
+ * Base for PHPUnit scenarios.
+ *
+ * Copyright 2008-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package  Kolab_Test
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Turba_KolabTestBase extends Horde_Kolab_Test_Storage
+{
+    /**
+     * Handle a "given" step.
+     *
+     * @param array  &$world    Joined "world" of variables.
+     * @param string $action    The description of the step.
+     * @param array  $arguments Additional arguments to the step.
+     *
+     * @return mixed The outcome of the step.
+     */
+    public function runGiven(&$world, $action, $arguments)
+    {
+        switch($action) {
+        default:
+            return parent::runGiven($world, $action, $arguments);
+        }
+    }
+
+    /**
+     * Handle a "when" step.
+     *
+     * @param array  &$world    Joined "world" of variables.
+     * @param string $action    The description of the step.
+     * @param array  $arguments Additional arguments to the step.
+     *
+     * @return mixed The outcome of the step.
+     */
+    public function runWhen(&$world, $action, $arguments)
+    {
+        switch($action) {
+        default:
+            return parent::runWhen($world, $action, $arguments);
+        }
+    }
+
+    /**
+     * Handle a "then" step.
+     *
+     * @param array  &$world    Joined "world" of variables.
+     * @param string $action    The description of the step.
+     * @param array  $arguments Additional arguments to the step.
+     *
+     * @return mixed The outcome of the step.
+     */
+    public function runThen(&$world, $action, $arguments)
+    {
+        switch($action) {
+        default:
+            return parent::runThen($world, $action, $arguments);
+        }
+    }
+
+    /**
+     * Prepare the configuration.
+     *
+     * @return NULL
+     */
+    public function prepareConfiguration()
+    {
+    }
+
+    /**
+     * Prepare the registry.
+     *
+     * @return NULL
+     */
+    public function prepareRegistry()
+    {
+    }
+
+    /**
+     * Prepare the notification setup.
+     *
+     * @return NULL
+     */
+    public function prepareNotification()
+    {
+    }
+
+    /**
+     * Fix the read configuration.
+     *
+     * @return NULL
+     */
+    public function prepareFixedConfiguration()
+    {
+        $GLOBALS['conf'] = &$GLOBALS['registry']->_confCache['horde'];
+        $GLOBALS['conf']['kolab']['server']['driver'] = 'test';
+        $GLOBALS['conf']['documents']['type'] = 'horde';
+    }
+
+    /**
+     * Prepare the Turba setup.
+     *
+     * @return NULL
+     */
+    public function prepareTurba()
+    {
+        $world = &$this->prepareBasicSetup();
+
+        $this->assertTrue($world['auth']->authenticate('wrobel@example.org',
+                                                       array('password' => 'none')));
+
+        // Disable maintenance
+        $GLOBALS['turba_no_maintenance'] = true;
+        $GLOBALS['registry']->pushApp('turba');
+
+        // Find the base file path of Turba.
+        if (!defined('TURBA_BASE')) {
+            define('TURBA_BASE', dirname(__FILE__) . '/../..');
+        }
+
+        // Turba base libraries.
+        require_once TURBA_BASE . '/lib/Turba.php';
+        require_once TURBA_BASE . '/lib/Driver.php';
+        require_once TURBA_BASE . '/lib/Object.php';
+
+        // Turba source and attribute configuration.
+        include TURBA_BASE . '/config/attributes.php';
+        include TURBA_BASE . '/config/sources.php';
+        unset($cfgSources['kolab_global']);
+
+        $this->prepareNewFolder($world['storage'], 'Contacts', 'contact', true);
+        $this->prepareNewFolder($world['storage'], 'test2', 'contact');
+
+        $_SESSION['turba']['has_share'] =  true;
+        $GLOBALS['turba_shares'] = &Horde_Share::singleton('turba');
+
+        $GLOBALS['cfgSources'] = Turba::getConfigFromShares($cfgSources);
+    }
+
+
+    function provideServerName() {
+        return 'localhost.localdomain';
+    }
+
+    function provideHordeBase() {
+        return dirname(__FILE__) . '/../../../';
+    }
+}
diff --git a/turba/lib/tests/ListTest.php b/turba/lib/tests/ListTest.php
new file mode 100644 (file)
index 0000000..b9d76ef
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+require_once dirname(__FILE__) . '/TestBase.php';
+
+/**
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_ListTest extends Turba_TestBase {
+
+    function setUp()
+    {
+        parent::setUp();
+        $this->setUpDatabase();
+    }
+
+    function test_sort_should_sort_according_to_passed_parameters()
+    {
+        $this->assertSortsList(array($this, 'sortList'));
+    }
+
+    function sortList($order)
+    {
+        $list = $this->getList();
+        $list->sort($order);
+        return $list;
+    }
+
+}
diff --git a/turba/lib/tests/ListViewTest.php b/turba/lib/tests/ListViewTest.php
new file mode 100644 (file)
index 0000000..62531c1
--- /dev/null
@@ -0,0 +1,87 @@
+<?php
+
+require_once dirname(__FILE__) . '/TestBase.php';
+
+/**
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_ListViewTest extends Turba_TestBase {
+
+    function setUp()
+    {
+        parent::setUp();
+        $this->setUpDatabase();
+        require_once dirname(__FILE__) . '/../ListView.php';
+    }
+
+    function callListView($method, &$numDisplayed, $param = null)
+    {
+        $GLOBALS['source'] = '_test_sql';
+        $GLOBALS['cfgSources'] = array('_test_sql' => $this->getDriverConfig());
+
+        $list = $this->getList();
+        $sources = Turba::getColumns();
+        $columns = isset($sources['_test_sql']) ? $sources['_test_sql'] : array();
+        $view = new Turba_ListView($list, null, $columns);
+        $this->_output = $view->$method($numDisplayed, $param);
+        $this->assertOk($this->_output);
+        $this->assertNoUnwantedPattern('/Fatal error/', $this->_output);
+        $this->assertNoUnwantedPattern('/Warning/', $this->_output);
+        return $view;
+    }
+
+    function test_getAddSources_returns_sources_sorted_by_name()
+    {
+        $result = Turba_ListView::getAddSources();
+        if (!$this->assertOk($result)) {
+            return;
+        }
+
+        list($addToList, $addToListSources) = $result;
+
+        $groups = $this->_groups;
+        sort($groups);
+        foreach ($addToList as $item) {
+            if (!empty($groups) && !empty($item['name']) &&
+                $groups[0] == $item['name']) {
+                array_shift($groups);
+            }
+        }
+
+        $this->assertTrue(empty($groups),
+                          "Some group not found or not found in right order.");
+    }
+
+    function test_getPage_renders_all_list_items()
+    {
+        $this->callListView('getPage', $numDisplayed);
+        foreach ($this->_sortedByLastname as $name) {
+            $this->assertWantedPattern('/' . preg_quote($name, '/') . '/',
+                                       $this->_output);
+        }
+
+        $this->assertEqual(count($this->_sortedByLastname), $numDisplayed);
+    }
+
+    function test_getAlpha_renders_filtered_items()
+    {
+        $this->callListView('getAlpha', $numDisplayed, 'j');
+        $count = 0;
+        foreach ($this->_sortedByLastname as $name) {
+            if (Horde_String::lower($name{0}) == 'j') {
+                $this->assertWantedPattern('/' . preg_quote($name, '/') . '/',
+                                           $this->_output);
+                $count++;
+            } else {
+                $this->assertNoUnwantedPattern('/' . preg_quote($name, '/') .
+                                               '/', $this->_output);
+            }
+        }
+
+        $this->assertEqual($count, $numDisplayed);
+        $this->assertNotEqual(0, $count);
+    }
+
+}
diff --git a/turba/lib/tests/TestBase.php b/turba/lib/tests/TestBase.php
new file mode 100644 (file)
index 0000000..191784e
--- /dev/null
@@ -0,0 +1,273 @@
+<?php
+/**
+ * Base class for Turba test cases
+ *
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_TestBase extends PHPUnit_Framework_TestCase {
+
+    var $_driver;
+    var $_driverConfig = array(
+        'title' => "My Address Book",
+        'type' => 'sql',
+        'params' => null,
+        'map' => array(
+            '__key' => 'object_id',
+            '__owner' => 'owner_id',
+            '__type' => 'object_type',
+            '__members' => 'object_members',
+            '__uid' => 'object_uid',
+            'name' => 'object_name',
+            'email' => 'object_email',
+            'alias' => 'object_alias',
+            'homeAddress' => 'object_homeaddress',
+            'workAddress' => 'object_workaddress',
+            'homePhone' => 'object_homephone',
+            'workPhone' => 'object_workphone',
+            'cellPhone' => 'object_cellphone',
+            'fax' => 'object_fax',
+            'title' => 'object_title',
+            'company' => 'object_company',
+            'notes' => 'object_notes',
+            'pgpPublicKey' => 'object_pgppublickey',
+            'smimePublicKey' => 'object_smimepublickey',
+            'freebusyUrl' => 'object_freebusyurl'
+        ),
+        'search' => array(
+            'name',
+            'email'
+        ),
+        'strict' => array(
+            'object_id',
+            'owner_id',
+            'object_type',
+        ),
+        'export' => true,
+        'browse' => true,
+        'use_shares' => false,
+    );
+
+    var $_fixtures = array(array('object_id' => 'aaa',
+                                 'object_type' => 'Object',
+                                 'owner_id' => '1',
+                                 'object_name' => 'Jason Felice',
+                                 'object_company' => 'Cronosys, LLC'),
+                           array('object_id' => 'bbb',
+                                 'object_type' => 'Object',
+                                 'owner_id' => '1',
+                                 'object_name' => 'Joe Fabetes',
+                                 'object_company' => 'Example, Inc.'),
+                           array('object_id' => 'ccc',
+                                 'object_type' => 'Object',
+                                 'owner_id' => '1',
+                                 'object_name' => 'Alice Z',
+                                 'object_company' => 'Example, Inc.'),
+                           array('object_id' => 'ddd',
+                                 'object_type' => 'Object',
+                                 'owner_id' => '1',
+                                 'object_name' => 'Zoe A',
+                                 'object_company' => 'Example, Inc.'),
+                           array('object_id' => 'eee',
+                                 'object_type' => 'Object',
+                                 'owner_id' => '1',
+                                 'object_name' => 'Alan Garrison',
+                                 'object_company' => 'Cronosys, LLC'),
+                           array('object_id' => 'fff',
+                                 'owner_id' => '1',
+                                 'object_type' => 'Group',
+                                 'object_name' => 'Test Group',
+                                 'object_members' => 'a:5:{i:0;s:3:"aaa";i:1;s:3:"bbb";i:2;s:3:"ccc";i:3;s:3:"ddd";i:4;s:3:"eee";}'),
+                           array('object_id' => 'ggg',
+                                 'owner_id' => '1',
+                                 'object_type' => 'Group',
+                                 'object_name' => 'Alpha First Group',
+                                 'object_members' => 'a:4:{i:0;s:3:"aaa";i:1;s:3:"bbb";i:2;s:3:"ccc";i:3;s:3:"ddd";}'));
+
+    var $_sortedByLastname = array('Zoe A', 'Joe Fabetes', 'Jason Felice',
+                                   'Alan Garrison', 'Alice Z');
+    var $_groups = array("Test Group", "Alpha First Group");
+    var $_sortedByCompanyThenLastname = array('Jason Felice', 'Alan Garrison',
+                                              'Zoe A', 'Joe Fabetes',
+                                              'Alice Z');
+    var $_sortedByCompanyThenLastnameDesc = array('Alan Garrison',
+                                                  'Jason Felice',
+                                                  'Alice Z', 'Joe Fabetes',
+                                                  'Zoe A');
+
+    /**
+     * Retrieves an SQL driver instance.
+     *
+     * @return object Initialized Turba_Driver_sql:: instance connected to the
+     *                test database.
+     */
+    function getDriver()
+    {
+        if (is_null($this->_driver)) {
+            $this->_driver = Turba_Driver::factory('_test_sql',
+                                                   $this->getDriverConfig());
+            $this->assertOk($this->_driver);
+            $this->assertOk($this->_driver->_init());
+        }
+        return $this->_driver;
+    }
+
+    function getDriverConfig()
+    {
+        if (is_null($this->_driverConfig['params'])) {
+            $this->_driverConfig['params'] = array_merge(
+                $this->getTestDatabaseSQLDriverConfig(),
+                array('table' => 'hordetest_turba_objects'));
+        }
+
+        return $this->_driverConfig;
+    }
+
+    /**
+     * Gets the driver's database connection
+     *
+     * FIXME: Should use acceptance environment's method of connecting, and
+     * treat the driver more opaquely.
+     *
+     * @return object PEAR DB reference
+     */
+    function getDb()
+    {
+        $driver = $this->getDriver();
+        return $driver->_db;
+    }
+
+    /**
+     * Asserts that the supplied result is not a PEAR_Error
+     *
+     * Fails with a descriptive message if so
+     * @param mixed $result  The value to check
+     * @return boolean  Whether the assertion was successful
+     */
+    function assertOk($result)
+    {
+        if (is_a($result, 'DB_Error')) {
+            $this->fail($result->getDebugInfo());
+            return false;
+        } elseif (is_a($result, 'PEAR_Error')) {
+            $this->fail($result->getMessage());
+            return false;
+        }
+
+        return true;
+    }
+
+    function setUp()
+    {
+        @define('TURBA_BASE', dirname(__FILE__) . '/../..');
+        @define('TURBA_TEMPLATES', $GLOBALS['registry']->get('templates', 'turba'));
+        require_once TURBA_BASE . '/lib/Driver.php';
+        require_once TURBA_BASE . '/lib/Object.php';
+        require_once TURBA_BASE . '/lib/List.php';
+        require_once TURBA_BASE . '/lib/Turba.php';
+    }
+
+    function setUpDatabase()
+    {
+        // Create a new test table, overwriting old ones.
+        require_once 'MDB2/Schema.php';
+        $config = $this->getDriverConfig();
+        $manager = MDB2_Schema::factory($config['params']);
+        $defs = $manager->parseDatabaseDefinition(dirname(dirname(dirname(__FILE__))) . '/scripts/sql/test.xml',
+                                                  false,
+                                                  array('name' => $config['params']['database']),
+                                                  false);
+        $result = $manager->createTable('hordetest_turba_objects', $defs['tables']['hordetest_turba_objects'], true);
+        $this->assertOk($result);
+
+        foreach ($this->_fixtures as $fixture) {
+            $this->assertOk($this->_insert($fixture));
+        }
+    }
+
+    function _insert($object)
+    {
+        require_once 'Horde/SQL.php';
+        $db = $this->getDb();
+        $sql = "INSERT INTO hordetest_turba_objects " .
+               Horde_SQL::insertValues($db, $object) .
+               ";";
+        $result = $db->query($sql);
+        $this->assertOk($result);
+        return $result;
+    }
+
+
+    function assertSortsList($callback)
+    {
+        $names = $this->_sortedByLastname;
+        sort($names);
+
+        $tests = array(array('order'   => array(array('field' => 'lastname',
+                                                      'ascending' => true)),
+                             'results' => $this->_sortedByLastname),
+                       array('order'   => array(array('field' => 'lastname',
+                                                      'ascending' => false)),
+                             'results' => array_reverse($this->_sortedByLastname)),
+                       array('order'   => array(array('field' => 'company',
+                                                      'ascending' => true),
+                                                array('field' => 'lastname',
+                                                      'ascending' => true)),
+                             'results' => $this->_sortedByCompanyThenLastname),
+                       array('order'   => array(array('field' => 'company',
+                                                      'ascending' => true),
+                                                array('field' => 'lastname',
+                                                      'ascending' => false)),
+                             'results' => $this->_sortedByCompanyThenLastnameDesc),
+                       array('order'   => array(array('field' => 'name',
+                                                      'ascending' => true)),
+                             'results' => $names),
+                       array('order'   => array(array('field' => 'name',
+                                                      'ascending' => false)),
+                             'results' => array_reverse($names)));
+
+        foreach ($tests as $test) {
+            $list = call_user_func($callback, $test['order']);
+            $this->assertOk($list);
+            if (!$this->assertTrue(is_a($list, 'Turba_List'))) {
+                return;
+            }
+            $this->assertOk($list->reset());
+
+            foreach ($test['results'] as $name) {
+                $this->assertTrue($ob = $list->next());
+                if (!$this->assertTrue(is_a($ob, 'Turba_Object'))) {
+                    continue;
+                }
+                $this->assertEqual($name, $ob->getValue('name'));
+            }
+        }
+    }
+
+    function fakeAuth()
+    {
+        /* Turba_Driver::search() is coupled with authentication global
+         * state. */
+        $_SESSION['__auth'] = array('authenticated' => true,
+                                    'userId' => '1');
+        $this->assertEqual('1', Horde_Auth::getAuth());
+    }
+
+    /**
+     * Constructs and returns a Turba_List:: object populated with items
+     *
+     * @return Turba_List
+     */
+    function getList()
+    {
+        $list = new Turba_List();
+        $driver = $this->getDriver();
+        foreach (array('eee', 'ccc', 'ddd', 'bbb', 'aaa') as $id) {
+            $result = $list->insert($driver->getObject($id));
+            $this->assertOk($result);
+        }
+        return $list;
+    }
+
+}
diff --git a/turba/lib/tests/ViewBrowseTest.php b/turba/lib/tests/ViewBrowseTest.php
new file mode 100644 (file)
index 0000000..204e49f
--- /dev/null
@@ -0,0 +1,180 @@
+<?php
+
+require_once dirname(__FILE__) . '/TestBase.php';
+
+/**
+ * @author  Jason M. Felice <jason.m.felice@gmail.com>
+ * @package Turba
+ * @subpackage UnitTests
+ */
+class Turba_ViewBrowseTest extends Turba_TestBase {
+
+    function setUp()
+    {
+        parent::setUp();
+        require_once TURBA_BASE . '/lib/View/Browse.php';
+        $this->setUpDatabase();
+        $this->setUpBrowseView();
+    }
+
+    function setUpBrowseView()
+    {
+        $vars = new Horde_Variables();
+        $notification = $GLOBALS['notification'];
+        $turbaConf = array();
+        $turbaConf['menu']['import_export'] = true;
+        $turbaConf['menu']['apps'] = array();
+        $turbaConf['client']['addressbook'] = '_test_sql';
+        $turbaConf['shares']['source'] = 'foo';
+        $turbaConf['comments']['allow'] = true;
+        $turbaConf['documents']['type'] = 'horde';
+        include TURBA_BASE . '/config/attributes.php';
+
+        $cfgSources = array('_test_sql' => $this->getDriverConfig());
+        $this->_pageParams = array('vars' => $vars,
+                                   'prefs' => $GLOBALS['prefs'],
+                                   'notification' => $notification,
+                                   'registry' => $GLOBALS['registry'],
+                                   'browse_source_count' => 1,
+                                   'browse_source_options' => "My Address Book",
+                                   'copymove_source_options' => null,
+                                   'copymoveSources' => array(),
+                                   'addSources' => $cfgSources,
+                                   'cfgSources' => $cfgSources,
+                                   'attributes' => $attributes,
+                                   'turba_shares' => false,
+                                   'conf' => $turbaConf,
+                                   'source' => '_test_sql',
+                                   'browser' => $GLOBALS['browser']);
+
+        // These are referenced explicitly from $GLOBALS, *sigh*
+        $GLOBALS['browse_source_count'] = $this->_pageParams['browse_source_count'];
+        $GLOBALS['addSources'] = $cfgSources;
+        $GLOBALS['copymoveSources'] = array();
+        $GLOBALS['cfgSources'] = $cfgSources;
+
+        $this->setPref('addressbooks', '_test_sql');
+    }
+
+    function getPage()
+    {
+        $this->_pageParams['registry']->pushApp('turba', false);
+        $this->fakeAuth();
+        $page = new Turba_View_Browse($this->_pageParams);
+        $this->_output = Horde_Util::bufferOutput(array($page, 'run'));
+        if ($push_result) {
+            $this->_pageParams['registry']->popApp();
+        }
+
+        $this->assertNoUnwantedPattern('/<b>Warning/', $this->_output);
+        $this->assertNoUnwantedPattern('/<b>Fatal error/i', $this->_output);
+
+        return $this->_output;
+    }
+
+    function setPref($name, $value)
+    {
+        $prefs = $this->_pageParams['prefs'];
+        $this->assertOk($prefs->setValue($name, $value));
+        $this->assertEqual($value, $prefs->getValue($name));
+    }
+
+    function getPref($name)
+    {
+        return $this->_pageParams['prefs']->getValue($name);
+    }
+
+    function setVar($name, $value)
+    {
+        $vars = $this->_pageParams['vars'];
+        $vars->set($name, $value);
+    }
+
+    function assertOutputContainsItems($items, $m = 'assertWantedPattern')
+    {
+        $fail = false;
+        foreach ($items as $item) {
+            $pattern = '!>' . preg_quote($item, '!') . '</a>!';
+            if (!$this->$m($pattern, $this->_output)) {
+                $fail = true;
+            }
+        }
+        if ($fail) {
+            print $this->_output;
+        }
+        return !$fail;
+    }
+
+    function assertOutputDoesNotContainItems($items)
+    {
+        return $this->assertOutputContainsItems($items,
+                                                'assertNoUnwantedPattern');
+    }
+
+    function test_getting_page_shows_all_contacts_and_groups_from_test_addressbook()
+    {
+        $this->getPage();
+        $this->assertOutputContainsItems(array_merge($this->_sortedByLastname, $this->_groups));
+    }
+
+    function test_getting_page_with_sort_parameters_updates_sort_preferences()
+    {
+        $this->setPref('sortorder', '');
+        $this->setVar('sortby', '0');
+        $this->setVar('sortdir', '1');
+        $this->getPage();
+        $this->assertEqual(serialize(array(array('field' => 'lastname', 'ascending' => false))),
+                           $this->getPref('sortorder'));
+    }
+
+    function test_getting_page_with_show_equals_contacts_will_show_only_contacts()
+    {
+        $this->setVar('show', 'contacts');
+        $this->getPage();
+        $this->assertOutputContainsItems($this->_sortedByLastname);
+        $this->assertOutputDoesNotContainItems($this->_groups);
+    }
+
+    function test_getting_page_with_show_equals_lists_will_show_only_groups()
+    {
+        $this->setVar('show', 'lists');
+        $this->getPage();
+        $this->assertOutputDoesNotContainItems($this->_sortedByLastname);
+        $this->assertOutputContainsItems($this->_groups);
+    }
+
+    function test_browsing_list_shows_list_members_only()
+    {
+        $groupId = 'ggg';
+        $this->setVar('key', $groupId);
+        $this->getPage();
+
+        $found = false;
+        foreach ($this->_fixtures as $fixture) {
+            if ($fixture['object_id'] == $groupId) {
+                $found = true;
+                $this->assertEqual('Group', $fixture['object_type']);
+                $memberIds = unserialize($fixture['object_members']);
+            }
+        }
+        $this->assertTrue($found);
+
+        $inList = array();
+        $notInList = array();
+        foreach ($this->_fixtures as $fixture) {
+            if ($fixture['object_type'] == 'Object') {
+                if (in_array($fixture['object_id'], $memberIds)) {
+                    $inList[] = $fixture['object_name'];
+                } else {
+                    $notInList[] = $fixture['object_name'];
+                }
+            }
+        }
+
+        $this->assertFalse(empty($inList));
+        $this->assertOutputContainsItems($inList);
+        $this->assertFalse(empty($notInList));
+        $this->assertOutputDoesNotContainItems($notInList);
+    }
+
+}
diff --git a/turba/lib/tests/az.png b/turba/lib/tests/az.png
new file mode 100644 (file)
index 0000000..2b646f9
Binary files /dev/null and b/turba/lib/tests/az.png differ
diff --git a/turba/lib/tests/bug_6518.phpt b/turba/lib/tests/bug_6518.phpt
new file mode 100644 (file)
index 0000000..42b1f60
--- /dev/null
@@ -0,0 +1,34 @@
+--TEST--
+Data_ldif: Bug #6518
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+require 'Horde.php';
+require 'Horde/Data.php';
+require dirname(__FILE__) . '/../Data/ldif.php';
+
+$ldif = new Horde_Data_ldif();
+
+$data = array(array('firstname' => 'John',
+                    'lastname' => 'Püblic',
+                    'name' => 'John Püblic',
+                    'email' => 'john@example.com'),
+              );
+
+echo $ldif->exportData($data, false) . "\n";
+?>
+--EXPECT--
+dn:: Y249Sm9obiBQw7xibGljLG1haWw9am9obkBleGFtcGxlLmNvbQ==
+objectclass: top
+objectclass: person
+objectclass: organizationalPerson
+objectclass: inetOrgPerson
+objectclass: mozillaAbPersonAlpha
+cn:: Sm9obiBQw7xibGlj
+givenName: John
+sn:: UMO8YmxpYw==
+mail: john@example.com
+modifytimestamp: 0Z
+
diff --git a/turba/lib/tests/import.ldif b/turba/lib/tests/import.ldif
new file mode 100644 (file)
index 0000000..080925b
--- /dev/null
@@ -0,0 +1,51 @@
+dn: cn=John Smith,mail=js23@school.edu
+objectclass: top
+objectclass: person
+objectclass: organizationalPerson
+objectclass: inetOrgPerson
+objectclass: mozillaAbPersonAlpha
+givenName: John
+sn: Smith
+cn: John Smith
+mail: js23@school.edu
+modifytimestamp: 0Z
+
+dn: cn=Charlie Brown,mail=brown@school.edu
+objectclass: top
+objectclass: person
+objectclass: organizationalPerson
+objectclass: inetOrgPerson
+objectclass: mozillaAbPersonAlpha
+givenName: Charles
+sn: Brown
+cn: Charlie Brown
+mozillaNickname: Chuck
+mail: brown@school.edu
+mozillaSecondEmail: brown@gmail.com
+nsAIMid: CharlieBrown
+mozillaUseHtmlMail: false
+modifytimestamp: 0Z
+telephoneNumber: +1 212 876 5432
+homePhone: +1 203 234 5678
+fax: +1 203 999 9999
+pager: +1 203 111 1111
+mobile: +1 917 321 0987
+homeStreet: 12 west 57 street
+mozillaHomeStreet2: Apt 2076
+mozillaHomeLocalityName: New York
+mozillaHomeState: New York
+mozillaHomePostalCode: 10001
+mozillaHomeCountryName: USA
+street: 12 West 55th Street
+mozillaWorkStreet2: Room 22
+l: New York
+st: New York
+postalCode: 10001
+c: USA
+title: Senior Systems Programmer
+department: CUIT
+company: School University
+mozillaWorkUrl: http://www.school.edu/
+mozillaHomeUrl: http://www.school.edu/~brown/
+description:: aGkgbW9tCg==
+
diff --git a/turba/lib/tests/importCRLF.ldif b/turba/lib/tests/importCRLF.ldif
new file mode 100644 (file)
index 0000000..88542ad
--- /dev/null
@@ -0,0 +1,51 @@
+dn: cn=John Smith,mail=js23@school.edu\r
+objectclass: top\r
+objectclass: person\r
+objectclass: organizationalPerson\r
+objectclass: inetOrgPerson\r
+objectclass: mozillaAbPersonAlpha\r
+givenName: John\r
+sn: Smith\r
+cn: John Smith\r
+mail: js23@school.edu\r
+modifytimestamp: 0Z\r
+\r
+dn: cn=Charlie Brown,mail=brown@school.edu\r
+objectclass: top\r
+objectclass: person\r
+objectclass: organizationalPerson\r
+objectclass: inetOrgPerson\r
+objectclass: mozillaAbPersonAlpha\r
+givenName: Charles\r
+sn: Brown\r
+cn: Charlie Brown\r
+mozillaNickname: Chuck\r
+mail: brown@school.edu\r
+mozillaSecondEmail: brown@gmail.com\r
+nsAIMid: CharlieBrown\r
+mozillaUseHtmlMail: false\r
+modifytimestamp: 0Z\r
+telephoneNumber: +1 212 876 5432\r
+homePhone: +1 203 234 5678\r
+fax: +1 203 999 9999\r
+pager: +1 203 111 1111\r
+mobile: +1 917 321 0987\r
+homeStreet: 12 west 57 street\r
+mozillaHomeStreet2: Apt 2076\r
+mozillaHomeLocalityName: New York\r
+mozillaHomeState: New York\r
+mozillaHomePostalCode: 10001\r
+mozillaHomeCountryName: USA\r
+street: 12 West 55th Street\r
+mozillaWorkStreet2: Room 22\r
+l: New York\r
+st: New York\r
+postalCode: 10001\r
+c: USA\r
+title: Senior Systems Programmer\r
+department: CUIT\r
+company: School University\r
+mozillaWorkUrl: http://www.school.edu/\r
+mozillaHomeUrl: http://www.school.edu/~brown/\r
+description:: aGkgbW9tCg==\r
+\r
diff --git a/turba/lib/tests/ldif_exportFile.phpt b/turba/lib/tests/ldif_exportFile.phpt
new file mode 100644 (file)
index 0000000..78f40ce
--- /dev/null
@@ -0,0 +1,92 @@
+--TEST--
+Export Simple LDIF file
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+require 'Horde.php';
+require 'Horde/Data.php';
+require dirname(__FILE__) . '/../Data/ldif.php';
+
+$ldif = new Horde_Data_ldif();
+
+$data = array(array('firstname' => 'John',
+                    'lastname' => 'Smith',
+                    'name' => 'John Smith',
+                    'email' => 'js23@school.edu'),
+              array('firstname' => 'Charles',
+                    'lastname' => 'Brown',
+                    'name' => 'Charlie Brown',
+                    'alias' => 'Chuck',
+                    'birthday' => 'May 1',
+                    'workPhone' => '+1 212 876 5432',
+                    'homePhone' => '+1 203 234 5678',
+                    'fax' => '+1 203 999 9999',
+                    'cellPhone' => '+1 917 321 0987',
+                    'homeStreet' => '12 west 57 street',
+                    'homeCity' => 'New York',
+                    'homeProvince' => 'New York',
+                    'homePostalCode' => '10001',
+                    'homeCountry' => 'USA',
+                    'workStreet' => '12 west 55 street',
+                    'workCity' => 'New York',
+                    'workProvince' => 'New York',
+                    'workPostalCode' => '10001',
+                    'workCountry' => 'USA',
+                    'title' => 'Senior Systems Programmer',
+                    'department' => 'SUIT',
+                    'company' => 'School University',
+                    'website' => 'http://www.school.edu/',
+                    'freebusyUrl' => 'http://www.school.edu/~chuck/fb.ics',
+                    'notes' => 'hi mom
+',
+                    'email' => 'brown@school.edu'),
+              );
+
+echo $ldif->exportData($data, false) . "\n";
+?>
+--EXPECT--
+dn: cn=John Smith,mail=js23@school.edu
+objectclass: top
+objectclass: person
+objectclass: organizationalPerson
+objectclass: inetOrgPerson
+objectclass: mozillaAbPersonAlpha
+cn: John Smith
+givenName: John
+sn: Smith
+mail: js23@school.edu
+modifytimestamp: 0Z
+
+dn: cn=Charlie Brown,mail=brown@school.edu
+objectclass: top
+objectclass: person
+objectclass: organizationalPerson
+objectclass: inetOrgPerson
+objectclass: mozillaAbPersonAlpha
+cn: Charlie Brown
+givenName: Charles
+sn: Brown
+mail: brown@school.edu
+mozillaHomeStreet2: 12 west 57 street
+mozillaHomeLocalityName: New York
+mozillaHomeState: New York
+mozillaHomePostalCode: 10001
+mozillaHomeCountryName: USA
+mozillaWorkStreet2: 12 west 55 street
+l: New York
+st: New York
+postalCode: 10001
+c: USA
+homePhone: +1 203 234 5678
+telephoneNumber: +1 212 876 5432
+mobile: +1 917 321 0987
+fax: +1 203 999 9999
+title: Senior Systems Programmer
+company: School University
+description:: aGkgbW9tCg==
+mozillaWorkUrl: http://www.school.edu/
+department: SUIT
+modifytimestamp: 0Z
+
diff --git a/turba/lib/tests/ldif_importFile.phpt b/turba/lib/tests/ldif_importFile.phpt
new file mode 100644 (file)
index 0000000..cb29bee
--- /dev/null
@@ -0,0 +1,85 @@
+--TEST--
+Import Simple LDIF file, LF terminated
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+require 'Horde.php';
+require 'Horde/Data.php';
+require dirname(__FILE__) . '/../Data/ldif.php';
+
+$data = new Horde_Data_ldif();
+var_dump($data->importFile(dirname(__FILE__) . '/import.ldif', false));
+
+?>
+--EXPECT--
+array(2) {
+  [0]=>
+  array(4) {
+    ["givenName"]=>
+    string(4) "John"
+    ["sn"]=>
+    string(5) "Smith"
+    ["cn"]=>
+    string(10) "John Smith"
+    ["mail"]=>
+    string(15) "js23@school.edu"
+  }
+  [1]=>
+  array(26) {
+    ["givenName"]=>
+    string(7) "Charles"
+    ["sn"]=>
+    string(5) "Brown"
+    ["cn"]=>
+    string(13) "Charlie Brown"
+    ["mozillaNickname"]=>
+    string(5) "Chuck"
+    ["mail"]=>
+    string(16) "brown@school.edu"
+    ["telephoneNumber"]=>
+    string(15) "+1 212 876 5432"
+    ["homePhone"]=>
+    string(15) "+1 203 234 5678"
+    ["fax"]=>
+    string(15) "+1 203 999 9999"
+    ["mobile"]=>
+    string(15) "+1 917 321 0987"
+    ["homeStreet"]=>
+    string(17) "12 west 57 street"
+    ["mozillaHomeStreet2"]=>
+    string(8) "Apt 2076"
+    ["mozillaHomeLocalityName"]=>
+    string(8) "New York"
+    ["mozillaHomeState"]=>
+    string(8) "New York"
+    ["mozillaHomePostalCode"]=>
+    string(5) "10001"
+    ["mozillaHomeCountryName"]=>
+    string(3) "USA"
+    ["street"]=>
+    string(19) "12 West 55th Street"
+    ["mozillaWorkStreet2"]=>
+    string(7) "Room 22"
+    ["l"]=>
+    string(8) "New York"
+    ["st"]=>
+    string(8) "New York"
+    ["postalCode"]=>
+    string(5) "10001"
+    ["c"]=>
+    string(3) "USA"
+    ["title"]=>
+    string(25) "Senior Systems Programmer"
+    ["department"]=>
+    string(4) "CUIT"
+    ["company"]=>
+    string(17) "School University"
+    ["mozillaWorkUrl"]=>
+    string(22) "http://www.school.edu/"
+    ["description"]=>
+    string(7) "hi mom
+"
+  }
+}
diff --git a/turba/lib/tests/ldif_importFileCRLF.phpt b/turba/lib/tests/ldif_importFileCRLF.phpt
new file mode 100644 (file)
index 0000000..90137d6
--- /dev/null
@@ -0,0 +1,85 @@
+--TEST--
+Import Simple LDIF file, CRLF terminated
+--FILE--
+<?php
+
+error_reporting(E_ALL);
+
+require 'Horde.php';
+require 'Horde/Data.php';
+require dirname(__FILE__) . '/../Data/ldif.php';
+
+$data = new Horde_Data_ldif();
+var_dump($data->importFile(dirname(__FILE__) . '/importCRLF.ldif', false));
+
+?>
+--EXPECT--
+array(2) {
+  [0]=>
+  array(4) {
+    ["givenName"]=>
+    string(4) "John"
+    ["sn"]=>
+    string(5) "Smith"
+    ["cn"]=>
+    string(10) "John Smith"
+    ["mail"]=>
+    string(15) "js23@school.edu"
+  }
+  [1]=>
+  array(26) {
+    ["givenName"]=>
+    string(7) "Charles"
+    ["sn"]=>
+    string(5) "Brown"
+    ["cn"]=>
+    string(13) "Charlie Brown"
+    ["mozillaNickname"]=>
+    string(5) "Chuck"
+    ["mail"]=>
+    string(16) "brown@school.edu"
+    ["telephoneNumber"]=>
+    string(15) "+1 212 876 5432"
+    ["homePhone"]=>
+    string(15) "+1 203 234 5678"
+    ["fax"]=>
+    string(15) "+1 203 999 9999"
+    ["mobile"]=>
+    string(15) "+1 917 321 0987"
+    ["homeStreet"]=>
+    string(17) "12 west 57 street"
+    ["mozillaHomeStreet2"]=>
+    string(8) "Apt 2076"
+    ["mozillaHomeLocalityName"]=>
+    string(8) "New York"
+    ["mozillaHomeState"]=>
+    string(8) "New York"
+    ["mozillaHomePostalCode"]=>
+    string(5) "10001"
+    ["mozillaHomeCountryName"]=>
+    string(3) "USA"
+    ["street"]=>
+    string(19) "12 West 55th Street"
+    ["mozillaWorkStreet2"]=>
+    string(7) "Room 22"
+    ["l"]=>
+    string(8) "New York"
+    ["st"]=>
+    string(8) "New York"
+    ["postalCode"]=>
+    string(5) "10001"
+    ["c"]=>
+    string(3) "USA"
+    ["title"]=>
+    string(25) "Senior Systems Programmer"
+    ["department"]=>
+    string(4) "CUIT"
+    ["company"]=>
+    string(17) "School University"
+    ["mozillaWorkUrl"]=>
+    string(22) "http://www.school.edu/"
+    ["description"]=>
+    string(7) "hi mom
+"
+  }
+}
diff --git a/turba/lib/tests/tohash.phpt b/turba/lib/tests/tohash.phpt
new file mode 100644 (file)
index 0000000..9b790aa
--- /dev/null
@@ -0,0 +1,441 @@
+--TEST--
+Turba_Driver::toHash() test.
+--FILE--
+<?php
+
+require_once 'PEAR.php';
+require_once 'Horde/iCalendar.php';
+require dirname(__FILE__) . '/../Object.php';
+require dirname(__FILE__) . '/../Driver.php';
+
+setlocale(LC_ALL, 'de_DE.ISO-8859-1');
+bindtextdomain('turba', dirname(__FILE__) . '/../../locale');
+textdomain('turba');
+
+$vcard1 = '
+BEGIN:VCARD
+VERSION:2.1
+FN;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
+Jan Schneider=F6
+EMAIL:jan@horde.org
+NICKNAME:yunosh
+TEL;HOME:+49 521 555123
+TEL;WORK:+49 521 555456
+TEL;WORK:+49 521 999999
+TEL;CELL:+49 177 555123
+TEL;FAX:+49 521 555789
+TEL;PAGER:+49 123 555789
+BDAY:1971-10-01
+TITLE;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
+Senior Developer (=E4=F6=FC)
+ROLE;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
+Developer (=E4=F6=FC)
+NOTE;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
+A German guy (=E4=F6=FC)
+URL:http://janschneider.de
+N;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
+Schneider=F6;Jan;K.;Mr.;
+ORG;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
+Horde Project;=E4=F6=FC
+ADR;HOME;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
+;;Sch=F6nestr. 15;Bielefeld;;33604;
+ADR;WORK;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:=
+;;H=FCbschestr. 19;K=F6ln;Allg=E4u;;D=E4nemark
+TZ;VALUE=text:+02:00; Europe/Berlin
+GEO:13.377778,52.516276
+BODY:
+END:VCARD
+';
+
+$vcard2 = '
+BEGIN:VCARD
+VERSION:3.0
+FN:Jan Schneiderö
+EMAIL:jan@horde.org
+NICKNAME:yunosh
+TEL;TYPE=HOME:+49 521 555123
+TEL;TYPE=WORK:+49 521 555456
+TEL;TYPE=CELL:+49 177 555123
+TEL;TYPE=FAX:+49 521 555789
+TEL;TYPE=PAGER:+49 123 555789
+BDAY:1971-10-01
+TITLE:Senior Developer (äöü)
+ROLE:Developer (äöü)
+NOTE:A German guy (äöü)
+URL:http://janschneider.de
+N:Schneiderö;Jan;K.;Mr.;
+ORG:Horde Project;äöü
+ADR;TYPE=HOME:;;Schönestr. 15;Bielefeld;;33604;;
+ADR;TYPE=WORK:;;Hübschestr. 19;Köln;Allgäu;;Dänemark
+TZ;VALUE=text:+02:00; Europe/Berlin
+GEO:52.516276;13.377778
+BODY:
+END:VCARD
+';
+
+$vcard3 = '
+BEGIN:VCARD
+VERSION:3.0
+FN:Jan Schneider
+N:Schneider;Jan;K.;Mr.;
+END:VCARD
+';
+
+$vcard4 = '
+BEGIN:VCARD
+VERSION:3.0
+N:Schneider;Jan;K.;Mr.;
+END:VCARD
+';
+
+$vcard5 = '
+BEGIN:VCARD
+VERSION:2.1
+REV:20080523T071425Z
+N:B;A;;;
+TEL;CELL:1
+TEL;VOICE:4
+X-CLASS:private
+TEL;CELL;HOME:2
+TEL;CELL;WORK:3
+TEL;VOICE;HOME:5
+TEL;VOICE;WORK:6
+END:VCARD
+';
+
+$vcard6 = '
+BEGIN:VCARD
+VERSION:2.1
+N:Lastname;Firstname;;;
+FN:Lastname, Firstname
+TITLE:
+ORG:Company Name;
+BDAY:
+TEL;HOME;VOICE;X-Synthesis-Ref1:(xxx) xxx-xxxx
+TEL;WORK;VOICE;X-Synthesis-Ref1:(xxx) xxx-xxxx
+TEL;CELL;VOICE;X-Synthesis-Ref1:(xxx) xxx-xxxx
+EMAIL:email@domain.com
+URL:
+CATEGORIES:Friends
+NOTE;ENCODING=QUOTED-PRINTABLE:
+EIN: xx-xxxxxxx
+ADR;HOME:;;Street address;City;St;12345;USA
+ADR;WORK:;;Street address;City;St;12345;USA
+PHOTO:
+END:VCARD
+';
+
+$vcard7 = '
+BEGIN:VCARD
+FN:Jan Schneider
+N:Schneider;Jan;;;
+PHOTO;ENCODING=b;TYPE=image/png:iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAgMAAACd/+6D
+  AAAACVBMVEW6ABZmZmYAAACMtcxCAAAAAXRSTlMAQObYZgAAABpJREFUCFtjYACBBgYmRgEIZm
+  GBYAFGMAYBABVmAOEH9qP8AAAAAElFTkSuQmCC
+UID:nhCnPyv0u7
+VERSION:2.1
+END:VCARD
+';
+
+$vcard8 = '
+BEGIN:VCARD
+FN:Jan Schneider
+N:Schneider;Jan;;;
+EMAIL;WORK:work@example.com
+EMAIL;HOME:home@example.com
+EMAIL:mail@example.com
+EMAIL;PREF:pref@example.com
+UID:nhCnPyv0u7
+VERSION:2.1
+END:VCARD
+';
+
+$vcard9 = '
+BEGIN:VCARD
+VERSION:2.1
+N:Blow;Joe;;;
+FN:Blow, Joe
+TITLE:
+ORG:;
+BDAY:19700327
+TEL;HOME;VOICE;X-Synthesis-Ref1:302 834 9999
+TEL;CELL;VOICE;X-Synthesis-Ref1:302 521 9999
+EMAIL:Blow@somwhere.net
+URL:
+CATEGORIES:Personal
+NOTE:
+ADR;HOME:;;;;;;
+PHOTO:
+END:VCARD
+';
+
+// Invalid ENCODING value.
+$vcard10 = '
+BEGIN:VCARD
+VERSION:3.0
+PRODID:-//Synthesis AG//NONSGML SyncML Engine V3.1.6.10//EN
+REV:20081004T151032
+N:McTester;Testie;;;
+FN:Testie McTester
+ORG:Testers Inc;
+TEL;TYPE=VOICE,CELL,X-Synthesis-Ref0:+44 775550555
+TEL;TYPE=HOME,VOICE,X-Synthesis-Ref1:+44 205550555
+TEL;TYPE=WORK,VOICE,X-Synthesis-Ref2:+44 205550556
+EMAIL;TYPE=HOME,INTERNET,X-Synthesis-Ref0:test@example.org
+EMAIL;TYPE=WORK,INTERNET,X-Synthesis-Ref1:test@example.com
+ADR;TYPE=HOME,X-Synthesis-Ref0:;;111 One Street;London;;W1 1AA;
+BDAY:20081008
+PHOTO;TYPE=JPEG;ENCODING=BASE64:wolQTkcNChoKAAAADUlIRFIAAAAJAAAACQIDAAAAwp3
+ Dv8OuwoMAAAAJUExURcK6ABZmZmYAAADCjMK1w4xCAAAAAXRSTlMAQMOmw5hmAAAAGklEQVQIW2
+ NgAMKBBgYmRgEIZmHCgWABRjAGAQAVZgDDoQfDtsKjw7wAAAAASUVORMKuQmDCgg==
+END:VCARD
+';
+
+$driver = new Turba_Driver(array());
+$iCal = new Horde_iCalendar();
+
+$iCal->parsevCalendar($vcard1);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard2);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard3);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard4);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$driver->map['name'] = array(
+    'fields' => array('namePrefix', 'firstname', 'middlenames',
+                      'lastname', 'nameSuffix'),
+    'attribute' => 'object_name',
+    'format' => '%s %s %s %s %s');
+$iCal->parsevCalendar($vcard4);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard5);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard6);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard7);
+$hash = $driver->toHash($iCal->getComponent(0));
+var_export($hash['photo'] == file_get_contents(dirname(__FILE__) . '/az.png'));
+echo "\n";
+
+$iCal->parsevCalendar($vcard8);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard9);
+var_export($driver->toHash($iCal->getComponent(0)));
+echo "\n";
+
+$iCal->parsevCalendar($vcard10);
+$hash = $driver->toHash($iCal->getComponent(0));
+var_export(strlen($hash['photo']));
+echo "\n";
+unset($hash['photo']);
+var_export($hash);
+
+?>
+--EXPECT--
+array (
+  'name' => 'Jan Schneiderö',
+  'email' => 'jan@horde.org',
+  'emails' => 'jan@horde.org',
+  'nickname' => 'yunosh',
+  'alias' => 'yunosh',
+  'homePhone' => '+49 521 555123',
+  'workPhone' => '+49 521 555456',
+  'cellPhone' => '+49 177 555123',
+  'fax' => '+49 521 555789',
+  'pager' => '+49 123 555789',
+  'birthday' => '1971-10-01',
+  'title' => 'Senior Developer (äöü)',
+  'role' => 'Developer (äöü)',
+  'notes' => 'A German guy (äöü)',
+  'website' => 'http://janschneider.de',
+  'lastname' => 'Schneiderö',
+  'firstname' => 'Jan',
+  'middlenames' => 'K.',
+  'namePrefix' => 'Mr.',
+  'company' => 'Horde Project',
+  'department' => 'äöü',
+  'homeAddress' => 'Schönestr. 15
+Bielefeld 33604',
+  'homeStreet' => 'Schönestr. 15',
+  'homeCity' => 'Bielefeld',
+  'homePostalCode' => '33604',
+  'workAddress' => 'Hübschestr. 19
+Köln, Allgäu
+Dänemark',
+  'workStreet' => 'Hübschestr. 19',
+  'workCity' => 'Köln',
+  'workProvince' => 'Allgäu',
+  'workCountry' => 'DK',
+  'timezone' => 'Europe/Berlin',
+  'latitude' => 52.516276,
+  'longitude' => 13.377778,
+)
+array (
+  'name' => 'Jan Schneiderö',
+  'email' => 'jan@horde.org',
+  'emails' => 'jan@horde.org',
+  'nickname' => 'yunosh',
+  'alias' => 'yunosh',
+  'homePhone' => '+49 521 555123',
+  'workPhone' => '+49 521 555456',
+  'cellPhone' => '+49 177 555123',
+  'fax' => '+49 521 555789',
+  'pager' => '+49 123 555789',
+  'birthday' => '1971-10-01',
+  'title' => 'Senior Developer (äöü)',
+  'role' => 'Developer (äöü)',
+  'notes' => 'A German guy (äöü)',
+  'website' => 'http://janschneider.de',
+  'lastname' => 'Schneiderö',
+  'firstname' => 'Jan',
+  'middlenames' => 'K.',
+  'namePrefix' => 'Mr.',
+  'company' => 'Horde Project',
+  'department' => 'äöü',
+  'homeAddress' => 'Schönestr. 15
+Bielefeld 33604',
+  'homeStreet' => 'Schönestr. 15',
+  'homeCity' => 'Bielefeld',
+  'homePostalCode' => '33604',
+  'workAddress' => 'Hübschestr. 19
+Köln, Allgäu
+Dänemark',
+  'workStreet' => 'Hübschestr. 19',
+  'workCity' => 'Köln',
+  'workProvince' => 'Allgäu',
+  'workCountry' => 'DK',
+  'timezone' => 'Europe/Berlin',
+  'latitude' => 52.516276,
+  'longitude' => 13.377778,
+)
+array (
+  'name' => 'Jan Schneider',
+  'lastname' => 'Schneider',
+  'firstname' => 'Jan',
+  'middlenames' => 'K.',
+  'namePrefix' => 'Mr.',
+)
+array (
+  'lastname' => 'Schneider',
+  'firstname' => 'Jan',
+  'middlenames' => 'K.',
+  'namePrefix' => 'Mr.',
+  'name' => 'Jan Schneider',
+)
+array (
+  'lastname' => 'Schneider',
+  'firstname' => 'Jan',
+  'middlenames' => 'K.',
+  'namePrefix' => 'Mr.',
+  'name' => 'Mr. Jan K. Schneider',
+)
+array (
+  'lastname' => 'B',
+  'firstname' => 'A',
+  'cellPhone' => '1',
+  'phone' => '4',
+  'homeCellPhone' => '2',
+  'workCellPhone' => '3',
+  'homePhone' => '5',
+  'workPhone' => '6',
+  'name' => 'A  B',
+)
+array (
+  'lastname' => 'Lastname',
+  'firstname' => 'Firstname',
+  'name' => 'Lastname, Firstname',
+  'company' => 'Company Name',
+  'department' => '',
+  'homePhone' => '(xxx) xxx-xxxx',
+  'workPhone' => '(xxx) xxx-xxxx',
+  'cellPhone' => '(xxx) xxx-xxxx',
+  'email' => 'email@domain.com',
+  'emails' => 'email@domain.com',
+  'category' => 'Friends',
+  'businessCategory' => 'Friends',
+  'homeAddress' => 'Street address
+City, St 12345
+USA',
+  'homeStreet' => 'Street address',
+  'homeCity' => 'City',
+  'homeProvince' => 'St',
+  'homePostalCode' => '12345',
+  'homeCountry' => 'USA',
+  'workAddress' => 'Street address
+City, St 12345
+USA',
+  'workStreet' => 'Street address',
+  'workCity' => 'City',
+  'workProvince' => 'St',
+  'workPostalCode' => '12345',
+  'workCountry' => 'USA',
+)
+true
+array (
+  'name' => 'Jan Schneider',
+  'lastname' => 'Schneider',
+  'firstname' => 'Jan',
+  'workEmail' => 'work@example.com',
+  'emails' => 'work@example.com, home@example.com, mail@example.com, pref@example.com',
+  'homeEmail' => 'home@example.com',
+  'email' => 'pref@example.com',
+)
+array (
+  'lastname' => 'Blow',
+  'firstname' => 'Joe',
+  'name' => 'Blow, Joe',
+  'company' => '',
+  'department' => '',
+  'birthday' => '1970-03-27',
+  'homePhone' => '302 834 9999',
+  'cellPhone' => '302 521 9999',
+  'email' => 'Blow@somwhere.net',
+  'emails' => 'Blow@somwhere.net',
+  'category' => 'Personal',
+  'businessCategory' => 'Personal',
+  'homeAddress' => '',
+)
+136
+array (
+  'lastname' => 'McTester',
+  'firstname' => 'Testie',
+  'name' => 'Testie McTester',
+  'company' => 'Testers Inc',
+  'department' => '',
+  'cellPhone' => '+44 775550555',
+  'homePhone' => '+44 205550555',
+  'workPhone' => '+44 205550556',
+  'homeEmail' => 'test@example.org',
+  'emails' => 'test@example.org, test@example.com',
+  'workEmail' => 'test@example.com',
+  'homeAddress' => '111 One Street
+London W1 1AA',
+  'homeStreet' => '111 One Street',
+  'homeCity' => 'London',
+  'homePostalCode' => 'W1 1AA',
+  'commonAddress' => '111 One Street
+London W1 1AA',
+  'commonStreet' => '111 One Street',
+  'commonCity' => 'London',
+  'commonPostalCode' => 'W1 1AA',
+  'birthday' => '2008-10-08',
+  'phototype' => 'JPEG',
+)
diff --git a/turba/lib/tests/tovcard.phpt b/turba/lib/tests/tovcard.phpt
new file mode 100644 (file)
index 0000000..0eb9c2a
--- /dev/null
@@ -0,0 +1,104 @@
+--TEST--
+Turba_Driver::toVcard() test.
+--FILE--
+<?php
+
+require dirname(__FILE__) . '/../Object.php';
+require dirname(__FILE__) . '/../Driver.php';
+
+$attributes = array(
+  'name' => 'Jan Schneiderö',
+  'namePrefix' => 'Mr.',
+  'firstname' => 'Jan',
+  'middlenames' => 'K.',
+  'lastname' => 'Schneiderö',
+  'email' => 'jan@horde.org',
+  'alias' => 'yunosh',
+  'homeAddress' => 'Schönestr. 15
+33604 Bielefeld',
+  'workStreet' => 'Hübschestr. 19',
+  'workCity' => 'Köln',
+  'workProvince' => 'Allgäu',
+  'workPostalcode' => '33602',
+  'workCountry' => 'Dänemark',
+  'homePhone' => '+49 521 555123',
+  'workPhone' => '+49 521 555456',
+  'cellPhone' => '+49 177 555123',
+  'fax' => '+49 521 555789',
+  'pager' => '+49 123 555789',
+  'birthday' => '1971-10-01',
+  'title' => 'Senior Developer (äöü)',
+  'role' => 'Developer (äöü)',
+  'company' => 'Horde Project',
+  'department' => 'äöü',
+  'notes' => 'A German guy (äöü)',
+  'website' => 'http://janschneider.de',
+  'timezone' => 'Europe/Berlin',
+  'latitude' => '52.516276',
+  'longitude' => '13.377778',
+  'photo' => file_get_contents(dirname(__FILE__) . '/az.png'),
+  'phototype' => 'image/png',
+);
+
+$driver = new Turba_Driver(array());
+$object = new Turba_Object($driver, $attributes);
+$vcard = $driver->tovCard($object, '2.1');
+echo $vcard->exportvCalendar() . "\n";
+$vcard = $driver->tovCard($object, '3.0');
+echo $vcard->exportvCalendar();
+
+?>
+--EXPECT--
+BEGIN:VCARD
+VERSION:2.1
+FN;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Jan Schneider=F6
+EMAIL:jan@horde.org
+NICKNAME:yunosh
+LABEL;HOME;ENCODING=QUOTED-PRINTABLE;CHARSET=ISO-8859-1:Sch=F6nestr. 15=0D=0A=
+33604 Bielefeld
+TEL;HOME:+49 521 555123
+TEL;WORK:+49 521 555456
+TEL;CELL:+49 177 555123
+TEL;FAX:+49 521 555789
+TEL;PAGER:+49 123 555789
+BDAY:1971-10-01
+TITLE;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Senior Developer (=E4=F6=FC)
+ROLE;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Developer (=E4=F6=FC)
+NOTE;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:A German guy (=E4=F6=FC)
+URL:http://janschneider.de
+TZ;VALUE=text:Europe/Berlin
+GEO:13.377778,52.516276
+PHOTO;ENCODING=b;TYPE=image/png:iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJAgMAAACd/+6DAAAACVBMVEW6ABZmZmYAAACMtcxCAAAAAXRSTlMAQObYZgAAABpJREFUCFtjYACBBgYmRgEIZmGBYAFGMAYBABVmAOEH9qP8AAAAAElFTkSuQmCC
+N;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Schneider=F6;Jan;K.;Mr.;
+ORG;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:Horde Project;=E4=F6=FC
+ADR;HOME;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:;;Sch=F6nestr. 15=0D=0A=
+33604 Bielefeld;;;;
+ADR;WORK;CHARSET=ISO-8859-1;ENCODING=QUOTED-PRINTABLE:;;H=FCbschestr. 19;K=F6ln;Allg=E4u;;D=E4nemark
+END:VCARD
+
+BEGIN:VCARD
+VERSION:3.0
+FN:Jan Schneiderö
+EMAIL:jan@horde.org
+NICKNAME:yunosh
+LABEL;TYPE=HOME:Schönestr. 15\n33604 Bielefeld
+TEL;TYPE=HOME:+49 521 555123
+TEL;TYPE=WORK:+49 521 555456
+TEL;TYPE=CELL:+49 177 555123
+TEL;TYPE=FAX:+49 521 555789
+TEL;TYPE=PAGER:+49 123 555789
+BDAY:1971-10-01
+TITLE:Senior Developer (äöü)
+ROLE:Developer (äöü)
+NOTE:A German guy (äöü)
+URL:http://janschneider.de
+TZ;VALUE=text:Europe/Berlin
+GEO:52.516276;13.377778
+PHOTO;ENCODING=b;TYPE=image/png:wolQTkcNChoKAAAADUlIRFIAAAAJAAAACQIDAAAAwp3
+ Dv8OuwoMAAAAJUExURcK6ABZmZmYAAADCjMK1w4xCAAAAAXRSTlMAQMOmw5hmAAAAGklEQVQIW2
+ NgAMKBBgYmRgEIZmHCgWABRjAGAQAVZgDDoQfDtsKjw7wAAAAASUVORMKuQmDCgg==
+N:Schneiderö;Jan;K.;Mr.;
+ORG:Horde Project;äöü
+ADR;TYPE=HOME:;;Schönestr. 15\n33604 Bielefeld;;;;
+ADR;TYPE=WORK:;;Hübschestr. 19;Köln;Allgäu;;Dänemark
+END:VCARD
diff --git a/turba/lib/version.php b/turba/lib/version.php
new file mode 100644 (file)
index 0000000..db55362
--- /dev/null
@@ -0,0 +1 @@
+<?php define('TURBA_VERSION', 'H3 (3.0-git)') ?>
diff --git a/turba/locale/.htaccess b/turba/locale/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/turba/locale/ar_SY/LC_MESSAGES/turba.mo b/turba/locale/ar_SY/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..b695236
Binary files /dev/null and b/turba/locale/ar_SY/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/bg_BG/LC_MESSAGES/turba.mo b/turba/locale/bg_BG/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..22a86ae
Binary files /dev/null and b/turba/locale/bg_BG/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/ca_ES/LC_MESSAGES/turba.mo b/turba/locale/ca_ES/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..127da55
Binary files /dev/null and b/turba/locale/ca_ES/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/ca_ES/help.xml b/turba/locale/ca_ES/help.xml
new file mode 100755 (executable)
index 0000000..1b81223
--- /dev/null
@@ -0,0 +1,159 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<help>
+
+       <entry id="Overview" md5="290506ade4e6f749246f77bbe5d48835" state="uptodate">
+<title>Introducció</title>
+<heading>Introducció</heading>
+
+       <para>
+
+    La Llibreta d'adreces ofereix una metodologia i lloc adeqüats per enmagatzemar la informació de contactes per la seva còmoda recuperació i ús. En funció de com s'ha configurat el sistema l'administrador, podeu disposar de llibretes privades així com accedir a serveis de directori de xarxa públics. També accepta llistes de distribució de forma que pogueu crear les vostres pròìes "llistes de correu".
+    
+</para>
+</entry>
+-
+       <entry id="menu-add" md5="3c1f92eb1a82839404d11d9b0a20b3ce" state="uptodate">
+<title>Menú: Afegir</title>
+<heading>Afegir</heading>
+-
+       <para>
+
+    Afegeix un usuari a la llibreta de direccions. Només es poden afegir usuaris a les llibretes d'adreces si disposa de privilegis d'escriptura. Si estan activades libretes d'adreces compartides o públiques, sovint són de només lectura i no s'hi podran afegir contactes.
+    
+</para>
+</entry>
+-
+       <entry id="menu-search" md5="8daf81ab28602d772358a174571f9ad2" state="uptodate">
+<title>Menú: Cercar</title>
+<heading>Cercar</heading>
+-
+       <para>
+
+   Permet cercar en una llibreta d'adreces per a localitzar informació. Es tracta d'una cerca senzilla que només permetrà cercar per alguns camps bàsics. Normalment el nom i l'adreça de correu , però pot variar en funció de com s'hagi configurat l'administrador la llibreta.
+    
+</para>
+-
+       <para>
+
+    Per una cerca més complexa, pot utilitzar la "
+<ref module="turba" entry="menu-advanced-search">Cerca avançada</ref>
+" que li permet cercar en altres camps.
+    
+</para>
+</entry>
+-
+       <entry id="menu-advanced-search" md5="6be703ffeba614f6ada151749fa44ab5" state="uptodate">
+<title>Menú: Cerca avançada</title>
+<heading>Cerca avançada</heading>
+-
+       <para>
+
+    Permet cercar en una llibreta d'adreces localitzar informació. Aquest mètode de cerca li permet cercar en diversos camps. Els camps disponibles per a la cerca depenen de la llibreta d'adreces que s'està cercant.
+    
+</para>
+</entry>
+-
+       <entry id="menu-import" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4" state="uptodate">
+<title>Menú: Importar/Exportar</title>
+<heading>Importar/Exportar</heading>
+-
+       <para>
+
+    Aquest menú permet la importació o exportació des de la seva llibreta d'adreces personal. Els formats suportants són CSV (Valors separats per comes) d'Outlook com el vCard així com alguns altres formats habituals
+    
+</para>
+<heading>Importar</heading>
+-
+       <para>
+
+    Per a importar una llibreta d'adreces, necessita disposar d'una màquina local (on executar el navegador web) amb les dades de la llibreta d'adreces que desitgi importar. Per a realitzar-ho primer haurà d'exportar la informació de la seva llibreta d'adreces del seu client de correu.
+    
+</para>
+<para>
+    Si utilitza Outlook Express:
+    </para>
+-
+       <para>
+
+    1) Seleccioneu el menú Arxiu &gt; Exportar &gt; Llibreta d'adreces
+    
+</para>
+-
+       <para>
+
+    2) Seleccioneu "Arxiu de text" (Valors separats per comes) amb la "Eina d'exportació d'adreces". Cliqueu "Exportar".
+    
+</para>
+-
+       <para>
+
+    3) En el camp "Guardar arxiu exportat com" escriviu un nom per la llibreta d'adreces. Seleccioneu "Següent".
+    
+</para>
+-
+       <para>
+
+    4) Activeu la casella de l'esquerra de cada un dels camps que desitgi exportar. Seleccioneu "Finalitzar".
+    
+</para>
+-
+       <para>
+
+    5) Hauria d'apareixer el següent missatge informatiu 'Procés d'exportació de la llibreta d'adreces finalitzat'. Seleccioneu 'Acceptar'.
+    
+</para>
+-
+       <para>
+
+    6) Seleccioneu 'Tancar' en la 'Eina d'exportació d'adreces' i tanqui Outlook Express.
+    
+</para>
+-
+       <tip>
+
+    Si l'arxiu d'adreces exportat no està en el seu escriptori i esteu utilitzant un sistema operatiu Windows, seleccioneu el menú Inicia &gt; Cercar &gt; Arxius o Carpetes i cerqueu en la seva unitat de disc dur principal el nom de l'arxiu que hagiu utilitzar en el pas 3. Anoteu la localització de l'arxiu.
+    
+</tip>
+-
+       <para>
+
+    Per a importar una llibreta d'adreces, obriu la llibreta d'adreces a la que desitgeu importar la informació. Seleccioneu la icona "Importar/Exportar". Seleccioneu en el llistat desplegable el tipus d'arxiu de dades d'informació d'adreces que desitgi importar. Seleccioneu el botó "Examinar" per a localitzar l'arxiu de dades d'adreces en el seu ordinador. Seleccioneu l'arxiu i polseu el botó "Següent". Seguiu les instruccions i la informació de l'arxiu s'importarà a la seva llibreta d'adreces.
+    
+</para>
+-
+       <tip>
+
+    Algunes entrades complexes o que els seus camps no coincideixin amb els de la seva llibreta d'adreces puguin no importar-se correctament. Es conveniente que compruebe los datos importados tras una operación de importación.
+    
+</tip>
+</entry>
+-
+       <entry id="searching-search_results" md5="ffed8d72fa3b710df8e902c2493b254f" state="uptodate">
+<title>Cerca: Resultats de la cerca</title>
+<heading>Resultats de la cerca</heading>
+-
+       <para>
+
+    Si una cerca obté resultats, es mostraran a l'espai de "Resultatos de la cerca".
+    
+</para>
+-
+       <para>
+
+    Seleccionant en un camp de "Correu" s'obrirà una finestra de redacció de missatges per enviar correu a aquesta adreça. Seleccionant en un camp de "Nom" es mostrarà el registre d'aquest nom de la llibreta d'adreces, permetent-li modificar o eliminar la entrada.
+    
+</para>
+-
+       <para>
+
+    En funció de com hagi configurat el sistema el seu administrador, els resultats de les cerques podran ser acumulatius. Cada cerca afegirà els resultats nous als existents. Això és útil a l'elaborar llistes. Per eliminar els resultats de les cerques acumulades i començar una nova, seleccioni el vincle "Netejar cerca".
+    
+</para>
+-
+       <tip>
+
+    Al veure un llistat d'entrades, poit ordenar-les per cada un dels camps mostrats seleccionant en la capçalera de la columna adequada. Per a commutar el sentit de la classificació entre ascendent i descendent, seleccioneu la icona de la fletxa de la capçalera de la columna.
+    
+</tip>
+</entry>
+</help>
diff --git a/turba/locale/cs_CZ/LC_MESSAGES/turba.mo b/turba/locale/cs_CZ/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..42360df
Binary files /dev/null and b/turba/locale/cs_CZ/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/da_DK/LC_MESSAGES/turba.mo b/turba/locale/da_DK/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..cb73326
Binary files /dev/null and b/turba/locale/da_DK/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/de_DE/LC_MESSAGES/turba.mo b/turba/locale/de_DE/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..ff9a836
Binary files /dev/null and b/turba/locale/de_DE/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/de_DE/help.xml b/turba/locale/de_DE/help.xml
new file mode 100644 (file)
index 0000000..a0dbc2f
--- /dev/null
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<help>
+  <entry id="Overview" md5="290506ade4e6f749246f77bbe5d48835" state="uptodate">
+    <title>Überblick</title>
+    <heading>Einführung</heading>
+    <para>
+      Mit Hilfe des Adressbuchs können Sie einfach und unkompliziert
+      Kontaktdaten speichern, auslesen und benutzen. Je nachdem, wie Ihr
+      System eingerichtet is kann es sowohl ein privates als auch öffentliche,
+      im Netzwerk verfügbare Addressbücher zur Verfügung stellen. Auch
+      Verteilerlisten werden unterstützt, so dass Sie Ihre eigenen
+      "Mailinglisten" erstellen können.
+    </para>
+  </entry>
+  <entry id="menu-add" md5="3c1f92eb1a82839404d11d9b0a20b3ce" state="uptodate">
+    <title>Menü: Hinzufügen</title>
+    <heading>Hinzufügen</heading>
+    <para>
+      Fügen Sie hier Personen zu Ihrem Adressbuch hinzu. Sie können Personen
+      nur zu den Addressbüchern hinzufügen, für die Sie Schreibrechte
+      haben. Wenn gemeinsame oder öffentliche Adressbücher eingerichtet
+      wurden, sind diese oft schreibgeschützt, so dass Sie keine Personen
+      hinzufügen können.
+    </para>
+  </entry>
+  <entry id="menu-search" md5="8daf81ab28602d772358a174571f9ad2" state="uptodate">
+    <title>Menü: Suche</title>
+    <heading>Suche</heading>
+    <para>
+      Durchsuchen Sie hier ein Adressbuch, um Informationen zu finden. Dies
+      ist für schnelle Suchen gedacht, und Sie können nur einige einfache
+      Felder durchsuchen. Im Allgemeinen sind das der Name und die
+      Emailadressen, das kann aber je nachdem, wie Ihr System eingerichtet
+      wurde, variieren.
+    </para>
+    <para>
+      Unter "<ref module="turba" entry="menu-advanced-search">Erweiterte
+      Suche</ref>" können Sie auch andere Felder durchsuchen.
+    </para>
+  </entry>
+  <entry id="menu-advanced-search" md5="6be703ffeba614f6ada151749fa44ab5" state="uptodate">
+    <title>Menü: Erweiterte Suche</title>
+    <heading>Erweiterte Suche</heading>
+    <para>
+      Durchsuchen Sie hier ein Adressbuch, um Informationen zu finden. Mit
+      dieser Suche können Sie mehrere Felder gleichzeitig durchsuchen. Welche
+      Felder für die Suche zur Verfügung stehen, hängt von dem ausgewählten
+      Adressbuch ab.
+    </para>
+  </entry>
+  <entry id="menu-import" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4" state="uptodate">
+    <title>Menü: Import/Export</title>
+    <heading>Import/Export</heading>
+    <para>
+      Dieser Menüpunkt erlaubt den Import in und den Export von Ihrem
+      persönlichen Adressbuch. Es werden CSV (kommagetrennte Werte), Outlook,
+      vCard und andere verbreitete Formate unterstützt.
+    </para>
+    <heading>Import</heading>
+    <para>
+      Um Daten in Ihr Adressbuch zu importieren, müssen diese auf Ihrem
+      lokalen Rechner (auf dem Sie den Browser ausführen) vorliegen. Dazu
+      müssen Sie das Addressbuch Ihrer aktuellen Adressverwaltung oder Ihres
+      Email-Programms zunächst exportieren.
+    </para>
+    <para>
+      Wenn Sie Outlook Express verwenden:
+    </para>
+    <para>
+      1) Klicken Sie auf Datei &gt; Exportieren &gt; Adressbuch
+    </para>
+    <para>
+      2) Wählen sie "Textdatei (mit Kommas als Trennzeichen)" im
+      "Exportprogramm für das Addressbuch " aus. Klicken sie auf
+      "Exportieren"
+    </para>
+    <para>
+      3) In dem Feld "Exportierte Datei speichern unter:" können Sie
+      einen beliebigen Namen für das exportierte Addressbuch angeben. Klicken
+      Sie auf "Weiter".
+    </para>
+    <para>
+      4) Markieren Sie die Auswahlboxen vor allen Feldern, die Sie exportieren
+      möchten. Klicken Sie auf "Fertig stellen".
+    </para>
+    <para>
+      5) Es sollte eine Nachricht erscheinen mit der Meldung "Das
+      Adressbuch wurde vollständig exportiert." Klicken Sie auf
+      "OK".
+    </para>
+    <para>
+      6) Klicken Sie auf "Schließen" im "Exportprogramm für das
+      Addressbuch " und beenden Sie Outlook Express.
+    </para>
+    <tip>
+      Wenn sich die Datei mit dem exportierten Adressbuch nicht auf Ihrem
+      Desktop befindet und Sie ein Windows Betriebssystem verwenden, klicken
+      Sie auf Start &gt; Suchen &gt; Dateien/Ordner, suchen Sie auf Ihrer
+      Festplatte nach dem Dateinamen, den Sie beim Exportieren verwendet haben
+      und merken Sie sich den Ort der gefundenen Datei.
+    </tip>
+    <para>
+      Um in ein Adressbuch zu importieren, klicken Sie auf das
+      Import/Export-Symbol und wählen Sie das Addressbuch aus. Wählen Sie das
+      Format, in dem die zu importierenden Daten vorliegen, aus der
+      Auswahlliste aus. Klicken Sie auf den "Durchsuchen..."-Knopf,
+      suchen Sie nach der Datei, die importiert werden soll, wählen Sie diese
+      aus und klicken Sie auf "Importieren".
+    </para>
+    <tip>
+      Einige komplizierte Einträge oder Einträge mit Feldern, die nicht genau
+      den Feldern in Ihrem Adressbuch entsprechen, können unter Umständen
+      nicht richtig importiert worden sein. Daher sollten Sie die importierten
+      Daten nach dem Import überprüfen.
+    </tip>
+  </entry>
+  <entry id="searching-search_results" state="uptodate" md5="ffed8d72fa3b710df8e902c2493b254f">
+    <title>Suche: Suchergebnisse</title>
+    <heading>Suchergebnisse</heading>
+    <para>
+      Wenn eine Suche erfolgreich war, werden die Ergebnisse im Bereich
+      "Suchergebnisse" angezeigt.
+    </para>
+    <para>
+      Wenn Sie auf ein "Email"-Feld klicken, öffnet sich ein neues Fenster, in
+      dem Sie eine Nachricht an die angegeben Adresse schreiben können. Wenn
+      Sie auf das "Name"-Feld klicken, wird der zugehörige Adressbucheintrag
+      angezeigt und Sie können den Eintrag bearbeiten oder löschen.
+    </para>
+    <para>
+      Je nachdem, wie Ihr System eingerichtet wurde, werden die Suchergebnisse
+      addiert. Jede weitere Suche wird dann die Ergebnisse zu den schon
+      vorhandenen Ergebnissen hinzufügen. Das kann hilfreich sein, um Listen
+      zusammenzustellen. Um die Ergebnisse aller Suchen wieder zu löschen und
+      eine neue Suche zu beginnen, klicken Sie auf den "Suche zurücksetzen"
+      Link.
+    </para>
+    <tip>
+      Wenn Sie sich eine Liste von Einträgen anzeigen lassen, können Sie die
+      Einträge nach allen Feldern sortieren, indem Sie auf die jeweilige
+      Spaltenüberschrift klicken. Um die Sortierrichtung zu ändern, klicken
+      Sie auf das Pfeilsymbol in der Spaltenüberschrift.
+    </tip>
+  </entry>
+</help>
diff --git a/turba/locale/el_GR/LC_MESSAGES/turba.mo b/turba/locale/el_GR/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..2f3ae9b
Binary files /dev/null and b/turba/locale/el_GR/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/en_US/help.xml b/turba/locale/en_US/help.xml
new file mode 100644 (file)
index 0000000..edecb90
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version='1.0'?>
+<help>
+
+<entry id="Overview">
+    <title>Overview</title>
+    <heading>Introduction</heading>
+    <para>
+    The Address Book provides a convenient method and place to store contact information for easy retrieval and use. Depending on how your administrator has set up the system it can provide a private address book as well as access to public network directory services. It also supports distribution lists so you can create your own "mailing lists."
+    </para>
+</entry>
+
+<entry id="menu-add">
+    <title>Menu: Add</title>
+    <heading>Add</heading>
+    <para>
+    Add a user to an address book. You can only add users to the address books to which you have write access. If shared or public address books have been enabled they are often read-only and you will not be able to add contacts to them.
+    </para>
+</entry>
+
+<entry id="menu-search">
+    <title>Menu: Search</title>
+    <heading>Search</heading>
+    <para>
+    Search an address book to locate information. This is intended as a quick search and only allows you to search on a few basic fields. Usually this is the name and email address fields, but could vary depending on how your administrator set up the address book.
+    </para>
+    <para>
+    For a more complex search you can use the &quot;<ref module="turba" entry="menu-advanced-search">Advanced Search</ref>&quot; which permits searching on other fields.
+    </para>
+</entry>
+
+<entry id="menu-advanced-search">
+    <title>Menu: Advanced Search</title>
+    <heading>Advanced Search</heading>
+    <para>
+    Search an address book to locate information. This search allows you to search on multiple fields. Which fields are available for searching depends on the address book being searched.
+    </para>
+</entry>
+
+<entry id="menu-import">
+    <title>Menu: Import/Export</title>
+    <heading>Import/Export</heading>
+
+    <para>
+    This menu allows importing to and exporting from your personal address book. It supports both CSV (Comma Separated Variable), Outlook, and vCard formats, as well as some other popular formats.
+    </para>
+
+    <heading>Importing</heading>
+    <para>
+    To import an address book, you need to have the address book data to import on your local machine (on which the web browser is running). To do this, you will need to first export the address book information from your current email client.
+    </para>
+
+    <para>
+    If you use Outlook Express:
+    </para>
+    <para>
+    1) Click on File > Export > Address Book
+    </para>
+    <para>
+    2) Select &quot;Text File&quot; (Comma Separated Values) in the &quot;Address Book Export Tool&quot;. Click on &quot;Export&quot;.
+    </para>
+    <para>
+    3) In the &quot;Save exported files as&quot; field, type in a name for your address book. Click &quot;Next&quot;.
+    </para>
+    <para>
+    4) Put a checkmark in the box to the left of each of the fields that you wish to export. Click &quot;Finish&quot;.
+    </para>
+    <para>
+    5) You should receive a message that states 'Address book export process has completed'. Click 'OK'.
+    </para>
+    <para>
+    6) Click 'Close' on the 'Address Book Export Tool' and close Outlook Express.
+    </para>
+
+    <tip>
+    If the exported address book file is not located on your desktop, and you're using a Windows operating system, click on Start > Find or Search > Files or Folders and search your main hard drive for the file name that you used in step 3. Make a note of the file's location.
+    </tip>
+
+    <para>
+    To import an address book, open the address book you want to import the information into. Click on the &quot;Import/Export&quot; Icon. Select the type of address information data file you want to import from the selection list. Click on the &quot;browse&quot; button to look for the address data file on your computer. Select the file, and click on the &quot;Import&quot; button. The information in the file will be imported into your address book.
+    </para>
+    <tip>
+    Some complex entries, or entries with fields that do not match your address book fields, may not import correctly. You should verify the imported data after an import.
+    </tip>
+</entry>
+
+<entry id="searching-search_results">
+    <title>Searching: Search Results</title>
+    <heading>Search Results</heading>
+    <para>
+    If a search is successful, the results will show up in the &quot;Search Results&quot; area.
+    </para>
+    <para>
+    Clicking on an &quot;Email&quot; field entry will open a new Compose window to send mail to that address. Clicking on a &quot;Name&quot; field entry will display the address book record for that name, allowing you to then edit or delete the entry.
+    </para>
+    <para>
+    Depending on how your system has been set up by the administrator search results can be cumulative. Each search will add any new results to your existing results. This is helpful when building lists. To remove the results of cumulative searches and start a new search, click on the &quot;Clear Search&quot; link.
+    </para>
+
+    <tip>
+    When viewing a list of entries, you can sort the entries by each field shown by clicking on the appropriate column heading. To switch columns between ascending and descending sort order, click on the arrow icon in the column heading.
+    </tip>
+</entry>
+
+</help>
diff --git a/turba/locale/es_ES/LC_MESSAGES/turba.mo b/turba/locale/es_ES/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..30ee396
Binary files /dev/null and b/turba/locale/es_ES/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/es_ES/help.xml b/turba/locale/es_ES/help.xml
new file mode 100644 (file)
index 0000000..c9a49e3
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0"?>
+<help>
+
+<entry id="Overview" md5="290506ade4e6f749246f77bbe5d48835" state="uptodate">
+    <title>Introducci&#xF3;n</title>
+    <heading>Introducci&#xF3;n</heading>
+    <para>
+    La libreta de direcciones ofrece un m&#xE9;todo y lugar adecuados para almacenar la informaci&#xF3;n de contactos para su c&#xF3;moda recuperaci&#xF3;n y uso. En funci&#xF3;n de c&#xF3;mo haya configurado el sistema el administrador, puede disponer de libretas de direcciones privadas as&#xED; como acceder a servicios de directorio de red p&#xFA;blicos. Tambi&#xE9;n admite listas de distribuci&#xF3;n de forma que pueda crear sus propias "listas de correo".
+    </para>
+</entry>
+
+<entry id="menu-add" md5="3c1f92eb1a82839404d11d9b0a20b3ce" state="uptodate">
+    <title>Men&#xFA;: A&#xF1;adir</title>
+    <heading>A&#xF1;adir</heading>
+    <para>
+    A&#xF1;ade un usuario a la libreta de direcciones. S&#xF3;lo se puede a&#xF1;adir usuarios a las libretas de direcciones si dispone de privilegios de escritura. Si est&#xE1;n activadas libretas de direcciones compartidas o p&#xFA;blicas, a menudos son de s&#xF3;lo lectura y no podr&#xE1; a&#xF1;adir contactos en ellas.
+    </para>
+</entry>
+
+<entry id="menu-search" md5="8daf81ab28602d772358a174571f9ad2" state="uptodate">
+    <title>Men&#xFA;: Buscar</title>
+    <heading>Buscar</heading>
+    <para>
+    Le permite buscar en una libreta de direcciones para localizar informaci&#xF3;n. Se trata de una b&#xFA;squeda sencilla que s&#xF3;lo le permitir&#xE1; buscar por algunos campos b&#xE1;sicos. Normalmente el nombre y la direcci&#xF3;n de correo, pero puede variar dependiendo de c&#xF3;mo haya configurado el administrador la libreta.
+    </para>
+    <para>
+    Para una b&#xFA;squeda m&#xE1;s compleja, puede utilizar la "<ref module="turba" entry="menu-advanced-search">B&#xFA;squeda avanzada</ref>" que le permitir&#xE1; buscar en otros campos.
+    </para>
+</entry>
+
+<entry id="menu-advanced-search" md5="6be703ffeba614f6ada151749fa44ab5" state="uptodate">
+    <title>Men&#xFA;: B&#xFA;squeda avanzada</title>
+    <heading>B&#xFA;squeda avanzada</heading>
+    <para>
+    Le permite buscar en una libreta de direcciones para localizar informaci&#xF3;n. Este m&#xE9;todo de b&#xFA;squeda le permite buscar en varios campos. Los campos disponibles para la b&#xFA;squeda dependen de la libreta de direcciones en la que est&#xE9; buscando.
+    </para>
+</entry>
+
+<entry id="menu-import" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4" state="uptodate">
+    <title>Men&#xFA;: Importar/Exportar</title>
+    <heading>Importar/Exportar</heading>
+
+    <para>
+    Este men&#xFA; permite la importaci&#xF3;n o exportaci&#xF3;n a o desde su libreta de direcciones personal. Soporta tanto el formato CSV (Valores separados por comas) de Outlook como el vCard as&#xED; como algunos otros formatos habituales.
+    </para>
+
+    <heading>Importar</heading>
+    <para>
+    Para importar una libreta de direcciones, necesita tener en la m&#xE1;quina local (en la que se ejecuta el navegador web) los datos de la libreta de direcciones que quiera importar. Para ello primero tendr&#xE1; que exportar la informaci&#xF3;n de la libreta de direcciones de su cliente de correo actual.
+    </para>
+
+    <para>
+    Si utiliza Outlook Express:
+    </para>
+    <para>
+    1) Seleccione el men&#xFA; Archivo &gt; Exportar &gt; Libreta de direcciones
+    </para>
+    <para>
+    2) Seleccione "Archivo de texto" (Valores separados por comas) en la "Herramienta de exportaci&#xF3;n de direcciones". Pulse "Exportar".
+    </para>
+    <para>
+    3) En el campo "Guardar archivo exportado como" escriba un nombre para la libreta de direcciones. Pulse "Siguiente".
+    </para>
+    <para>
+    4) Active la casilla de la izquierda de cada uno de los campos que desee exportar. Pulse "Terminar".
+    </para>
+    <para>
+    5) Deber&#xED;a el siguiente mensaje informativo 'Proceso de exportaci&#xF3;n de la libreta de direcciones terminado'. Pulse 'Aceptar'.
+    </para>
+    <para>
+    6) Pulse 'Cerrar' en la 'Herramienta de exportaci&#xF3;n de direcciones' y cierre Outlook Express.
+    </para>
+
+    <tip>
+    Si el archivo de direcciones exportado no est&#xE1; en su escritorio y est&#xE1; utilizando un sistema operativo Windows, pulse el men&#xFA; Inicio &gt; Buscar &gt; Archivos o Carpetas y busque en su unidad de disco duro principal el nombre de archivo que utiliz&#xF3; en el paso 3. Anote la localizaci&#xF3;n del archivo.
+    </tip>
+
+    <para>
+    Para importar una libreta de direcciones, abra la libreta de direcciones a la que desee importar la informaci&#xF3;n. Pulse el icono "Importar/Exportar". Seleccione en el listado desplegable el tipo de archivo de datos de informaci&#xF3;n de direcciones que desee importar. Pulse el bot&#xF3;n "Examinar" para localizar el archivo de datos de direcciones en su ordenador. Seleccione el archivo y pulse el bot&#xF3;n "Siguiente". Siga las instrucciones y la informaci&#xF3;n del archivo se importar&#xE1; a su libreta de direcciones.
+    </para>
+    <tip>
+    Algunas entradas complejas o cuyos campos no coincidan con los de su libreta de direcciones pueden no importarse correctamente. Es conveniente que compruebe los datos importados tras una operaci&#xF3;n de importaci&#xF3;n.
+    </tip>
+</entry>
+
+<entry id="searching-search_results" md5="ffed8d72fa3b710df8e902c2493b254f" state="uptodate">
+    <title>B&#xFA;squeda: Resultados de la b&#xFA;squeda</title>
+    <heading>Resultados de la b&#xFA;squeda</heading>
+    <para>
+    Si una b&#xFA;squeda obtiene resultados, se mostrar&#xE1;n en el &#xE1;rea de "Resultados de la b&#xFA;squeda".
+    </para>
+    <para>
+    Pulsando en un campo de "Correo" se abrir&#xE1; una ventana de redacci&#xF3;n de mensajes para enviar correo a esa direcci&#xF3;n. Pulsando en un campo de "Nombre" se mostrar&#xE1; el registro de ese nombre de la libreta de direcciones, permiti&#xE9;ndole modificar o eliminar la entrada.
+    </para>
+    <para>
+    En funci&#xF3;n de c&#xF3;mo haya configurado el sistema su administrador, los resultados de las b&#xFA;squedas podr&#xE1;n ser acumulativos. Cada b&#xFA;squeda a&#xF1;adir&#xE1; los resultados nuevos a los existentes. &#xC9;sto es &#xFA;til al elaborar listas. Para eliminar los resultados de b&#xFA;squedas acumuladas y empezar una nueva, pulse el v&#xED;nculo "Limpiar b&#xFA;squeda".
+    </para>
+
+    <tip>
+    Al ver un listado de entradas, puede ordenarlas por cada uno de los campos mostrados pulsando en la cabecera de columna adecuada. Para conmutar el sentido de la clasificaci&#xF3;n entre ascendente y descendente, pulse el icono de flecha de la cabecera de la columna.
+    </tip>
+</entry>
+
+</help>
diff --git a/turba/locale/et_EE/LC_MESSAGES/turba.mo b/turba/locale/et_EE/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..47f8d66
Binary files /dev/null and b/turba/locale/et_EE/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/eu_ES/LC_MESSAGES/turba.mo b/turba/locale/eu_ES/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..d1cc726
Binary files /dev/null and b/turba/locale/eu_ES/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/eu_ES/help.xml b/turba/locale/eu_ES/help.xml
new file mode 100644 (file)
index 0000000..9085412
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0"?>
+<help>
+
+<entry id="Overview" md5="290506ade4e6f749246f77bbe5d48835" state="uptodate">
+    <title>Informazio orokorra</title>
+    <heading>Sarrera</heading> <para>Helbide-liburuak kontaktuen informazioa gordetzeko metodo eta leku egokia eskaintzen ditu, informazio hori erraz eskuratzeko eta erabiltzeko. Administratzaileak sistema konfiguratzeko erabilitako moduaren arabera, helbide-liburu pribatu bat nahiz sareko direktorio-zerbitzu publikoetarako sarbidea izan dezakezu. Banaketa-zerrendak ere onartzen dituenez, zure "posta-zerrendak" sor ditzakezu.</para></entry>
+
+<entry id="menu-add" md5="3c1f92eb1a82839404d11d9b0a20b3ce" state="uptodate">
+    <title>Menua: Kontaktu berria</title>
+    <heading>Kontaktu berria</heading> <para>Helbide-liburuan beste erabiltzaile bat sartzea da. Helbide-liburuan, idazteko baimena eman dizuten erabiltzaileak sar ditzakezu soilik. Partekatutako helbide-liburuak edo helbide-liburu publikoak gaitu badira, askotan irakurtzeko soilik izaten dira; kasu horretan, ezingo duzu kontakturik sartu.</para></entry>
+
+<entry id="menu-search" md5="8daf81ab28602d772358a174571f9ad2" state="uptodate">
+    <title>Menua: Bilatu</title>
+    <heading>Bilatu</heading> <para>Helbide-liburu batean bilaketak egin ditzakezu informazioa eskuratzeko. Hori bilaketa erraza da, eta oinarrizko eremu batzuetan informazioa bilatzeko balio du. Askotan izena eta helbide elektronikoa eremuak erabili ohi dira, baina alda daitezke administratzaileak helbide-liburua konfiguratzeko erabilitako moduaren arabera.</para> <para>Bilaketa konplexuagoa egiteko "<ref module="turba" entry="menu-advanced-search">Bilaketa aurreratua</ref>" erabil dezakezu, eta horrela beste eremu batzuetan ere bilaketak egin ahal izango dituzu.</para></entry>
+
+<entry id="menu-advanced-search" md5="6be703ffeba614f6ada151749fa44ab5" state="uptodate">
+    <title>Menua: Bilaketa aurreratua</title>
+    <heading>Bilaketa aurreratua</heading> <para>Helbide-liburu batean bilaketak egin ditzakezu informazioa eskuratzeko. Bilaketa aurreratuaren bidez, hainbat eremutan egin ditzakezu bilaketak. Bilaketak egiteko zein eremu egongo diren erabilgarri, bilaketak egingo diren helbide-liburuaren arabera dago.</para></entry>
+
+<entry id="menu-import" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4" state="uptodate">
+    <title>Menua: Inportatu/Esportatu</title>
+    <heading>Inportatu/Esportatu</heading>
+
+    <para>Menu honen bidez, helbide-liburura inportatu eta helbide-liburutik esporta dezakezu. Formatu hauek onartzen ditu: CSV (komaz bereizitako balioak), Outlook eta vCard formatuak, baita beste formatu ezagun batzuk ere.</para>
+
+    <heading>Inportatu helbide-liburua</heading> <para>Helbide-liburu bat inportatzeko, helbide-liburuko datuak makina lokalean eduki behar dituzu (web-arakatzailea bertan exekutatzen baita). Hori egiteko, aurrena helbide-liburuko informazioa esportatu behar duzu uneko posta elektronikotik.</para>
+
+    <para>Outlook Express erabiltzen baduzu:</para> <para>1) Hautatu Fitxategia &gt; Esportatu &gt; Helbide-liburua</para> <para>2) Hautatu "Helbide-liburua esportatzeko tresnak" aukerako "Testu-fitxategia" (Komaz bereizitako balioak). Egin klik "Esportatu" aukeran.</para> <para>3) "Gorde honela esportatutako fitxategia" eremuan, idatzi zure helbide-liburuaren izena. Egin klik "Hurrengoa" aukeran.</para> <para>4) Jarri hautamarka bat esportatu nahi duzun eremu bakoitzaren ezkerrean dagoen koadroan. Egin klik "Amaitu" aukeran.</para> <para>5) 'Helbide-liburuaren esportazio-prozesua amaitu da' adierazten duen mezu bat jasoko duzu. Sakatu 'Ados'.</para> <para>6) Sakatu ''Helbide-liburua esportatzeko tresnak" aukerako "Itxi" botoia eta itxi Outlook Express.</para>
+
+    <tip>Esportatutako helbide-liburuko fitxategia ez badago zure mahaigainean eta Windows sistema eragilea erabiltzen ari bazara, sakatu Hasi &gt; Bilatu&gt; Karpetak eta bilatu 3. urratsean idatzi duzun fitxategi-izena disko gogorrean. Idatzi ohar batean fitxategiaren kokapena.</tip>
+
+    <para>Helbide-liburu bat inportatzeko, ireki inportatu nahi duzun helbide-liburua, informazioa bertan jartzeko. Egin klik "Inportatu/Esportatu" ikonoan. Hautatu hautapen-zerrendatik inportatu nahi duzun datu-fitxategiko helbidearen informazioa. Egin klik "arakatzailea" botoian, helbidearen datu-fitxategia bilatzeko zure ordenagailuan. Hautatu fitxategia eta egin klik "Inportatu" botoian. Fitxategiko informazioa helbide-liburura inportatuko da.</para> <tip>Sarrera konplexu batzuk edo zure helbide-liburuko eremuekin bat ez datozen eremuak dauzkaten sarrera batzuk, agian, ez dira behar bezala inportatuko. Inportazio bat egin ondoren, inportatutako datuak egiaztatu beharko zenituzke.</tip></entry>
+
+<entry id="searching-search_results" md5="ffed8d72fa3b710df8e902c2493b254f" state="uptodate">
+    <title>Bilaketa: Bilaketaren emaitzak</title>
+    <heading>Bilaketaren emaitzak</heading> <para>Bilaketak emaitzaren bat ematen badu, "Bilaketaren emaitzak" arean azalduko dira.</para> <para>"Posta elektronikoa" sarreraren eremuan klik eginez, mezu berria idazteko leiho bat irekiko da, helbide horretara mezu bat bidaltzeko. "Izena" sarreraren eremuan klik eginez, izen horren helbide-liburua bistaratuko da. Horrela, sarrera hori editatu edo ezabatu ahal izango duzu.</para> <para>Zure administratzailearen sistema ezartzeko moduaren arabera, emaitzak metagarriak izan daitezke. Bilaketa bakoitzak ematen duen edozein emaitza lehendik dauden emaitzekin batera agertuko da. Hori lagungarria da zerrendak eraikitzean. Metatutako bilaketen emaitzak kentzeko eta beste bilaketa bat egiteko, egin klik "Garbitu bilaketa" estekan.</para>
+
+    <tip>Sarreren zerrenda bat ikustean, sarrerak ordena ditzakezu dauden eremuen arabera, zutabearen goiburu egokian klik eginez. Goranzko edo beheranzko ordenara aldatzeko, egin klik zutabearen izenburuko geziaren ikonoan.</tip></entry>
+
+</help>
diff --git a/turba/locale/fa_IR/LC_MESSAGES/turba.mo b/turba/locale/fa_IR/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..4152135
Binary files /dev/null and b/turba/locale/fa_IR/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/fa_IR/help.xml b/turba/locale/fa_IR/help.xml
new file mode 100644 (file)
index 0000000..18bc8d7
--- /dev/null
@@ -0,0 +1,112 @@
+<?xml version='1.0'?>
+<help>
+
+<entry id="Overview">
+    <title>مرور</title>
+    <heading>مقدمه</heading>
+    <para>
+    کتابچهٔ آدرس يک روش ساده را برای حفظ و واکشی اطلاعات تماس در اختيار قرار می‌دهد. بسته به اينکه سرپرست سامانهٔ شما چگونه سامانه را پيکربندی نمايد، 
+   شما می‌توانيد کتابچهٔ آدرسهای مختلفی داشته باشيد. همچنين در اين سامانه از ايجاد فهرستهای پستی نيز پشتيبانی می‌شود. 
+    </para>
+</entry>
+
+<entry id="menu-add">
+    <title>گزینگان: اضافه کردن</title>
+    <heading>اضافه کردن</heading>
+    <para>
+    اضافه کردن يک ورودی در کتابچهٔ آدرس: شما تنها می‌توانيد در کتابچهٔ آدرسهايی ورودی جديد درج نماييد که 
+    مجوز نوشتن در آنها را داشته باشيد. عموماْ در کتابچهٔ آدرسهای مشترک و يا عمومی افراد مجوز نوشتن ندارند
+    </para>
+</entry>
+
+<entry id="menu-search">
+    <title>گزینگان: جستجو</title>
+    <heading>جستجو</heading>
+    <para>
+    جستجوی يک کتابچهٔ آدرس برای يافتن اطلاعات مورد نظر: در اين روش يک جستجوی سريع صورت گرفته و جستجو تنها بر روی فيلدهای محدودی
+    صورت می‌گيرد. فيلدهای مشخص شده در اين قسمت بسته به هر سامانه می‌تواند متفاوت باشد.
+    </para>
+    <para>
+    برای جستجوی پيشرفته شما می‌توانيد از  &quot;<ref module="turba" entry="menu-advanced-search">جستجوی پيشرفته</ref>&quot; 
+    استفاده کنيد که به شما اجازه جستجو بر روی فيلدهای ديگر را می‌دهد.
+    </para>
+</entry>
+
+<entry id="menu-advanced-search">
+    <title>گزینگان:جستجوی پيشرفته</title>
+    <heading>جستجوی پيشرفته</heading>
+    <para>
+    يک کتابچهٔ آدرس را برای يافتن اطلاعات مورد نظر جستجو می‌کند. در اين روش جستجو بر روی چندين فيلد (بسته به کتابچهٔ آدرس انتخابی) صورت می‌گيرد
+    </para>
+</entry>
+
+<entry id="menu-import">
+    <title>گزینگان: درون‌برد/ برون‌برد</title>
+    <heading>برون‌برد/ درون‌برد</heading>
+    <para>
+    اين گزینگان به برون‌برد و يا درون‌برد اطلاعات به کتابچهٔ آدرس شما کمک می‌نمايد.  
+    در اين حالت از قالبهای زيادی پشتيبانی می‌شود.
+    </para>
+
+    <heading>درون‌برد</heading>
+    <para>
+     برای اخذ اطلاعات از يک کتابچهٔ آدرس شما بايد اطلاعات آن کتابچه آدرس را بر روی کامپيوتر محلی خود درون‌برد نماييد.   
+    </para>
+    <para>
+    اگر شما از Outlook استفاده کنيد:
+    </para>
+    <para>
+    ۱) بر روی گزینگان کتابچهٔ آدرس -> برون‌برد -> پرونده کليک نماييد 
+    </para>
+    <para>
+    ۲)  &quot;فايل متنی&quot; را انتخاب نماييد 
+    </para>
+    <para>
+    ۳) کتابچهٔ آدرس مورد نظر را انتخاب نماييد.
+    </para>
+    <para>
+    ۴) فيلدهايي را که مايل به برون‌برد آنها هستيد علامت زده و سپس کليد خاتمه را فشار دهيد.
+    </para>
+    <para>
+    ۵) در انتهای عمل برون‌برد پيغام 'خاتمه عمل برون‌برد' را دريافت خواهيد نمود 
+    </para>
+    <para>
+    ۶) بر روی کليد خانمه فشار دهيد    
+    </para>
+
+    <tip>
+     کتابچهٔ آدرس برون‌برد شده بر روی کامپيوتر محلّی شما قرار خواهد گرفت. در صورت عدم مشاهده آن بر روی صفحه desktop می‌توانيد به جستجوی آن در فضای ديسک سخت خود بپردازيد.    
+    </tip>
+
+    <para>
+    برای ورود اطلاعات به يک کتابچهٔ آدرس، ابتدا بايد کتابچهٔ آدرس مورد نظر را باز کرده و بر روی کليد درون‌برد/برون‌برد کليک نموده و
+    پروندهٔ مورد نظر را برای اطلاعات انتخاب نموده و کليد ورود را فشار دهيد.
+    </para>
+    <tip>
+    ورودی‌های پيچيده و يا ورودی‌هايي که با فيلدهای کتابچهٔ آدرس شما تطابق ندارند ممکن است به خوبی در کتابچهٔ آدرس شما درج نشوند. اين ورودی‌ها بعد از خاتمه عمل ورود
+    بايد کنترل شوند.
+    </tip>
+</entry>
+
+<entry id="searching-search_results">
+    <title>جستجو: نتايج جستجو</title>
+    <heading>نتايج جستجو</heading>
+    <para>
+    اگر جستجو موفّق باشد، نتايج آن را در بخش &quot;نتيجه جستجو&quot; مشاهده خواهد گرديد.
+    </para>
+    <para>
+    چنانچه در اين بخش بر روی کليد &quot;پست الکترونيک &quot; (برای هر ورودی) فشاردهيد پنجرهٔ انشای پيغام برای آن آدرس گشوده شده و در 
+    و چنانچه بر روی فيلد &quot;نام&quot; کليک نماييد قادر خواهيد بود اطلاعات مربوط به ورودی مورد نظر را ويرايش نماييد.
+    </para>
+    <para>
+    بسته به نوع پيکربندی انجام شده از طرف سرپرست سامانهٔ شما، جستجو می‌تواند به صورت تجمعی صورت گيرد که در اين حالت نتايج هر جستجو به جستجوی 
+    قبلی افزوده می‌گردد. در اين حالت برای حذف نتايج قبل می‌بايست بر روی کليد پاک کردن نتايج جستجو فشار دهيد.
+    </para>
+
+    <tip>
+     هنگامی که يک فهرست از ورودی‌ها مشاهده می‌شود شما می‌توانيد نتايج را بر اساس فيلد دلخواه خود مرتب نماييد. برای تغيير
+    ترتيب مرتب سازی بر روی فلش کنار ستون مورد نظر فشار دهيد.
+    </tip>
+</entry>
+
+</help>
diff --git a/turba/locale/fi_FI/LC_MESSAGES/turba.mo b/turba/locale/fi_FI/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..1ae252c
Binary files /dev/null and b/turba/locale/fi_FI/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/fi_FI/help.xml b/turba/locale/fi_FI/help.xml
new file mode 100644 (file)
index 0000000..e242f1f
--- /dev/null
@@ -0,0 +1,126 @@
+<?xml version="1.0"?>
+<help>
+  <entry id="Overview" md5="290506ade4e6f749246f77bbe5d48835" state="uptodate">
+    <title>Yleiskuva</title>
+    <heading>Esittely</heading>
+    <para>
+    Osoitekirjaan voit tallettaa kaikki yhteystiedot siten ett&#xE4; ne
+    ovat aina k&#xE4;tev&#xE4;sti saatavilla ja k&#xE4;ytett&#xE4;viss&#xE4;. Riippuen miten
+    ohjelmisto on asennettu, sinun on mahdollista tehd&#xE4;
+    henkil&#xF6;kohtainen osoitekirja tai k&#xE4;ytt&#xE4;&#xE4; julkisia osoitekirjoja
+    tai hakemistopalveluja. Voit my&#xF6;s tehd&#xE4; omia listoja, jotka ovat
+    k&#xE4;yt&#xE4;nn&#xF6;ss&#xE4; sinun omia s&#xE4;hk&#xF6;postilistoja.
+    </para>
+</entry>
+  <entry id="menu-add" md5="3c1f92eb1a82839404d11d9b0a20b3ce" state="uptodate">
+    <title>Valikko: Lis&#xE4;&#xE4;</title>
+    <heading>Lis&#xE4;&#xE4;</heading>
+    <para>
+    Voit lis&#xE4;t&#xE4; k&#xE4;ytt&#xE4;j&#xE4;n tiedot osoitekirjaan. Voit lis&#xE4;t&#xE4; osoitteita vain
+    niihin osoitekirjoihin, joihin sinulla on kirjoitusoikeus. Jos
+    k&#xE4;yt&#xF6;ss&#xE4; on jaettuja tai julkisia osoitekirjoja, niin n&#xE4;m&#xE4; on
+    yleens&#xE4; jaettu vain luku/selausoikeuksilla ja et voi lis&#xE4;t&#xE4; niihin
+    osoitteita.
+    </para>
+</entry>
+  <entry id="menu-search" md5="8daf81ab28602d772358a174571f9ad2" state="uptodate">
+    <title>Valikko: Haku</title>
+    <heading>Haku</heading>
+    <para>
+    Voit hakea tietoja osoitekirjasta. T&#xE4;m&#xE4; on pikahaku ja voit etsi&#xE4;
+    tietoja vain muutaman kent&#xE4;n perusteella. K&#xE4;yt&#xE4;nn&#xF6;ss&#xE4; n&#xE4;m&#xE4;
+    etsitt&#xE4;v&#xE4;t kent&#xE4;t ovat nimi tai s&#xE4;hk&#xF6;postiosoite, mutta riippuen
+    yll&#xE4;pidon asettamista asetuksista k&#xE4;yt&#xF6;ss&#xE4; voi olla my&#xF6;s
+    muita kentti&#xE4;.
+    </para>
+    <para>
+    Jos sinun pit&#xE4;&#xE4; etsi&#xE4; osoitekirjasta k&#xE4;ytt&#xE4;en tarkempia
+    hakutermej&#xE4;, niin voit k&#xE4;ytt&#xE4;&#xE4; "<ref module="turba" entry="menu-advanced-search">Tarkempi haku</ref>" -toimintoa.
+    </para>
+</entry>
+  <entry id="menu-advanced-search" md5="6be703ffeba614f6ada151749fa44ab5" state="uptodate">
+    <title>Valikko: Tarkempi haku</title>
+    <heading>Tarkempi haku</heading>
+    <para>
+    Voit hakea tietoja osoitekirjasta. T&#xE4;ll&#xE4; toiminnolla voit hakea
+    osoitekirjasta k&#xE4;ytt&#xE4;en monia kentti&#xE4;. K&#xE4;ytett&#xE4;viss&#xE4; olevat kent&#xE4;t
+    riippuvat siit&#xE4; mist&#xE4; osoitekirjasta tietoja haetaan.
+    </para>
+</entry>
+  <entry id="menu-import" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4" state="uptodate">
+    <title>Valikko: Tuo/Vie</title>
+    <heading>Tuo/Vie</heading>
+
+    <para>
+    T&#xE4;st&#xE4; valikosta voit tuoda tai vied&#xE4; tietoja henkil&#xF6;kohtaisesta
+    osoitekirjaasta. Voit k&#xE4;ytt&#xE4;&#xE4;&#xE4; CSV (Comma Separated Variable),
+    Outlook tai vCard tiedostomuotoja.
+    </para>
+
+    <heading>Tuonti</heading>
+    <para>
+    Tuodaksesi tietoja osoitekirjaan, sinulla pit&#xE4;&#xE4; olla tuotavat
+    tiedot tiedostona paikallisella tietokoneella (sill&#xE4; koneella,
+    jolla k&#xE4;yt&#xE4;t www-selainta). Ensin sinun kuitenkin pit&#xE4;&#xE4; vied&#xE4;
+    osoitekirjatiedot k&#xE4;ytt&#xE4;m&#xE4;st&#xE4;si s&#xE4;hk&#xF6;postiohjelmasta.
+    </para>
+
+    <para>
+    Jos k&#xE4;yt&#xE4;t Outlook Express -ohjelmaa:
+    </para>
+    <para>
+    1) Napsauta File &gt; Export &gt; Address Book
+    </para>
+    <para>
+    2) Valitse "Text File" (Comma Separated Values) "Address Book Export Tool" apuohjelmassa. Napsauta "Export".
+    </para>
+    <para>
+    3) "Save exported files as" kentt&#xE4;&#xE4;n, kirjoita osoitekirjasi nimi. Napsauta "Next".
+    </para>
+    <para>
+    4) Valitse vasemmalla olevasta valintalaatikolla kaikki ne kent&#xE4;t, jotka haluat vied&#xE4;. Napsauta "Finish".
+    </para>
+    <para>
+    5) Sinulle pit&#xE4;isi nyt tulla viesti 'Address book export process has completed'. Napsauta 'OK'.
+    </para>
+    <para>
+    6) Napsauta 'Close' apuohjelmassa 'Address Book Export Tool' ja sulje Outlook Express -ohjelma.
+    </para>
+
+    <tip>
+    Jos viety osoitekirjatiedosto ei ole sinun ty&#xF6;p&#xF6;yd&#xE4;ll&#xE4;si, ja k&#xE4;yt&#xE4;t Windows k&#xE4;ytt&#xF6;j&#xE4;rjestelm&#xE4;&#xE4;, niin napsauta Start &gt; Find or Search &gt; Files or Folders ja hae 3. kohdassa kalenteritiedostolle antamaasti tiedoston nime&#xE4; kiintolevylt&#xE4;. Ota talteen tieto siit&#xE4; mihin tuo tiedosto on talletettu.
+    </tip>
+
+    <para>
+    Tuodaksesi osoitekirjan ohjelmaan, niin avaa ensin osoitekirja
+    johon tuot tietoja. Napsauta "Tuo/Vie" -ikonia. Valitse tuonnissa
+    k&#xE4;ytett&#xE4;v&#xE4; tiedostomuoto. Napsauta "Selaa" -painiketta ja valitse
+    paikalliselta tietokoneelta tuotava osoitekirjatiedosto. Valitse
+    tiedosto ja napsauta "Tuo" -painiketta. T&#xE4;m&#xE4;n j&#xE4;lkeen tiedot
+    pit&#xE4;isi ilmesty&#xE4; osoitekirjaasi.
+    </para>
+    <tip>
+    Jos tiedostossa on monimutkaisempia merkint&#xF6;j&#xE4; tai kentti&#xE4;, jotka
+    eiv&#xE4;t t&#xE4;sm&#xE4;&#xE4; osoitekirjan kenttien kanssa, niin tieto ei
+    v&#xE4;ltt&#xE4;m&#xE4;tt&#xE4; siirry oikein. Sinun kannattaa aina tarkistaa
+    osoitekirjaan tuodut tiedot.
+    </tip>
+</entry>
+  <entry id="searching-search_results" md5="ffed8d72fa3b710df8e902c2493b254f" state="uptodate">
+    <title>Haku: Haun tulokset</title>
+    <heading>Haun tulokset</heading>
+    <para>
+    Jos haku onnistui, niin tulokset pit&#xE4;isi n&#xE4;ky&#xE4; kohdassa "Haun tulokset".
+    </para>
+    <para>
+    Napsauttamalla "S&#xE4;hk&#xF6;postiosoite" -kent&#xE4;&#xE4; avautuu viestinkirjotusikkuna, ja voit l&#xE4;hett&#xE4;&#xE4; viestin siihen osoitteeseen. Napsauttamalla "Nimi" -kentt&#xE4;&#xE4; tulee n&#xE4;kyviin osoitekirjamerkinn&#xE4;n tiedot ja voit muokata tai poistaa merkinn&#xE4;n.
+    </para>
+    <para>
+    Riippuen yll&#xE4;pidon asettamista asetuksista hakutulos voi olla kumulatiivinen. T&#xE4;m&#xE4; tarkoittaa ett&#xE4; jokaisen haun tulos lis&#xE4;t&#xE4;&#xE4;n olemassa oleviin tuloksiin. T&#xE4;m&#xE4; voi olla k&#xE4;tev&#xE4;&#xE4;, jos esimerkiksi olet tekem&#xE4;ss&#xE4; listoja. Voit poistaa hakujen tulokset napsauttamalla "Tyhjenn&#xE4; haku" -linkki&#xE4;.
+    </para>
+
+    <tip>
+    Listaa on mahdollista lajitella mink&#xE4; tahansa sarakkeen mukaan napsauttamalla sarakkeen otsikkoa. Voit muuttaa lajittelua nousevaksi tai laskevaksi napsauttamalla otsikon vieress&#xE4; olevaa nuoli ikonia.
+    </tip>
+</entry>
+</help>
diff --git a/turba/locale/fr_FR/LC_MESSAGES/turba.mo b/turba/locale/fr_FR/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..e9598d1
Binary files /dev/null and b/turba/locale/fr_FR/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/fr_FR/help.xml b/turba/locale/fr_FR/help.xml
new file mode 100644 (file)
index 0000000..9cbdcd7
--- /dev/null
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<help>
+
+<entry id="Overview" md5="290506ade4e6f749246f77bbe5d48835" state="uptodate">
+    <title>Vue d'ensemble</title>
+    <heading>Introduction</heading>
+    <para>
+    Le carnet d'adresses fournit une méthode et un endroit convenable pour l'enregistrement et k'utilisation de l'informations sur vos contacts. Selon la façon dont votre administrateur a configuré le système, il permet de gérer un carnet d'adresse privé ainsi que d'accéder à un carnet public.  Il supporte aussi les listes de distribution pour que vous puissiez créer vos propres listes de courriels personnelles.
+    </para>
+
+</entry>
+
+<entry id="menu-add" md5="3c1f92eb1a82839404d11d9b0a20b3ce" state="uptodate">
+    <title>Menu: Ajouter</title>
+    <heading>Ajouter</heading>
+    <para>
+    Ajouter un contact au carnet.  Vous pouvez ajouter un contact dans le carnet nommé «Mon annuaire» car les autres carnets sont en mode lecture seulement.
+    </para>
+
+</entry>
+
+<entry id="menu-search" md5="8daf81ab28602d772358a174571f9ad2" state="uptodate">
+    <title>Menu: Recherche</title>
+    <heading>Recherche</heading>
+    <para>
+    Recherche de l'information dans un carnet d'adresses. Ceci est conçu comme
+    un outil de recherche rapide et permet seulement de rechercher sur un champ
+    à la fois. Vous pouvez choisir le champ sur lequel vous effectuez la
+    recherche dans la liste déroulante. La même chose est possible pour choisir
+    dans quel carnet d'adresses vous effectuez la recherche.
+    Cela peut varier selon la configuration du carnet d'adresses mise en
+    palce par votre administrateur.
+    </para>
+    <para>
+           Pour faire une recherche plus complexe, vous pouvez utiliser l'outil
+           de "<ref module="turba" entry="menu-advanced-search">Recherche
+           avancée</ref>" qui permet de chercher sur plusieurs champs à la
+    fois.
+    </para>
+
+</entry>
+
+
+<entry id="menu-advanced-search" md5="6be703ffeba614f6ada151749fa44ab5" state="uptodate">
+    <title>Menu: Recherche avancée</title>
+    <heading>Recherche avancée</heading>
+    <para>
+    Permet de faire une recherche dans un carnet d'adresses. La recherche
+    avancée permet de faire une recherche sur plusieurs champs à la fois. Les
+    champs disponibles dépendent de la configuration du carnet d'adresses qu'a
+    fait votre administrateur
+    </para>
+    
+</entry>
+
+<entry id="menu-import" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4" state="uptodate">
+    <title>Menu: Importer/Exporter</title>
+    <heading>Importer/Exporter</heading>
+
+    <para>Ce menu vous permet d'importer et d'exporter vos informations
+       de votre carnet d'adresses personnel. Il supporte
+       les formats CSV (variable séparée par virgule) et vCard, ainsi que quelques autres formats populaires.
+</para>
+
+    <heading>Importer</heading>
+    <para>
+           Pour importer un carnet
+       d'adresses, vous devez avoir le fichier de données du carnet d'adresses à importer sur votre machine
+       locale (la machine sur laquelle votre navigateur fonctionne). Pour faire ceci, vous devrez d'abord exporter l'information de votre logiciel de courrier électronique actuel.
+    </para>
+
+    <para>Si vous utilisez Outlook Express:</para>
+    <para>1) Cliquez Fichier &gt; Exporter &gt; Carnet d'adresses</para>
+    <para>2) Selectionnez " Fichier Texte " (Données séparées par des virgules) dans l'outil d'exportation
+         Cliquez sur " Exporter ".</para>
+    <para>3) Dans la zone " Enregistrer le fichier sous ", entrez un nom pour votre carnet d'adresse.
+         Cliquez sur " Suivant ".</para>
+    <para>4) Cochez les champs à exporter.  Cliquez sur "Terminé ".</para>
+    <para>5) Vous devriez recevoir un mesage si l'exportation a réussi.
+         Cliquez sur "OK ".</para>
+    <para>6) Fermer l'application.</para>
+
+    <tip>
+           Si le carnet d'adresses exporté n'est pas sur votre bureau, et que vous utilisez le système d'exploitation Windows, cliquez sur Démarrrer &gt; Rechercher &gt; Tous les fichiers et tous les dossiers, et cherchez sur votre disque dur principal le nom du fichier que vous avez utilisé à l'étape 3. Prenez en note l'emplacement exact du fichier.
+    </tip>
+
+
+    <para>Pour importer un carnet d'adresses, ouvrez le carnet d'adresses
+       dans lequel vous voulez importer les informations. Cliquez sur l'icône d'Importer/Exporter.
+       Choisissez le type de fichier que vous voulez importer de la liste de choix. Cliquez sur le
+       bouton «Parcourir» pour ouvrir un navigateur de fichiers. Choisissez le fichier, et cliquez
+       sur le bouton d'importation. Les informations seront importées dans votre carnet d'adresses.
+    </para>
+    <tip>
+           Certains entrées complexes, ou certaines entrées avec des champs ne correspondant pas à ceux du carnet d'adresses, peuvent ne pas être importées correctement. Vous devriez vérifier les données importées après l'importation.
+    </tip>
+    
+
+</entry>
+
+<entry id="searching-search_results" md5="ffed8d72fa3b710df8e902c2493b254f" state="uptodate">
+    <title>Recherche: Résultat de recherche</title>
+    <heading>Résultat de recherche</heading>
+    <para>
+    Si une recherche est concluante, les résultats seront affichés dans la zone située sous le formulaire de recherche.</para>
+    <para>
+    Cliquer sur le champ " courriel " ouvrira une fenêtre de composition de message pour pouvoir envoyer un courriel à cette adresse.  Si vous cliquez sur le champ Nom, cela affichera les informations contenues dans le carnet d'adresses, vous permettant aussi de modifier ou effacer les informations, si vous en avez le droit.</para>
+    <para>
+    Cliquez sur le lien «Annuler la recherche» si vous désirez effacer le résultat de la recherche.   </para>
+
+    <tip>
+    Vous pouvez trier une liste d'entrées du carnet d'adresse par chacun des champs affichés en cliquant sur l'en-tête de la colonne appropriée. Pour changer l'ordre (croissant-décroissant), cliquez sur la flèche située juste à côté du nom du champ.
+    </tip>
+    
+</entry>
+
+</help>
diff --git a/turba/locale/gl_ES/LC_MESSAGES/turba.mo b/turba/locale/gl_ES/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..8a063fc
Binary files /dev/null and b/turba/locale/gl_ES/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/hu_HU/LC_MESSAGES/turba.mo b/turba/locale/hu_HU/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..76cbcf8
Binary files /dev/null and b/turba/locale/hu_HU/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/is_IS/LC_MESSAGES/turba.mo b/turba/locale/is_IS/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..b3b629a
Binary files /dev/null and b/turba/locale/is_IS/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/it_IT/LC_MESSAGES/turba.mo b/turba/locale/it_IT/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..9a2c3ed
Binary files /dev/null and b/turba/locale/it_IT/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/ja_JP/LC_MESSAGES/turba.mo b/turba/locale/ja_JP/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..b3b2f0a
Binary files /dev/null and b/turba/locale/ja_JP/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/ko_KR/LC_MESSAGES/turba.mo b/turba/locale/ko_KR/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..d7fc7ab
Binary files /dev/null and b/turba/locale/ko_KR/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/lt_LT/LC_MESSAGES/turba.mo b/turba/locale/lt_LT/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..5d67b93
Binary files /dev/null and b/turba/locale/lt_LT/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/lv_LV/LC_MESSAGES/turba.mo b/turba/locale/lv_LV/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..4803690
Binary files /dev/null and b/turba/locale/lv_LV/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/mk_MK/LC_MESSAGES/turba.mo b/turba/locale/mk_MK/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..8dafbde
Binary files /dev/null and b/turba/locale/mk_MK/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/nb_NO/LC_MESSAGES/turba.mo b/turba/locale/nb_NO/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..f98c23e
Binary files /dev/null and b/turba/locale/nb_NO/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/nl_NL/LC_MESSAGES/turba.mo b/turba/locale/nl_NL/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..85c9269
Binary files /dev/null and b/turba/locale/nl_NL/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/nn_NO/LC_MESSAGES/turba.mo b/turba/locale/nn_NO/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..45bd8d8
Binary files /dev/null and b/turba/locale/nn_NO/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/pl_PL/LC_MESSAGES/turba.mo b/turba/locale/pl_PL/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..1ebefc2
Binary files /dev/null and b/turba/locale/pl_PL/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/pt_BR/LC_MESSAGES/turba.mo b/turba/locale/pt_BR/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..c0b0fbd
Binary files /dev/null and b/turba/locale/pt_BR/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/pt_BR/help.xml b/turba/locale/pt_BR/help.xml
new file mode 100644 (file)
index 0000000..7e7fb1e
--- /dev/null
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<help>
+  <entry id="Overview" state="unknown">
+    <title>Kronolith: Visão Geral</title>
+    <heading>O que é kronolith?</heading>
+    <para>
+Kronolith é um calendário de interface Web. Em adição as funções necessárias de criação, modificação e remoção de eventos, ele atualmente suporta repetição de eventos (com excessões e várias opções de remoção), alarmes, funções de importação e exportação, visualização da Lista de Tarefas (Nag, se estiver instalado), e a possibilidade de mostrar os eventos na tela de sumário do Horde.
+    </para>
+<!-- English entry:
+<entry id="Overview">
+    <title>Overview</title>
+    <heading>Introduction</heading>
+    <para>
+    The Address Book provides a convenient method and place to store contact information for easy retrieval and use. Depending on how your administrator has set up the system it can provide a private address book as well as access to public network directory services. It also supports distribution lists so you can create your own "mailing lists."
+    </para>
+</entry>--></entry>
+  <entry id="menu-add" state="new">
+    <title>Menu: Add</title>
+    <heading>Add</heading>
+    <para>
+    Add a user to an address book. You can only add users to the address books to which you have write access. If shared or public address books have been enabled they are often read-only and you will not be able to add contacts to them.
+    </para>
+</entry>
+  <entry id="menu-search" state="new">
+    <title>Menu: Search</title>
+    <heading>Search</heading>
+    <para>
+    Search an address book to locate information. This is intended as a quick search and only allows you to search on a few basic fields. Usually this is the name and email address fields, but could vary depending on how your administrator set up the address book.
+    </para>
+    <para>
+    For a more complex search you can use the "<ref module="turba" entry="menu-advanced-search">Advanced Search</ref>" which permits searching on other fields.
+    </para>
+</entry>
+  <entry id="menu-advanced-search" state="new">
+    <title>Menu: Advanced Search</title>
+    <heading>Advanced Search</heading>
+    <para>
+    Search an address book to locate information. This search allows you to search on multiple fields. Which fields are available for searching depends on the address book being searched.
+    </para>
+</entry>
+  <entry id="menu-import" state="new">
+    <title>Menu: Import/Export</title>
+    <heading>Import/Export</heading>
+
+    <para>
+    This menu allows importing to and exporting from your personal address book. It supports both CSV (Comma Separated Variable), Outlook, and vCard formats, as well as some other popular formats.
+    </para>
+
+    <heading>Importing</heading>
+    <para>
+    To import an address book, you need to have the address book data to import on your local machine (on which the web browser is running). To do this, you will need to first export the address book information from your current email client.
+    </para>
+
+    <para>
+    If you use Outlook Express:
+    </para>
+    <para>
+    1) Click on File &gt; Export &gt; Address Book
+    </para>
+    <para>
+    2) Select "Text File" (Comma Separated Values) in the "Address Book Export Tool". Click on "Export".
+    </para>
+    <para>
+    3) In the "Save exported files as" field, type in a name for your address book. Click "Next".
+    </para>
+    <para>
+    4) Put a checkmark in the box to the left of each of the fields that you wish to export. Click "Finish".
+    </para>
+    <para>
+    5) You should receive a message that states 'Address book export process has completed'. Click 'OK'.
+    </para>
+    <para>
+    6) Click 'Close' on the 'Address Book Export Tool' and close Outlook Express.
+    </para>
+
+    <tip>
+    If the exported address book file is not located on your desktop, and you're using a Windows operating system, click on Start &gt; Find or Search &gt; Files or Folders and search your main hard drive for the file name that you used in step 3. Make a note of the file's location.
+    </tip>
+
+    <para>
+    To import an address book, open the address book you want to import the information into. Click on the "Import/Export" Icon. Select the type of address information data file you want to import from the selection list. Click on the "browse" button to look for the address data file on your computer. Select the file, and click on the "Import" button. The information in the file will be imported into your address book.
+    </para>
+    <tip>
+    Some complex entries, or entries with fields that do not match your address book fields, may not import correctly. You should verify the imported data after an import.
+    </tip>
+</entry>
+  <entry id="searching-search_results" state="new">
+    <title>Searching: Search Results</title>
+    <heading>Search Results</heading>
+    <para>
+    If a search is successful, the results will show up in the "Search Results" area.
+    </para>
+    <para>
+    Clicking on an "Email" field entry will open a new Compose window to send mail to that address. Clicking on a "Name" field entry will display the address book record for that name, allowing you to then edit or delete the entry.
+    </para>
+    <para>
+    Depending on how your system has been set up by the administrator search results can be cumulative. Each search will add any new results to your existing results. This is helpful when building lists. To remove the results of cumulative searches and start a new search, click on the "Clear Search" link.
+    </para>
+
+    <tip>
+    When viewing a list of entries, you can sort the entries by each field shown by clicking on the appropriate column heading. To switch columns between ascending and descending sort order, click on the arrow icon in the column heading.
+    </tip>
+</entry>
+</help>
diff --git a/turba/locale/pt_PT/LC_MESSAGES/turba.mo b/turba/locale/pt_PT/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..14bf907
Binary files /dev/null and b/turba/locale/pt_PT/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/pt_PT/help.xml b/turba/locale/pt_PT/help.xml
new file mode 100644 (file)
index 0000000..f3d7874
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<help>
+  <entry id="Overview" state="uptodate" md5="290506ade4e6f749246f77bbe5d48835">
+    <title>Apresentação</title>
+    <heading>Introdução</heading>
+    <para>
+    A Lista de Contactos fornece um método e local conveniente para guardar informação de contactos para uma utilização fácil. Pode fornecer acesso a um livro de endereços privado bem como acesso a serviços públicos de endereçamentos. Também suporta listas de distribuição para que possa criar a suas próprias listas distribuídas.
+    </para>
+</entry>
+  <entry id="menu-add" state="uptodate" md5="3c1f92eb1a82839404d11d9b0a20b3ce">
+    <title>Menu: Adicionar</title>
+    <heading>Adicionar</heading>
+    <para>
+    Adicionar um utilizador no livro de endereços.
+    </para>
+</entry>
+  <entry id="menu-search" state="uptodate" md5="8daf81ab28602d772358a174571f9ad2">
+    <title>Menu: Pesquisar</title>
+    <heading>Pesquisar</heading>
+    <para>
+    Pesquise um livro de endereços para encontrar informação. Esta pesquisa permite apenas utilizar alguns campos básicos. Veja "Pesquisa Avançada" para utilizar outros campos.
+    </para>
+</entry>
+  <entry id="menu-advanced-search" state="uptodate" md5="6be703ffeba614f6ada151749fa44ab5">
+    <title>Menu: Pesquisa Avançada</title>
+    <heading>Pesquisa Avançada</heading>
+    <para>
+    Pesquise um livro de endereços para encontrar informação. Esta pesquisa permite utilizar vários campos. Os campos disponíveis para a pesquisa dependem do livro de endereços a ser utilizado.
+    </para>
+</entry>
+  <entry id="menu-import" state="uptodate" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4">
+    <title>Menu: Importar/Exportar</title>
+    <heading>Importar/Exportar</heading>
+    <para>
+    Este menu permite importar para ou exportar  do seu livro pessoal de
+endereços ("My Address Book"). Suporta os formatos CSV (Comma Seperated
+Variable), Outlook, e vCard, bem como outros formatos populares. Para importar um livro de endereços, terá que ter um ficheiro com a informação no computador onde está a aceder ao webmail.
+    </para>
+    <para>
+    Para importar um livro de endereços, abra o livro de endereços da Lista de Contactos. Prima o ícone "Importar/Exportar". Seleccione o tipo de informação que tem para importar da lista apresentada. Prima no botão "Browse" e navegue até ao ficheiro a importar. Seleccione esse ficheiro, e prima o botão de Importar. A informação no ficheiro será importada para o seu livro de endereços. Deverá sempre verificar a informação após uma importação já que poderá haver informação mais complexa que não tenha sido importada correctamente.
+    </para>
+</entry>
+  <entry id="searching-search_results" state="uptodate" md5="ffed8d72fa3b710df8e902c2493b254f">
+    <title>Pesquisa: Resultados da Pesquisa</title>
+    <heading>Resultados da Pesquisa</heading>
+    <para>
+Se a Pesquisa for bem sucedida, os resultados aparecerão na área de "Resultados da Pesquisa".
+    </para>
+    <para>
+Clicando no campo de correio electrónico de um contacto abrirá uma janela de escrita de nova mensagem para o envio de mensagem para esse contacto. Clicando em "Nome" irá mostrar a informação desse contacto, permitindo editar ou apagar o contacto.
+    </para>
+    <para>
+Dependendo de como o sistema estiver configurado pelo administrador, os resultados de pesquisas podem ser cumulativos. Cada pesquisa irá adicionar novos resultados aos resultados já existentes. Isto é útil para a construção de listas. Para remover os resultados de pesquisas acumuladas e começar uma nova pesquisa, clicar no link "Limpar Pesquisa".
+    </para>
+
+    <tip>
+Quando se visualiza uma lista com entradas, pode-se ordenar as entradas por cada campo mostrado clicando no cabeçalho da coluna apropriada. Para ordenar os campos de forma ascendente ou descendente, clicar nas setas nos cabeçalhos de cada coluna.
+    </tip>
+</entry>
+</help>
diff --git a/turba/locale/ro_RO/LC_MESSAGES/turba.mo b/turba/locale/ro_RO/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..f72dd94
Binary files /dev/null and b/turba/locale/ro_RO/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/ru_RU/LC_MESSAGES/turba.mo b/turba/locale/ru_RU/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..548d335
Binary files /dev/null and b/turba/locale/ru_RU/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/sk_SK/LC_MESSAGES/turba.mo b/turba/locale/sk_SK/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..805e9e8
Binary files /dev/null and b/turba/locale/sk_SK/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/sk_SK/help.xml b/turba/locale/sk_SK/help.xml
new file mode 100644 (file)
index 0000000..484da63
--- /dev/null
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="iso-8859-2"?>
+<help>
+  <entry id="Overview" state="unknown">
+    <title>Prehµad</title>
+    <heading>Úvod</heading>
+    <para>
+    Kniha adries umo¾òuje uchováva» kontaktné informácie, ktoré mo¾no jednoduch sprístupni» a pou¾i». Ponúka mo¾nos» vytvorenia súkromnej knihy adries ako aj vyu¾itia verejných adresárových slu¾ieb. Okrem jednoduchých kontaktov mô¾ete uchováva» aj zoznamy adries a tak si mô¾ete vytvára» vlastné "mailing listy".
+    </para>
+<!-- English entry:
+<entry id="Overview">
+    <title>Overview</title>
+    <heading>Introduction</heading>
+    <para>
+    The Address Book provides a convenient method and place to store contact information for easy retrieval and use.  It can provide a private address book as well as access to public network directory services.  It also supports distribution lists so you can create your own &quot;mailing lists.&quot;
+    </para>
+</entry>--></entry>
+  <entry id="menu-add" state="unknown">
+    <title>Menu: Prida»</title>
+    <heading>Prida»</heading>
+    <para>
+    Umo¾ní prida» pou¾ívateµa do knihy adries. Pou¾ívateµov mô¾ete pridáva» iba do knihy adries s menom "Moja kniha adries", preto¾e ostatné sú prístupné iba na èítanie.
+    </para>
+<!-- English entry:
+<entry id="menu-add">
+    <title>Menu: Add</title>
+    <heading>Add</heading>
+    <para>
+    Add a user to an address book.
+    </para>
+</entry>--></entry>
+  <entry id="menu-search" state="unknown">
+    <title>Menu: Hµada»</title>
+    <heading>Hµada»</heading>
+    <para>
+    Umo¾ní prehµadáva» knihu adries a nájs» po¾adované informácie. Toto hµadanie podporuje iba niekoµko základných polí - ak chcete hµada» aj v ostatných, pou¾íte "Roz¹írené vyhµadávanie".
+    </para>
+<!-- English entry:
+<entry id="menu-search">
+    <title>Menu: Search</title>
+    <heading>Search</heading>
+    <para>
+    Search an address book to locate information. This search only allows you to search on some very basic fields.  See &quot;Advanced Search&quot; to search on other fields.
+    </para>
+</entry>--></entry>
+  <entry id="menu-advanced-search" state="unknown">
+    <title>Menu: Roz¹írené vyhµadávanie</title>
+    <heading>Roz¹írené vyhµadávanie</heading>
+    <para>
+    Umo¾ní prehµada» knihu adries a nájs» po¾adované informácie. Toto hµadanie umo¾òuje hµada» vo viacerých poliach. Dostupnos» polí závisí od konkrétnej knihy adries.
+    </para>
+<!-- English entry:
+<entry id="menu-advanced-search">
+    <title>Menu: Advanced Search</title>
+    <heading>Advanced Search</heading>
+    <para>
+    Search an address book to location information. This search allows you to search on multiple fields.  Which fields are available to the search depends on the address book being searched.
+    </para>
+</entry>--></entry>
+  <entry id="menu-import" state="unknown">
+    <title>Menu: Import/Export</title>
+    <heading>Import/Export</heading>
+    <para>
+    Pomocou tohto menu mô¾ete importova» alebo exportova» údaje do/z Va¹ej súkromnej knihy adries (Moja kniha adries). Podporované sú formáty CSV (údaje oddelené èiarkou), Outlook, vCard ako aj niektoré ïal¹ie populárne formáty. Pre import knihy adries musíte ma» údaje ulo¾ené na poèítaèi, z ktorého ste spustili prehliadaè stránok.
+    </para>
+    <para>
+    Ak chcete importova» knihu adries, otvorte Knihu adries, do ktorej chcete ulo¾i» importované údaje. Kliknite na ikonu Export/Import, vyberte formát zdrojovej knihy adries a vyberte súbor s údajmi knihy adries. Potom kliknite na tlaèidlo Import. Informácie z knihy adries budú importované do Va¹ej knihy adries. Niektoré zlo¾itej¹ie polo¾ky alebo polo¾ky s poµami, ktoré nesúhlasia s poµami Knihy adries Turba, sa mô¾u importova» nesprávne, preto by ste po importe mali údaje v Knihe adries skontrolova».
+    </para>
+<!-- English entry:
+<entry id="menu-import">
+    <title>Menu: Import/Export</title>
+    <heading>Import/Export</heading>
+
+    <para>This menu allows you to import to and export from your personal
+    address book (&quot;My Address Book&quot;). It supports both CSV (Comma Separated
+    Variable), Outlook, and vCard formats, as well as some other popular
+    formats. To import an address book, you need to have the address book
+    information to import on your local machine (on which the web browser is
+    running).  To do this, you'll need to first export the address book
+    information from your current email client.</para>
+
+    <para>If you use Outlook Express:</para>
+    <para>1) Click on File &gt; Export &gt; Address Book</para>
+    <para>2) Select 'Text File' (Comma Separated Values) in the 'Address
+    Book Export Tool'.  Click 'Export'.</para>
+    <para>3) In the 'Save exported files as' field, type in a name for your
+    address book.  Click 'Next'.</para>
+    <para>4) Put a checkmark in the box to the left of each of the fields
+    that you wish to export.  Click 'Finish'.</para>
+    <para>5) You should receive a message that states 'Address book export
+    process has completed'.  Click 'OK'.</para>
+    <para>6) Click 'Close' on the 'Address Book Export Tool' and close
+    Outlook Express.</para>
+
+    <para>If the exported address book file is not located on your desktop,
+    and you're using a Windows operating system, click on Start &gt; Find or
+    Search &gt; Files or Folders and search your main hard drive for the file
+    name that you used in step 3.  Make note of the file's location.</para>
+
+    <para>To import an address book, open the address book you want to
+    import the information into. Click on the Import/Export Icon. Select the
+    type of address information data file you want to import from the
+    selection list.  Click on the browse button to open a file browser to
+    navigate among the files on your computer in order to locate the address
+    data file. Select the file, and click on the Import button. The
+    information in the file will be imported into your address book. Some
+    complex entries, or entries with fields that don't match Address Book's
+    fields, may not import correctly, so you should verify the imported data
+    after an import.</para>
+</entry>--></entry>
+  <entry id="searching-search_results" state="new">
+    <title>Searching: Search Results</title>
+    <heading>Search Results</heading>
+    <para>
+    If a search is successful, the results will show up in the "Search Results" area.
+    </para>
+    <para>
+    Clicking on an "Email" field entry will open a new Compose window to send mail to that address. Clicking on a "Name" field entry will display the address book record for that name, allowing you to then edit or delete the entry.
+    </para>
+    <para>
+    Depending on how your system has been set up by the administrator search results can be cumulative. Each search will add any new results to your existing results. This is helpful when building lists. To remove the results of cumulative searches and start a new search, click on the "Clear Search" link.
+    </para>
+
+    <tip>
+    When viewing a list of entries, you can sort the entries by each field shown by clicking on the appropriate column heading. To switch columns between ascending and descending sort order, click on the arrow icon in the column heading.
+    </tip>
+</entry>
+</help>
diff --git a/turba/locale/sl_SI/LC_MESSAGES/turba.mo b/turba/locale/sl_SI/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..378b838
Binary files /dev/null and b/turba/locale/sl_SI/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/sv_SE/LC_MESSAGES/turba.mo b/turba/locale/sv_SE/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..84dc33a
Binary files /dev/null and b/turba/locale/sv_SE/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/tr_TR/LC_MESSAGES/turba.mo b/turba/locale/tr_TR/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..1f530c3
Binary files /dev/null and b/turba/locale/tr_TR/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/tr_TR/help.xml b/turba/locale/tr_TR/help.xml
new file mode 100644 (file)
index 0000000..32f6447
--- /dev/null
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="iso-8859-9"?>
+<help>
+
+<!-- English entry:
+<entry id="Overview">
+    <title>Overview</title>
+    <heading>Introduction</heading>
+    <para>
+    The Address Book provides a convenient method and place to store contact information for easy retrieval and use. Depending on how your administrator has set up the system it can provide a private address book as well as access to public network directory services. It also supports distribution lists so you can create your own "mailing lists."
+    </para>
+</entry>
+-->
+
+<entry id="Overview" md5="290506ade4e6f749246f77bbe5d48835" state="uptodate">
+<title>Genel Bakýþ</title>
+<heading>Tanýtým</heading>
+<para>
+Adres Defteri eriþim listenizi saklamak ve hýzlý sorgulamak için ideal bir yapýdýr. Sistem yöneticinizin ayarlamasýna baðlý olarak herkese açýk veya gizli listeler yapýlabilir. Ayrýca daðýtým listeleri ile kendi e-posta listenizi yaratabilirsiniz.
+</para>
+</entry>
+
+<!-- English entry:
+<entry id="menu-add">
+    <title>Menu: Add</title>
+    <heading>Add</heading>
+    <para>
+    Add a user to an address book. You can only add users to the address books to which you have write access. If shared or public address books have been enabled they are often read-only and you will not be able to add contacts to them.
+    </para>
+</entry>
+-->
+
+<entry id="menu-add" md5="3c1f92eb1a82839404d11d9b0a20b3ce" state="uptodate">
+<title>Menü: Ekle</title>
+<heading>Ekle</heading>
+<para>
+Adres defterinize kullanýcýlarý ekleyebilirsiniz. Yazma izniniz olan defterlere ekleme yapabilirsiniz. Ortak kullanýlan veya herkese açýk defterler için sadece okuma izni olduðundan buralara kaydedemezsiniz.
+</para>
+</entry>
+
+<!-- English entry:
+<entry id="menu-search">
+    <title>Menu: Search</title>
+    <heading>Search</heading>
+    <para>
+    Search an address book to locate information. This is intended as a quick search and only allows you to search on a few basic fields. Usually this is the name and email address fields, but could vary depending on how your administrator set up the address book.
+    </para>
+    <para>
+    For a more complex search you can use the &quot;<ref module="turba" entry="menu-advanced-search">Advanced Search</ref>&quot; which permits searching on other fields.
+    </para>
+</entry>
+-->
+
+<entry id="menu-search" md5="8daf81ab28602d772358a174571f9ad2" state="uptodate">
+<title>Menu: Arama</title>
+<heading>Arama</heading>
+<para>
+Arama özelliði bir bilginin yerini bulmak içindir.Ýsim,e-posta adresi gibi temel özellikler hakkýnda hýzlýca arama yapabilirken , baþka özelliklere göre arama yapabilip yapamamanýz yöneticinin ayarlamasýna baðlýdýr.
+</para>
+<para>
+Daha geliþkin özellikleri sorgulayabilmek için "<ref module="turba" entry="menu-advanced-search">Geliþmiþ Arama</ref>" menüsünü kullanmanýz gerekmektedir.
+</para>
+</entry>
+
+<!-- English entry:
+<entry id="menu-advanced-search">
+    <title>Menu: Advanced Search</title>
+    <heading>Advanced Search</heading>
+    <para>
+    Search an address book to locate information. This search allows you to search on multiple fields. Which fields are available for searching depends on the address book being searched.
+    </para>
+</entry>
+-->
+
+<entry id="menu-advanced-search" md5="6be703ffeba614f6ada151749fa44ab5" state="uptodate">
+<title>Menü: Geliþmiþ Arama</title>
+<heading>Geliþmiþ Arama</heading>
+<para>
+Burada birden fazla alan hakkýnda arama yapýlabilir.Hangi alanlar üzerinde arama yapýlabileceði hangi adres defterinin hangi alanlarý içerdiðine baðlýdýr.
+</para>
+</entry>
+
+<!-- English entry:
+<entry id="menu-import">
+    <title>Menu: Import/Export</title>
+    <heading>Import/Export</heading>
+
+    <para>
+    This menu allows importing to and exporting from your personal address book. It supports both CSV (Comma Separated Variable), Outlook, and vCard formats, as well as some other popular formats.
+    </para>
+
+    <heading>Importing</heading>
+    <para>
+    To import an address book, you need to have the address book data to import on your local machine (on which the web browser is running). To do this, you will need to first export the address book information from your current email client.
+    </para>
+
+    <para>
+    If you use Outlook Express:
+    </para>
+    <para>
+    1) Click on File > Export > Address Book
+    </para>
+    <para>
+    2) Select &quot;Text File&quot; (Comma Separated Values) in the &quot;Address Book Export Tool&quot;. Click on &quot;Export&quot;.
+    </para>
+    <para>
+    3) In the &quot;Save exported files as&quot; field, type in a name for your address book. Click &quot;Next&quot;.
+    </para>
+    <para>
+    4) Put a checkmark in the box to the left of each of the fields that you wish to export. Click &quot;Finish&quot;.
+    </para>
+    <para>
+    5) You should receive a message that states 'Address book export process has completed'. Click 'OK'.
+    </para>
+    <para>
+    6) Click 'Close' on the 'Address Book Export Tool' and close Outlook Express.
+    </para>
+
+    <tip>
+    If the exported address book file is not located on your desktop, and you're using a Windows operating system, click on Start > Find or Search > Files or Folders and search your main hard drive for the file name that you used in step 3. Make a note of the file's location.
+    </tip>
+
+    <para>
+    To import an address book, open the address book you want to import the information into. Click on the &quot;Import/Export&quot; Icon. Select the type of address information data file you want to import from the selection list. Click on the &quot;browse&quot; button to look for the address data file on your computer. Select the file, and click on the &quot;Import&quot; button. The information in the file will be imported into your address book.
+    </para>
+    <tip>
+    Some complex entries, or entries with fields that do not match your address book fields, may not import correctly. You should verify the imported data after an import.
+    </tip>
+</entry>
+-->
+
+<entry id="menu-import" md5="3c6c40f2a6213e9fc1f9a77827bfb5d4" state="uptodate">
+<title>Menu:Alým ve Gönderim</title>
+<heading>Alým ve Gönderim</heading>
+<para>
+Bu menü aracýlýðýyla adres defterinizi baþka bir kaynaða alabilir veya baþka bir kaynaktan adres defterinize dahil edebilirsiniz.CSV,Outlook, ve vCard gibi daha pek çok popüler biçimler desteklenmektedir.
+</para>
+<heading>Alým</heading>
+<para>
+Baþka bir kaynaktan liste alýmý öncesinde , almak istediðiniz liste bilgisini bulunduðu e-posta istemcisinden ayrý bir dosyaya çýkarmalýsýnýz.
+</para>
+Outlook Express kullanýyorsanýz;
+<para>
+"File &gt; Export &gt; Address Book" menüsüne týklayýnýz.
+</para>
+<para>
+"Address Book Export Tool" dan "Text File" (Comma Separated Values) i seçiniz.Burada da "Export" i seçiniz.
+</para>
+<para>
+"Save exported files as"  alanýna çýkarýlacak liste dosyasýnýn kaydedileceði adý giriniz ve "Next" a basýnýz.
+</para>
+<para>
+Çýkarýlmasýný istediðiniz alanlarý seçmek için sol yanlarýndaki kutucuklarý iþaretleyip "Finish" a basýnýz.
+</para>
+<para>
+Ýþlem bitince 'Address book export process has completed' mesajý alacaksýnýz.Burada 'OK' diyerek iþlemi bitirebilirsiniz.
+</para>
+<para>
+'Address Book Export Tool' menüsünü kapatýnýz sonra da Outlook Express ten çýkýnýz.
+</para>
+<para>
+Çýkarýlan dosyayý bulamamanýz durumunda Windows iþletim sistemi kullanýyorsanýz Start &gt; Find menüsünden Search &gt; Files or Folders i seçerek yukarda girdiðiniz dosya adýný aratýp bunu not etmeniz tavsiye edilir.
+</para>
+<tip>
+Çýkarýlan dosyayý yüklemek için "Alým/Çýkarým" menüsüne giriniz."gözat" ile dosyanýzý bulduktan sonra "Alým" seçeneði ile dosyanýzý listenize dahil edebilirsiniz.
+</tip>
+<tip>
+Eklenen dosya içindeki kimi alan bilgileri mevcut adres defterinden farklýlýk gösteriyorsa vb.. karmaþýk durumlarda ekleme sonucunda sorunlar oluþabilir. Bu nedenle iþlemin ardýndan adres defterinizi kontrol etmeniz tavsiye olunur.
+</tip>
+</entry>
+
+
+<!-- English entry:
+<entry id="searching-search_results">
+    <title>Searching: Search Results</title>
+    <heading>Search Results</heading>
+    <para>
+    If a search is successful, the results will show up in the &quot;Search Results&quot; area.
+    </para>
+    <para>
+    Clicking on an &quot;Email&quot; field entry will open a new Compose window to send mail to that address. Clicking on a &quot;Name&quot; field entry will display the address book record for that name, allowing you to then edit or delete the entry.
+    </para>
+    <para>
+    Depending on how your system has been set up by the administrator search results can be cumulative. Each search will add any new results to your existing results. This is helpful when building lists. To remove the results of cumulative searches and start a new search, click on the &quot;Clear Search&quot; link.
+    </para>
+
+    <tip>
+    When viewing a list of entries, you can sort the entries by each field shown by clicking on the appropriate column heading. To switch columns between ascending and descending sort order, click on the arrow icon in the column heading.
+    </tip>
+</entry>
+-->
+
+<entry id="searching-search_results" md5="ffed8d72fa3b710df8e902c2493b254f" state="uptodate">
+<title>Arama: Arama Sonuçlarý</title>
+<heading>Arama Sonuçlarý</heading>
+<para>
+Baþarýlý arama sonuçlarýnýn listesi "Arama Sonuçlarý" menüsünden görüntülenebilecektir.
+</para>
+<para>
+"Eposta" menüsünün seçimi ile bulunan sonuç adrese e-posta atýlabilir."Ýsim" alanýndan arama sonucundaki isim alaný düzenlenebilir.
+</para>
+<para>
+Arama sonuçlarý önceki arama sonuçlarýna ilaveten gösteriliyor olabilir.Bu sistem yöneticisinin ayarýna baðlýdýr.Bu durumda önceki arama sonuçlarýný "Aramayý Sil" menüsü ile silebilirsiniz.
+</para>
+<tip>
+Giriþlerin listesini görüntülerken, giriþleri herhangi bir sütuna göre o sütunun baþlýðýna týklayarak sýnýflandýrabilirsiniz. Sütunu yükselen ve alçalan sýnýflandýrma arasýnda deðiþtirmek için, sütun baþlýðýndaki ok simgesini týklayýn.
+</tip>
+</entry>
+
+</help>
diff --git a/turba/locale/uk_UA/LC_MESSAGES/turba.mo b/turba/locale/uk_UA/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..967cb72
Binary files /dev/null and b/turba/locale/uk_UA/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/zh_CN/LC_MESSAGES/turba.mo b/turba/locale/zh_CN/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..aeaaf5a
Binary files /dev/null and b/turba/locale/zh_CN/LC_MESSAGES/turba.mo differ
diff --git a/turba/locale/zh_TW/LC_MESSAGES/turba.mo b/turba/locale/zh_TW/LC_MESSAGES/turba.mo
new file mode 100644 (file)
index 0000000..bbbac87
Binary files /dev/null and b/turba/locale/zh_TW/LC_MESSAGES/turba.mo differ
diff --git a/turba/minisearch.php b/turba/minisearch.php
new file mode 100644 (file)
index 0000000..e0589ce
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Turba minisearch.php.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+$search = Horde_Util::getFormData('search');
+$results = array();
+
+// Make sure we have a source.
+$source = Horde_Util::getFormData('source', Turba::getDefaultAddressBook());
+
+// Do the search if we have one.
+if (!is_null($search)) {
+    $driver = Turba_Driver::singleton($source);
+    if (!is_a($driver, 'PEAR_Error')) {
+        $criteria['name'] = trim($search);
+        $res = $driver->search($criteria);
+        if (is_a($res, 'Turba_List')) {
+            while ($ob = $res->next()) {
+                if ($ob->isGroup()) {
+                    continue;
+                }
+                $att = $ob->getAttributes();
+                foreach ($att as $key => $value) {
+                    if (!empty($attributes[$key]['type']) &&
+                        $attributes[$key]['type'] == 'email') {
+                        $results[] = array('name' => $ob->getValue('name'),
+                                           'email' => $value,
+                                           'url' => $ob->url());
+                        break;
+                    }
+                }
+            }
+        }
+    }
+}
+
+Horde::addScriptFile('prototype.js', 'horde', true);
+$bodyClass = 'summary';
+require TURBA_TEMPLATES . '/common-header.inc';
+
+?>
+<?php
+if (count($results)) {
+    echo '<ul id="turba_minisearch_results">';
+    foreach ($results as $contact) {
+        echo '<li class="linedRow">';
+
+        $mail_link = $GLOBALS['registry']->call(
+            'mail/compose',
+            array(array('to' => addslashes($contact['email']))));
+        if (is_a($mail_link, 'PEAR_Error')) {
+            $mail_link = 'mailto:' . urlencode($contact['email']);
+            $target = '';
+        } else {
+            $target = strpos($mail_link, 'javascript:') === 0
+                ? ''
+                : ' target="_parent"';
+        }
+
+        echo Horde::link(Horde::applicationUrl($contact['url']),
+                        _("View Contact"), '', '_parent')
+            . Horde::img('contact.png', _("View Contact")) . '</a> '
+            . '<a href="' . $mail_link . '"' . $target . '>'
+            . htmlspecialchars($contact['name'] . ' <' . $contact['email'] . '>')
+            . '</a></li>';
+    }
+    echo '</ul>';
+} elseif (!is_null($search)) {
+    echo _("No contacts found");
+}
+?>
+<script type="text/javascript">
+var status = parent.$('turba_minisearch_searching');
+if (status) {
+    status.hide();
+}
+var iframe = parent.$('turba_minisearch_iframe');
+if (iframe) {
+    iframe.setStyle({
+        height: Math.min($('turba_minisearch_results').getHeight(), 150) + 'px'
+    });
+}
+</script>
+</body>
+</html>
diff --git a/turba/po/.htaccess b/turba/po/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/turba/po/README b/turba/po/README
new file mode 100644 (file)
index 0000000..a4356a9
--- /dev/null
@@ -0,0 +1 @@
+see horde/po/README
\ No newline at end of file
diff --git a/turba/po/ar_SY.po b/turba/po/ar_SY.po
new file mode 100644 (file)
index 0000000..1b4855b
--- /dev/null
@@ -0,0 +1,743 @@
+# Turba Arabic Translation.
+# This file is distributed under the same license as the Turba package.
+# Copyright 2003 Platinum Inc. <pl@tinum.info>
+# Custom Web Applications <http://platinum-sy.com>
+# Platinum Development Team <devteam@platinum-sy.net>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba \n"
+"POT-Creation-Date: 2003-04-30 12:00+0200\n"
+"PO-Revision-Date: 2003-04-30 12:00+0200\n"
+"Last-Translator:  Platinum Development Team <devteam@platinum-sy.com>\n"
+"Language-Team: Arabic <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CP1256\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: config/prefs.php.dist:90
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"ÇáÇÓã ¡ ÇááÞÈ\"  (ãËÇá: ãÍãÏ ÇáÚÑÈí)"
+
+#: config/prefs.php.dist:98
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"ÇááÞÈ ¡ ÇáÇÓã\"  (ãËÇá: ÇáÚÑÈí ãÍãÏ)"
+
+#: data.php:145 data.php:310
+#, c-format
+msgid "%s file successfully imported"
+msgstr "Êã ÇÓÊíÑÇÏ ÇáãáÝ %s ÈäÌÇÍ"
+
+#: templates/menu/menu.inc:11
+msgid "Add"
+msgstr "ÅÖÇÝÉ"
+
+#: templates/add/select.inc:12
+msgid "Add Contact ..."
+msgstr "ÅÖÇÝÉ ÇÊÕÇá..."
+
+#: templates/add/add.inc:10 addobject.php:19
+msgid "Add a new contact"
+msgstr "ÅÖÇÝÉ ÇÊÕÇá ÌÏíÏ"
+
+#: addobjectaction.php:44
+msgid "Add failed"
+msgstr "ÎØÃ ÎáÇá ÇáÅÖÇÝÉ"
+
+#: templates/browse/actions.inc:16
+msgid "Add to"
+msgstr "ÅÖÇÝÉ Åáì"
+
+#: browse.php:31 config/prefs.php.dist:87
+msgid "Address Book Listing"
+msgstr "ÞÇÆãÉ ÏÝÊÑ ÇáÚäÇæíä"
+
+#: lib/api.php:25 lib/api.php:179 lib/api.php:259
+msgid "Address book is read-only."
+msgstr "ÏÝÊÑ ÇáÚäÇæíä ááÞÑÇÁÉ ÝÞØ"
+
+#: browse.php:202
+#, c-format
+msgid "Addresses in list: %s"
+msgstr "ÚÏÏ ÇáÚäÇæíä Ýí ÇáÞÇÆãÉ: %s"
+
+#: templates/menu/menu.inc:13 templates/advanced/head.inc:8 advanced.php:19
+msgid "Advanced Search"
+msgstr "ÈÍË ãÊÞÏã"
+
+#: config/attributes.php.dist:22
+msgid "Alias"
+msgstr "ÇÓã ÈÏíá"
+
+#: templates/browse/actions.inc:8
+msgid "All"
+msgstr "ÇáÌãíÚ"
+
+#: prefs.php:77
+msgid "An illegal value was specified."
+msgstr "Êã ÊÍÏíÏ ÞíãÉ ÛíÑ ãÞÈæáÉ"
+
+#: config/prefs.php.dist:75
+msgid "Ascending"
+msgstr "ÊÕÇÚÏí"
+
+#: templates/prefs/columnselect.inc:235
+msgid "Available Columns:"
+msgstr "ÇáÃÚãÏÉ ÇáãÊÇÍÉ:"
+
+#: templates/browse/actions.inc:44
+#, c-format
+msgid "Back to %s"
+msgstr "ÚæÏÉ Åáì %s"
+
+#: templates/menu/menu.inc:10
+msgid "Browse"
+msgstr "ÊÕÝÍ"
+
+#: templates/edit/edit.inc:15 templates/edit/edit.inc:70
+msgid "Cancel"
+msgstr "ÅáÛÇÁ"
+
+#: templates/browse/column_headers.inc:7
+msgid "Checkbox"
+msgstr "ãÑÈÚ ÇÎÊíÇÑ"
+
+#: templates/prefs/columnselect.inc:229
+msgid "Choose the order of the columns to display in the address list."
+msgstr ""
+"ÇÎÊÑ ÊæÖÚ ÇáÃÚãÏÉ áÅÙåÇÑåÇ Ýí ÞÇÆãÉ ÇáÚäÇæíä"
+
+#: templates/search/head.inc:77 templates/advanced/results_head.inc:18
+#: templates/browse/actions.inc:46
+msgid "Clear Search"
+msgstr "ãÓÍ ÇáÈÍË"
+
+#: config/prefs.php.dist:12
+msgid "Column Options"
+msgstr "ÎíÇÑÇÊ ÇáÃÚãÏÉ"
+
+#: templates/data/import.inc:16 templates/data/export.inc:16
+msgid "Comma separated values"
+msgstr "Þíã ãÝÕæáÉ ÈÝÇÑÒÉ"
+
+#: config/attributes.php.dist:34
+msgid "Company"
+msgstr "ÇáÔÑßÉ"
+
+#: browse.php:80
+msgid "Contact removed from list."
+msgstr "ÇÊÕÇá ãÍÐæÝ ãä ÇáÞÇÆãÉ."
+
+#: browse.php:225
+#, c-format
+msgid "Contents of %s"
+msgstr "ãÍÊæíÇÊ %s"
+
+#: config/prefs.php.dist:18
+msgid "Default Display"
+msgstr "ÇáÅÙåÇÑ ÇáÇÝÊÑÇÖí"
+
+#: config/prefs.php.dist:77
+msgid "Default sorting direction:"
+msgstr "ÇÊÌÇå ÇáÝÑÒ ÇáÇÝÊÑÇÖí:"
+
+#: templates/display/display.inc:20 templates/display/display.inc:86
+#: templates/browse/actions.inc:34
+msgid "Delete"
+msgstr "ÍÐÝ"
+
+#: deleteobject.php:37
+msgid "Deletion failed"
+msgstr "ÎØÃ ÎáÇá ÇáÍÐÝ"
+
+#: config/prefs.php.dist:76
+msgid "Descending"
+msgstr "ÊäÇÒáí"
+
+#: advanced.php:46
+msgid "Directory"
+msgstr "ãÌáÏ"
+
+#: config/prefs.php.dist:11 config/prefs.php.dist:17 config/prefs.php.dist:23
+msgid "Display Options"
+msgstr "ÎíÇÑÇÊ ÇáÅÙåÇÑ"
+
+#: templates/edit/edit.inc:10 templates/display/display.inc:19
+#: templates/display/display.inc:85
+msgid "Edit"
+msgstr "ÊÍÑíÑ"
+
+#: templates/search/row.inc:48 templates/browse/contactrow.inc:55
+#: templates/browse/contactrow.inc:60
+#, c-format
+msgid "Edit '%s'"
+msgstr "ÊÍÑíÑ « %s »"
+
+#: config/attributes.php.dist:26
+msgid "Email"
+msgstr "ÈÑíÏ ÅáßÊÑæäí"
+
+#: status.php:19
+msgid "Error"
+msgstr "ÎØÃ"
+
+#: lib/api.php:265 lib/api.php:269
+msgid "Error while searching directory."
+msgstr "ÍÕá ÎØÃ ÎáÇá ÇáÈÍË Ýí ÇáãÌáÏÇÊ"
+
+#: templates/miniwindow/menu.inc:1
+msgid "Exit Address Book"
+msgstr "ÎÑæÌ ãä ÏÝÊÑ ÇáÚäÇæíä"
+
+#: templates/data/export.inc:27
+msgid "Export"
+msgstr "ÊÕÏíÑ"
+
+#: templates/data/export.inc:7
+msgid "Export Address Book"
+msgstr "ÊÕÏíÑ ÏÝÊÑ ÇáÚäÇæíä"
+
+#: browse.php:59
+msgid "Failed to access the specified address book."
+msgstr "ÎØÃ Ýí ÝÊÍ ÏÝÊÑ ÇáÚäÇæíä ÇáãØáæÈ."
+
+#: browse.php:206
+msgid "Failed to browse list"
+msgstr "ÎØÃ Ýí ÊÕÝÍ ÇáÞÇÆãÉ"
+
+#: browse.php:239
+msgid "Failed to browse the directory"
+msgstr "ÎØÃ Ýí ÊÕÝÍ ÇáãÌáÏ"
+
+#: lib/api.php:82 lib/api.php:308 lib/api.php:356 lib/api.php:399
+#: advanced.php:63 data.php:96 data.php:230 data.php:324 data.php:378
+#: data.php:445 data.php:481 search.php:47 addobject.php:44
+msgid "Failed to connect to the specified directory."
+msgstr "ÎØÃ Ýí ÇáÇÊÕÇá ÈÇáãÌáÏ ÇáãØáæÈ."
+
+#: advanced.php:85 data.php:449 data.php:485 search.php:63
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "ÎØÃ ÎáÇá ÇáÈÍË Ýí ÇáãÌáÏ: %s"
+
+#: lib/api.php:320 lib/api.php:367
+msgid "Failed to search the specified directory."
+msgstr "ÎØÃ ÎáÇá ÇáÈÍË Ýí ÇáãÌáÏ ÇáãØáæÈ."
+
+#: config/attributes.php.dist:58
+msgid "Fax"
+msgstr "ÝÇßÓ"
+
+#: templates/search/head.inc:37 templates/browse/search.inc:65
+msgid "Find"
+msgstr "ÃæÌÏ"
+
+#: templates/search/head.inc:50 templates/browse/search.inc:78
+msgid "From"
+msgstr "ãä"
+
+#: templates/browse/contactrow.inc:70
+msgid "Group"
+msgstr "ãÌãæÚÉ"
+
+#: templates/menu/menu.inc:35
+msgid "Help"
+msgstr "ÇáãÓÇÚÏÉ"
+
+#: config/attributes.php.dist:38
+msgid "Home Address"
+msgstr "ÚäæÇä ÇáãäÒá"
+
+#: config/attributes.php.dist:46
+msgid "Home Phone"
+msgstr "åÇÊÝ ÇáãäÒá"
+
+#: templates/data/import.inc:28
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr ""
+"ÎáÇá ÇÓÊíÑÇÏ ãáÝ 'CVS': åá íÍÊæí ÇáÓØÑ ÇáÃæá Úáì ÇÓãÇÁ ÇáÍÞæá¿"
+
+#: data.php:157
+msgid "Illegal or malformed form data."
+msgstr "ÊäÓíÞ ÛíÑ ãÞÈæá Ãæ ÎØÃ Ýí ÇáÈíÇäÇÊ."
+
+#: templates/data/import.inc:35
+msgid "Import"
+msgstr "ÇÓÊíÑÇÏ"
+
+#: templates/data/import.inc:7
+msgid "Import Address Book"
+msgstr "ÇÓÊíÑÇÏ ÏÝÊÑ ÚäÇæíä"
+
+#: templates/menu/menu.inc:17
+msgid "Import/Export"
+msgstr "ÇÓÊíÑÇÏ/ÊÕÏíÑ"
+
+#: data.php:510
+msgid "Import/Export Addressbooks"
+msgstr "ÇÓÊíÑÇÏ/ÊÕÏíÑ ÏÝÇÊÑ ÚäÇæíä"
+
+#: lib/api.php:19 lib/api.php:165 lib/api.php:218 lib/api.php:241
+msgid "Invalid address book."
+msgstr "ÏÝÊÑ ÚäÇæíä ÛíÑ ÕÍíÍ"
+
+#: lib/api.php:173 lib/api.php:245
+msgid "Invalid e-mail address."
+msgstr "ÚäæÇä ÈÑíÏ ÅáßÊÑæäí ÛíÑ ÕÍíÍ"
+
+#: lib/api.php:292 lib/api.php:384
+msgid "Invalid email."
+msgstr "ÈÑíÏ ÅáßÊÑæäí ÛíÑ ÕÍíÍ"
+
+#: lib/api.php:253
+msgid "Invalid entry."
+msgstr "ÎØÃ Ýí Þíã ÇáÅÏÎÇá"
+
+#: lib/api.php:169 lib/api.php:249
+msgid "Invalid name."
+msgstr "ÎØÃ Ýí ÇáÇÓã"
+
+#: config/prefs.php.dist:6
+msgid "Language"
+msgstr "ÇááÛÉ"
+
+#: templates/search/head.inc:44 templates/browse/search.inc:72
+msgid "Matching"
+msgstr "ãØÇÈÞÉ ÕÍíÍÉ"
+
+#: status.php:32
+msgid "Message"
+msgstr "ÑÓÇáÉ"
+
+#: config/attributes.php.dist:54
+msgid "Mobile Phone"
+msgstr "ÇáåÇÊÝ ÇáãÍãæá"
+
+#: lib/api.php:327 lib/api.php:404
+msgid "More than 1 entry returned."
+msgstr "Êã ÅÑÌÇÚ ÃßËÑ ãä ÞíãÉ"
+
+#: templates/data/import.inc:23
+msgid "Mulberry Address Book"
+msgstr "ÏÝÊÑ ÚäÇæíä ÇáÊæÊí"
+
+#: data.php:364
+msgid "Mulberry addressbook sucessfully imported"
+msgstr "Êã ÇÓÊíÑÇÏ ÏÝÊÑ ÚäÇæíä ÇáÊæÊí ÈäÌÇÍ"
+
+#: config/attributes.php.dist:18
+msgid "Name"
+msgstr "ÇÓã"
+
+#: config/prefs.php.dist:24
+msgid "Name Format"
+msgstr "ÊäÓíÞ ÇáÇÓã"
+
+#: templates/browse/actions.inc:20
+msgid "New List"
+msgstr "ÞÇÆãÉ ÌÏíÏÉ"
+
+#: lib/api.php:329 lib/api.php:411
+#, c-format
+msgid "No %s entry found for %s."
+msgstr "áÇ ÊæÌÏ ÈíÇäÇÊ %s ãä ÃÌá %s"
+
+#: templates/browse/actions.inc:9
+msgid "None"
+msgstr "áÇíæÌÏ"
+
+#: templates/add/noadd.inc:9
+msgid ""
+"None of the available address books are configured to allow you to add new "
+"entries to them. If you believe this is an error, please contact your system "
+"administrator."
+msgstr ""
+"áÇíæÌÏ ÏÝÊÑ ÚäÇæíä ãÚÏ áÅÏÎÇá "
+"ÈíÇäÇÊ ÌÏíÏÉ. ÅÐÇ ßäÊ ÊÚÊÞÏ Ãäå ÎØÃ ãÇ¡ ÇáÑÌÇÁ ÅÈáÇÛ "
+"ãÏíÑ ÇáäÙÇã."
+
+#: config/attributes.php.dist:62
+msgid "Notes"
+msgstr "ãáÇÍÙÇÊ"
+
+#: templates/menu/menu.inc:22
+msgid "Options"
+msgstr "ÎíÇÑÇÊ"
+
+#: templates/data/import.inc:20
+msgid "Outlook"
+msgstr "ÃæÊáæß"
+
+#: templates/data/import.inc:24
+msgid "Pine Address Book"
+msgstr "ÏÝÊÑ ÇáÚäÇæíä ÇáÕäæÈÑí"
+
+#: data.php:418
+msgid "Pine addressbook sucessfully imported"
+msgstr "Êã ÇÓÊíÑÇÏ ÏÝÊÑ ÇáÚäÇæíä ÇáÕäæÈÑí ÈäÌÇÍ"
+
+#: templates/add/select.inc:6
+msgid "Please choose an address book to add a contact to."
+msgstr ""
+"ÇáÑÌÇÁ ÇÎÊíÇÑ ÏÝÊÑ ÚäÇæíä áÅÖÇÝÉ ÇÊÕÇá Åáíå."
+
+#: templates/browse/javascript.inc:18
+msgid "Please enter the name of the new list:"
+msgstr "ÇáÑÌÇÁ ÅÏÎÇá ÇÓã ÇáÞÇÆãÉ ÇáÌÏíÏÉ:"
+
+#: templates/prefs/columnselect.inc:220
+msgid "Please select a directory:"
+msgstr "ÇáÑÌÇÁ ÇÎÊíÇÑ ãÌáÏ:"
+
+#: templates/menu/menu.inc:27
+msgid "Problem?"
+msgstr "ãÔßáÉ¿"
+
+#: templates/browse/actions.inc:34
+msgid "Remove from this list"
+msgstr "ÇÍÐÝ ãä ÇáÞÇÆãÉ"
+
+#: templates/add/add.inc:14 templates/add/add.inc:69
+#: templates/edit/edit.inc:14 templates/edit/edit.inc:69
+#: templates/advanced/results_head.inc:5 templates/advanced/head.inc:15
+msgid "Reset"
+msgstr "ÅÚÇÏÉ ÊåíÆÉ"
+
+#: templates/add/add.inc:13 templates/add/add.inc:68
+msgid "Save"
+msgstr "ÍÝÙ"
+
+#: templates/edit/edit.inc:13 templates/edit/edit.inc:68
+msgid "Save Changes"
+msgstr "ÍÝÙ ÇáÊÛííÑÇÊ"
+
+#: templates/menu/menu.inc:12 templates/search/head.inc:31
+#: templates/browse/search.inc:59 search.php:18 config/prefs.php.dist:88
+msgid "Search"
+msgstr "ÈÍË"
+
+#: templates/advanced/results_head.inc:15 browse.php:185
+msgid "Search Results"
+msgstr "äÊÇÆÌ ÇáÈÍË"
+
+#: templates/search/head.inc:74
+msgid "Search&nbsp;Results"
+msgstr "äÊÇÆÌ ÇáÈÍË"
+
+#: templates/browse/actions.inc:7
+msgid "Select"
+msgstr "ÇÎÊíÇÑ"
+
+#: templates/browse/select.inc:8
+msgid "Select Address Book"
+msgstr "ÇÎÊÑ ÏÝÊÑ ÚäÇæíä"
+
+#: templates/browse/actions.inc:18
+msgid "Select List"
+msgstr "ÇÎÊÑ ÞÇÆãÉ"
+
+#: templates/data/import.inc:29
+msgid "Select the destination to import to:"
+msgstr "ÇÎÊÑ ÇáæÌåÉ ÇáÊí ÊÑíÏ ÇáÅÓÊíÑÇÏ ÅáíåÇ:"
+
+#: templates/data/import.inc:33
+msgid "Select the file to import:"
+msgstr "ÇÎÊÑ ãáÝ áíÊã ÇÓÊíÑÇÏå:"
+
+#: templates/data/export.inc:14
+msgid "Select the format to export to:"
+msgstr "ÇÎÊÑ ÊäÓíÞ ÇáÊÕÏíÑ:"
+
+#: templates/data/import.inc:14
+msgid "Select the format to import from:"
+msgstr "ÇÎÊÑ ÊäÓíÞ ÇáÇÓÊíÑÇÏ ãä:"
+
+#: config/prefs.php.dist:97
+msgid "Select the format used to display names:"
+msgstr "ÇÎÊÑ ÊäÓíÞ ÅÙåÇÑ ÇáÃÓãÇÁ:"
+
+#: templates/data/export.inc:23
+msgid "Select the source to export from:"
+msgstr "ÇÎÊÑ ÇáãÕÏÑ ááÊÕÏíÑ ãäå:"
+
+#: config/prefs.php.dist:19
+msgid "Select view to display by default."
+msgstr "ÇÎÊÑ Ôßá ÇáÅÙåÇÑ ÇáÇÝÊÑÇÖí."
+
+#: config/prefs.php.dist:13
+msgid "Select which fields to display in the address lists."
+msgstr "ÇÎÊÑ ÍÞæáÇð áíÊã ÅÙåÇÑåÇ Ýí ÞÇÆãÉ ÇáÚäÇæíä."
+
+#: config/prefs.php.dist:25
+msgid "Select which format to display names."
+msgstr "ÇÎÊÑ ÊäÓíÞ ÅÙåÇÑ ÇáÃÓãÇÁ."
+
+#: config/prefs.php.dist:34
+msgid "Select your preferred language:"
+msgstr "ÇÎÊÑ áÛÊß ÇáãÝÖáÉ:"
+
+#: templates/prefs/columnselect.inc:245
+msgid "Selected Columns:"
+msgstr "ÇÎÊÑ ÃÚãÏÉ:"
+
+#: templates/display/display.inc:53
+#, c-format
+msgid "Send mail to %s"
+msgstr "ÃÑÓá ÑÓÇáÉ Åáì %s"
+
+#: config/prefs.php.dist:7
+msgid "Set your preferred display language."
+msgstr "ÇÎÊÑ áÛÉ ÇáÅÙåÇÑ ÇáãÝÖáÉ."
+
+#: templates/browse/select.inc:13
+msgid "Show"
+msgstr "ÅÙåÇÑ"
+
+#: templates/browse/actions.inc:42
+msgid "Show All"
+msgstr "ÅÙåÇÑ Çáßá"
+
+#: templates/browse/actions.inc:41
+msgid "Show Contacts"
+msgstr "ÅÙåÇÑ ÇáÇÊÕÇáÇÊ"
+
+#: templates/browse/actions.inc:40
+msgid "Show Lists"
+msgstr "ÅÙåÇÑ ÇáÞæÇÆã"
+
+#: templates/index/notconfigured.inc:13
+msgid "Some of Turba's configuration files are missing:"
+msgstr "Certains fichiers de configuration de Turba sont absents :"
+
+#: templates/browse/column_headers.inc:9
+#: templates/browse/column_headers.inc:14
+msgid "Sort Direction"
+msgstr "ÇÊÌÇå ÇáÝÑÒ"
+
+#: status.php:23
+msgid "Success"
+msgstr "Êã ÈäÌÇÍ"
+
+#: templates/data/import.inc:18 templates/data/export.inc:18
+msgid "Tab separated values"
+msgstr "Þíã ãÝÕæáÉ ÈãÓÇÍÉ"
+
+#: data.php:77
+msgid "The data got lost"
+msgstr "ÇáÈíÇäÇÊ ãÝÞæÏÉ"
+
+#: data.php:37 data.php:331 data.php:385
+msgid "The data got lost."
+msgstr "Êã ÝÞÏÇä ÇáÈíÇäÇÊ"
+
+#: data.php:426
+msgid "The file contained no data."
+msgstr "ÇáãáÝ ÎÇá ãä ÇáÈíÇäÇÊ."
+
+#: browse.php:55
+msgid "There are no browseable address books."
+msgstr "áÇíæÌÏ ÏÝÊÑ ÚäÇæíä ÞÇÈá ááÊÕÝÍ."
+
+#: templates/add/noadd.inc:4
+msgid "There are no writeable address books."
+msgstr "áÇíæÌÏ ÏÝÊÑ ÚäÇæíä ÞÇÈá ááßÊÇÈÉ."
+
+#: data.php:154
+msgid ""
+"There was a problem with the file upload. The file may have been larger than "
+"the maximum allowed size."
+msgstr ""
+"ÊæÌÏ ãÔßáÉ Ýí ÊÍãíá ÇáãáÝ. ÞÏ íßæä ÍÌã ÇáãáÝ ÃßÈÑ ãä "
+" ÇáÍÌã ÇáÃÞÕì ÇáãÓãæÍ Èå."
+
+#: addobjectaction.php:42
+msgid ""
+"There was an error adding this object. Contact your system administrator for "
+"further help."
+msgstr ""
+"ÍÕá ÎØÃ ÎáÇá ÇáÅÖÇÝÉ. ÇáÑÌÇÁ ÓÄÇá ãÏíÑ ÇáäÙÇã "
+"áØáÈ ÇáãÓÇÚÏÉ."
+
+#: browse.php:143
+msgid "There was an error creating a new list."
+msgstr "ÍÕá ÎØÃ ÎáÇá ÅäÔÇÁ ÞÇÆãÉ ÌÏíÏÉ."
+
+#: browse.php:87
+msgid "There was an error deleting this object."
+msgstr "ÍÕá ÎØÃ ÎáÇá ÇáÍÐÝ."
+
+#: deleteobject.php:35
+msgid ""
+"There was an error deleting this object. Contact your system administrator "
+"for further help."
+msgstr ""
+"ÍÕá ÎØÃ ÎáÇá ÇáÍÐÝ. ÇáÑÌÇÁ ÓÄÇá ãÏíÑ ÇáäÙÇã "
+"áØáÈ ÇáãÓÇÚÏÉ."
+
+#: browse.php:220
+msgid "There was an error displaying the select List"
+msgstr "ÍÕá ÎØÃ ÎáÇá ÅÙåÇÑ ÇáÞÇÆãÉ ÇáãÎÊÇÑÉ."
+
+#: data.php:131 data.php:308 data.php:362 data.php:416
+msgid "There was an error importing the data."
+msgstr "ÍÕá ÎØÃ ÎáÇá ÇÓÊíÑÇÏ ÇáÈíÇäÇÊ."
+
+#: data.php:176 data.php:204 data.php:321 data.php:375
+msgid "There was an error importing the uploaded file"
+msgstr "ÍÕá ÎØÃ ÎáÇá ÇÓÊíÑÇÏ ÇáãáÝ ÇáãÍãá."
+
+#: lib/api.php:30 lib/api.php:53
+msgid "There was an error importing the vCard data."
+msgstr "ÍÕá ÎØÃ ÎáÇá ÇÓÊíÑÇÏ ÈíÇäÇÊ ãä vCard"
+
+#: browse.php:78
+msgid "There was an error removing this object."
+msgstr "ÍÕá ÎØÃ ÎáÇá ÇáÍÐÝ."
+
+#: templates/index/notconfigured.inc:32
+msgid ""
+"This file controls the default preferences for Turba, and also controls "
+"which preferences users can alter."
+msgstr ""
+"íÊÍßã åÐÇ ÇáãáÝ ÈÇáÅÚÏÇÏÇÊ ÇáÇÝÊÑÇÖíÉ áÈÑíãÌÇÊ ÊæÑÈÇ¡ ßãÇ "
+"íÍÏÏ ÇáÅÚÏÇÏÇÊ ÇáÊí íãßä ááãÓÊÎÏã ÊÚÏíáåÇ."
+
+#: templates/index/notconfigured.inc:25
+msgid ""
+"This file controls the stylesheet that is used to set colors and fonts in "
+"addition to or overriding Horde defaults."
+msgstr ""
+"íÊÍßã åÐÇ ÇáãáÝ ÈáæÇÆÍ ÇáÃáæÇä æÇáÎØæØ ÅÖÇÝÉ "
+"Ãæ ÈÏáÇð ãä ÅÚÏÇÏÇÊ åæÑÏí 'Horde'."
+
+#: templates/index/notconfigured.inc:46
+msgid ""
+"This file defines the Turba global attribute names and types - names, email "
+"addresses, etc."
+msgstr ""
+"íÍÊæí åÐÇ ÇáãáÝ Úáì ÇáÊÚÑíÝÇÊ ÇáÚÇãÉ áÊæÑÈÇ ÇÓãÇÁ ÇáãßæäÇÊ æäãØåÇ¡ ÚäÇæíä "
+"ÇáÈÑíÏ ¡ ÃáÎ."
+
+#: templates/index/notconfigured.inc:39
+msgid "This file defines the list of available sources for Turba."
+msgstr "íÍÊæí åÐÇ ÇáãáÝ Úáì ÞÇÆãÉ ÇáãÕÇÏÑ ÇáãÊÇÎÉ áÊæÑÈÇ."
+
+#: templates/index/notconfigured.inc:18
+msgid ""
+"This is the main Turba configuration file. It contains paths and options for "
+"the Turba scripts."
+msgstr ""
+"åÐÇ ãáÝ ÇáÅÚÏÇÏÇÊ ÇáÑÆíÓí áÊæÑÈÇ æíÍæí ãÓÇÑÇÊ æ "
+"ÎíÇÑÇÊ ÌãíÚ ÈíÑãÌÇÊ ÊæÑÈÇ"
+
+#: prefs.php:86
+msgid "This number must be at least one."
+msgstr "íÌÈ Ãä íßæä åÐÇ ÇáÑÞã ÃßÈÑ ãä ÇáÕÝÑ."
+
+#: lib/api.php:271
+#, c-format
+msgid "This person already has a %s entry in the address book."
+msgstr "íÍÊæí ÏÝÊÑ ÇáÚäÇæíä ÅÏÎÇáÇÊ ÚÏÏ %s áåÐÇ ÇáÔÎÕ ."
+
+#: lib/api.php:41 lib/api.php:185
+msgid "This person is already in your address book."
+msgstr "åÐÇ ÇáÔÎÕ ãÏÑÌ Ýí ÏÝÊÑ ÇáÚäÇæíä"
+
+#: prefs.php:84
+msgid "This value must be a number."
+msgstr "íÌÈ Ãä Êßæä åÐå ÇáÞíãÉ ÑÞãÇð."
+
+#: config/attributes.php.dist:30
+msgid "Title"
+msgstr "ÇááÞÈ"
+
+#: templates/index/notconfigured.inc:4
+msgid "Turba is not properly configured"
+msgstr "íæÌÏ ÎØÃ Ýí ÅÚÏÇÏÇÊ ÊæÑÈÇ"
+
+#: lib/Driver.php:44
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "ÊÚÐÑ ÊÍãíá ÊÚÑíÝ: %s."
+
+#: lib/api.php:46
+msgid "Unnamed Contact"
+msgstr "ÇÊÕÇá Ïæä ÇÓã"
+
+#: prefs.php:143
+msgid "User Options"
+msgstr "ÎíÇÑÇÊ ÇáãÓÊÎÏã"
+
+#: templates/display/display.inc:77
+msgid "View map"
+msgstr "ÅÙåÇÑ ÇáÎÑíØÉ"
+
+#: config/prefs.php.dist:86
+msgid "View to display by default:"
+msgstr "Ôßá ÇáÅÙåÇÑ ÇáÇÝÊÑÇÖí:"
+
+#: status.php:27
+msgid "Warning"
+msgstr "ÊÍÐíÑ"
+
+#: config/attributes.php.dist:42
+msgid "Work Address"
+msgstr "åÇÊÝ ÇáÚãá"
+
+#: config/attributes.php.dist:50
+msgid "Work Phone"
+msgstr "åÇÊÝ ÇáÚãá"
+
+#: templates/browse/javascript.inc:18
+msgid "You are creating a distribution list."
+msgstr "íÊ ÅäÔÇÁ ÞÇÆãÉ ÊæÒíÚ."
+
+#: data.php:44
+msgid ""
+"You didn't map any fields from the imported file to the corresponding fields "
+"in Turba."
+msgstr ""
+"áã íÊã ÊÍÏíÏ ÏáÇáÇÊ ÇáÍÞæá ãä ÇáãáÝ ÇáãÓÊæÑÏ áÊÏá Úáì ÇáÍÞæá ÇáãØÇÈÞÉ "
+"Ýí ÊæÑÈÇ."
+
+#: templates/browse/javascript.inc:33
+msgid "You must select at least one contact first."
+msgstr "íÌÈ ÊÍÏíÏ ÇÊÕÇá æÇÍÏ Úáì ÇáÃÞá."
+
+#: config/prefs.php.dist:5
+msgid "Your Information"
+msgstr "ÇáÈíÇäÇÊ ÇáÔÎÕíÉ"
+
+#: prefs.php:128
+msgid "Your options have been updated."
+msgstr "Êã ÊÍÏíË ÇáÎíÇÑÇÊ."
+
+#: templates/search/row.inc:48 templates/browse/contactrow.inc:43
+#: templates/browse/contactrow.inc:61
+msgid "[Edit]"
+msgstr "[ÊÍÑíÑ]"
+
+#: templates/prefs/columnselect.inc:239
+msgid "add column"
+msgstr "ÅÖÇÝÉ ÚãæÏ"
+
+#: config/prefs.php.dist:43
+msgid "from"
+msgstr "ãä"
+
+#: templates/prefs/columnselect.inc:249
+msgid "move left"
+msgstr "ÊÍÑíß äÍæ ÇáíÓÇÑ"
+
+#: templates/prefs/columnselect.inc:251
+msgid "move right"
+msgstr "ÊÍÑíß äÍæ Çáíãíä"
+
+#: templates/prefs/columnselect.inc:241
+msgid "remove column"
+msgstr "ÍÐÝ ÚãæÏ"
+
+#: templates/data/import.inc:21 templates/data/export.inc:21
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/bg_BG.po b/turba/po/bg_BG.po
new file mode 100644 (file)
index 0000000..28d4484
--- /dev/null
@@ -0,0 +1,505 @@
+# Bulgarian translations for Turba package.
+# Copyright 2002-2009 The Horde Project
+# This file is distributed under the same license as the Turba package.
+# Miroslav Pendev <miro@cybershade.us>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.0-cvs\n"
+"POT-Creation-Date: 2002-09-14 00:38-0400\n"
+"PO-Revision-Date: 2002-11-19 20:44-0500\n"
+"Last-Translator: Miroslav Pendev <miro@cybershade.us>\n"
+"Language-Team: BG i18n@lists.horde.org\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CP1251\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, c-format
+msgid "%s file successfully imported"
+msgstr "%s ôàéë áåøå èìïîðòèðàí óñïåøíî"
+
+msgid "Add"
+msgstr "Äîáàâè"
+
+msgid "Add a new contact"
+msgstr "Äîáàâè íîâ êîíòàêò"
+
+msgid "Add failed"
+msgstr "Ãðåøêà ïðè äîáàâÿíå"
+
+msgid "Address Book Listing"
+msgstr "Àäðåñåí ñïèñúê"
+
+msgid "Address book is read-only."
+msgstr "Àäðåñíàòà êíèãà å â ðåæèì ÷åòåíå."
+
+#, c-format
+msgid "Addresses in list: %s"
+msgstr "Àäðåñè â ñïèñúê: %s"
+
+msgid "Advanced Search"
+msgstr "Ðàçøèðåíî òúðñåíå"
+
+msgid "Alias"
+msgstr "Ïñåâäîíèì"
+
+msgid "All"
+msgstr "Âñè÷êè"
+
+msgid "Ascending"
+msgstr "Íàðàñòâàùè"
+
+msgid "Available Columns:"
+msgstr "Íàëè÷íè êîëîíè:"
+
+#, c-format
+msgid "Back to %s"
+msgstr "Îáðàòíî â %s"
+
+msgid "Browse"
+msgstr "Ïðåãëåäàé"
+
+msgid "Checkbox"
+msgstr "Checkbox"
+
+msgid "Choose the order of the columns to display in the address list."
+msgstr "Èçáåðåòå ðåäà íà ïîêàçâàíå íà êîëîíèòå â àäðåñíèÿ ñïèñúê."
+
+msgid "Clear Search"
+msgstr "Èç÷èñòè òúðñåíå"
+
+msgid "Column Options"
+msgstr "Îïöèè çà êîëîíèòå"
+
+msgid "Comma separated values"
+msgstr "CSV - ðàçäåëåíè ñúñ çàïåòàÿ ñòîéíîñòè"
+
+msgid "Company"
+msgstr "Êîìïàíèÿ"
+
+msgid "Contact removed from list."
+msgstr "Êîíòàêòúò áåøå ïðåìàõíàò îò ñïèñúêà."
+
+#, c-format
+msgid "Contents of %s"
+msgstr "Ñúäúðæàíèå íà %s"
+
+msgid "Default Display"
+msgstr "Èçãëåä ïî ïîäðàçáèðàíå"
+
+msgid "Default sorting direction:"
+msgstr "Ïîñîêà íà ñîðòèðàíå ïî ïîäðàçáèðàíå:"
+
+msgid "Delete"
+msgstr "Èçòðèé"
+
+msgid "Deletion failed"
+msgstr "Ãðåøêà ïðè òðèåíå"
+
+msgid "Descending"
+msgstr "Íàìàëÿâàùè"
+
+msgid "Directory"
+msgstr "Äèðåêòîðèÿ"
+
+msgid "Display Options"
+msgstr "Äèñïëåé Îïöèè"
+
+msgid "Edit"
+msgstr "Ðåäàêöèÿ"
+
+#, c-format
+msgid "Edit '%s'"
+msgstr "Ðåäàêòèðàé '%s'"
+
+msgid "Email"
+msgstr "Ïèñìî"
+
+msgid "Error while searching directory."
+msgstr "Ãðåøêà ïðè òúðñåíåòî â êàòàëîãà."
+
+msgid "Exit Address Book"
+msgstr "Èçõîä àäðåñíà êíèãà"
+
+msgid "Export Address Book"
+msgstr "Åêñïîðò íà àäðåñíà êíèãà"
+
+msgid "Failed to access the specified address book."
+msgstr "Ãðåøêà ïðè äîñòúïà äî çàäàäåíàòà àäðåñíà êíèãà"
+
+msgid "Failed to browse list"
+msgstr "Ãðåøêà ïðè ïðåãëåæäàíå íà ñïèñúêà"
+
+msgid "Failed to browse the directory"
+msgstr "Ãðåøêà ïðè ïðåãëåæäàíå íà ïàïêàòà"
+
+msgid "Failed to connect to the specified directory."
+msgstr "Ãðåøêà ïðè ñâúðçâàíå êúì çàäàäåíàòà äèðåêòîðèÿ"
+
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "Íåâúçìîæíîñò çà òúðñåíå â äèðåêòîðèÿ: %s"
+
+msgid "Failed to search the specified directory."
+msgstr "Ãðåøêà ïðè òúðñåíå â çàäàäåíàòà ïàïêà."
+
+msgid "Fax"
+msgstr "Ôàêñ"
+
+msgid "Find"
+msgstr "Òúðñè"
+
+msgid "From"
+msgstr "Îò"
+
+msgid "Group"
+msgstr "Ãðóïà"
+
+msgid "Help"
+msgstr "Ïîìîù"
+
+msgid "Home Address"
+msgstr "Äîìàøåí àäðåñ"
+
+msgid "Home Phone"
+msgstr "Äîìàøåí òåëåôîí"
+
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr "Ïðè èìïîðò íà CSV äàííè: ïúðâèÿ ëè ðåä ñúäúðæà èìåíàòà íà ïîëåòàòà?"
+
+msgid "Illegal or malformed form data."
+msgstr "Íåäîïóñòèìè èëè ïîâðåäåíè äàííè."
+
+msgid "Import Address Book"
+msgstr "Èìïîðò íà àäðåñíà êíèãà"
+
+msgid "Import/Export"
+msgstr "Èìïîðò/Åêñïîðò"
+
+msgid "Import/Export Address books"
+msgstr "Èìïîðò/Åêñïîðò íà àäðåñíè êíèãè"
+
+msgid "Invalid address book."
+msgstr "Íåâàëèäíà àäðåñíà êíèãà."
+
+msgid "Invalid e-mail address."
+msgstr "Íåâàëèäåí e-mail àäðåñ."
+
+msgid "Invalid email."
+msgstr "Íåâàëèäåí email"
+
+msgid "Invalid entry."
+msgstr "Íåâàëèäíè äàííè."
+
+msgid "Invalid name."
+msgstr "Íåâàëèäíî èìå."
+
+msgid "Language"
+msgstr "Åçèê"
+
+msgid "Matching"
+msgstr "Ñúäúðæàùè"
+
+msgid "Mobile Phone"
+msgstr "Ìîáèëåí òåëåôîí"
+
+msgid "More than 1 entry returned."
+msgstr "Áåøå âúðíàò ïîâå÷å îò 1 ðåä."
+
+msgid "Mulberry Address Book"
+msgstr "Mulberry àäðåñíà êíèãà"
+
+msgid "Mulberry address book sucessfully imported"
+msgstr "Mulberry àäðåñíà êíèãà áåøå èìïîðòèðàíà óñïåøíî"
+
+msgid "My Addressbook"
+msgstr "Ìîÿòà àäðåñíà êíèãà"
+
+msgid "Name"
+msgstr "Èìå"
+
+msgid "Netcenter Member Directory"
+msgstr "Netcenter Member Directory"
+
+msgid "New List"
+msgstr "Íîâ ñïèñúê"
+
+#, c-format
+msgid "No %s entry found for %s."
+msgstr "Íÿìà %s íàìåðåíè äàííè  çà %s."
+
+msgid "None"
+msgstr "Íÿìà"
+
+msgid ""
+"None of the available address books are configured to allow you to add new "
+"entries to them. If you believe this is an error, please contact your system "
+"administrator."
+msgstr ""
+"Íèêîÿ îò íàëè÷íèòå àäðåñíè êíèãè íå å êîíôèãóðèðàíà äà äîáàâÿòå äàííè êúì "
+"íåÿ. Àêî ñìÿòàòå, ÷å òîâà íå å âÿðíî, ìîëÿ êîíñóëòèðàéòå ñå ñúñ Ñèñòåìíèÿ "
+"Àäìèíèñòðàòîð."
+
+msgid "Notes"
+msgstr "Áåëåæêè"
+
+msgid "Options"
+msgstr "Îïöèè"
+
+msgid "Outlook"
+msgstr "Outlook"
+
+msgid "PGP Public Key"
+msgstr "PGP Ïóáëè÷åí êëþ÷"
+
+msgid "Pine Address Book"
+msgstr "Pine Àäðåñíà êíèãà"
+
+msgid "Pine address book sucessfully imported"
+msgstr "Pine àäðåñíà êíèãà áåøå èìïîðòèðàíà óñïåøíî"
+
+msgid "Please choose an address book to add a contact to."
+msgstr "Ìîëÿ, èçáåðåòå êúì êîÿ àäðåñíà êíèãà äà äîáàâèòå êîíòàêò."
+
+msgid "Please select a directory:"
+msgstr "Ìîëÿ, èçáåðåòå äèðåêòîðèÿ:"
+
+msgid "Private Address Book"
+msgstr "×àñòíà Àäðåñíà êíèãà"
+
+msgid "Remove from this list"
+msgstr "Ïðåìàõâàíå îò òîçè ñïèñúê."
+
+msgid "Search"
+msgstr "Òúðñè"
+
+msgid "Search Results"
+msgstr "Ðåçóëòàòè îò òúðñåíåòî"
+
+msgid "Search&nbsp;Results"
+msgstr "Ðåçóëòàòè&nbsp;îò&nbsp;òúðñåíåòî"
+
+msgid "Select"
+msgstr "Èçáåðè"
+
+msgid "Select Address Book"
+msgstr "Èçáåðè àäðåñíà êíèãà"
+
+msgid "Select List"
+msgstr "Èçáåðè ñïèñúê"
+
+msgid "Select the destination to import to:"
+msgstr "Èçáåðåòå êúäå äà ñå èçâúðøè èìïîðòà:"
+
+msgid "Select the file to import:"
+msgstr "Èçáåðåòå ôàéë çà èìïîðò:"
+
+msgid "Select the format to export to:"
+msgstr "Èçáåðåòå ôîðìàò, êúì êîéòî äà ñå åêñïîðòèðà:"
+
+msgid "Select the format to import from:"
+msgstr "Èçáåðåòå ôîðìàò, îò êîéòî äà ñå èìïîðòèðà:"
+
+msgid "Select the source to export from:"
+msgstr "Èçáåðåòå èçòî÷íèê çà åêñïîðò:"
+
+msgid "Select view to display by default."
+msgstr "Èçáåðåòå èçãëåä ïî ïîäðàçáèðàíå."
+
+msgid "Select which fields to display in the address lists."
+msgstr "Èçáåðåòå êîè ïîëåòà äà ñà ïîêàçàíè â ñïèñúêà ñ àäðåñè."
+
+msgid "Select your preferred language:"
+msgstr "Èçáåðåòå ïðåäïî÷èòàíèÿò îò Âàñ åçèê:"
+
+msgid "Selected Columns:"
+msgstr "Èçáåðåòå êîëîíè:"
+
+#, c-format
+msgid "Send mail to %s"
+msgstr "Èçïðàòè ïèñìî äî %s"
+
+msgid "Set your preferred display language."
+msgstr "Èçáåðåòå ïðåäïî÷èòàíèÿò îò Âàñ åçèê çà äèñïëåÿ."
+
+msgid "Shared Directory"
+msgstr "Ñïîäåëåíà Äèðåêòîðèÿ"
+
+msgid "Show All"
+msgstr "Ïîêàæè âñè÷êè"
+
+msgid "Show Contacts"
+msgstr "Ïîêàæè êîíòàêòèòå"
+
+msgid "Show Lists"
+msgstr "Ïîêàæè ñïèñúöèòå"
+
+msgid "Some of Turba's configuration files are missing:"
+msgstr "Íÿêîè îò êîíôèãóðàöèîííèòå ôàéëîâå íà Turba ëèïñâàò:"
+
+msgid "Sort Direction"
+msgstr "Ñîðòèðàíå"
+
+msgid "Tab separated values"
+msgstr "Tab (òàáóëàöèÿ) ðàçäåëåíè ñòîéíîñòè"
+
+msgid "The data got lost."
+msgstr "Äàííèòå áÿõà çàãóáåíè."
+
+msgid "The data was lost"
+msgstr "Äàííèòå áÿõà çàãóáåíè"
+
+msgid "The file contained no data."
+msgstr "Ôàéëúò íå ñúäúðæà äàííè."
+
+msgid "The object you requested does not exist."
+msgstr "Îáåêòà, êîéòî èçèñêâàòå íå ñúùåñòâóâà."
+
+msgid "There are no browseable address books."
+msgstr "Íÿìà àäðåñíè êíèãè çà ïðåãëåæäàíå."
+
+msgid "There are no writeable address books."
+msgstr "Íÿìà àäðåñíè êíèãè, â êîèòî ìîæåòå äà ïèøåòå."
+
+msgid ""
+"There was a problem with the file upload. The file may have been larger than "
+"the maximum allowed size."
+msgstr ""
+"Ãðåøêà ïðè èçïðàùàíåòî íà ôàéëà. Âúçìîæíî å ôàéëúò äà å ïî-ãîëÿì îò "
+"ìàêñèìàëíî äîïóñòèìèÿò ðàçìåð."
+
+msgid ""
+"There was an error adding this object. Contact your system administrator for "
+"further help."
+msgstr ""
+"Ãðåøêà ïðè äîáàâÿíåòî íà òîçè îáåêò. Êîíñóëòèðàéòå ñå ñúñ Ñèñòåìíèÿ "
+"Àäìèíèñòðàòîð."
+
+msgid "There was an error creating a new list."
+msgstr "Ãðåøêà ïðè ñúçäàâàíå íà íîâ ñïèñúê."
+
+msgid "There was an error deleting this object."
+msgstr "Ãðåøêà ïðè èçòðèâàíåòî íà òîçè îáåêò."
+
+msgid ""
+"There was an error deleting this object. Contact your system administrator "
+"for further help."
+msgstr ""
+"Ãðåøêà ïðè èçòðèâàíåòî íà òîçè îáåêò. Êîíñóëòèðàéòå ñå ñúñ Ñèñòåìíèÿ "
+"Àäìèíèñòðàòîð."
+
+msgid "There was an error displaying the select List"
+msgstr "Ãðåøêà ïðè ïîêàçâàíåòî íà èçáðàíèÿ ñïèñúê"
+
+msgid "There was an error importing the data."
+msgstr "Ãðåøêà ïðè èìïîðò íà äàííèòå."
+
+#, c-format
+msgid "There was an error importing the data: %s."
+msgstr "Ãðåøêà ïðè èìïîðòèðàíå íà äàííèòå: %s."
+
+msgid "There was an error importing the uploaded file"
+msgstr "Ãðåøêà ïðè èìïîðòèðàíå íà èçïðàòåíèÿ ôàéë"
+
+msgid "There was an error importing the vCard data."
+msgstr "Ãðåøêà ïðè èìïîðò íà vCard äàííè."
+
+msgid "There was an error removing this object."
+msgstr "Ãðåøêà ïðè ïðåìåñòâàíå íà îáåêòà."
+
+msgid ""
+"This file controls the default preferences for Turba, and also controls "
+"which preferences users can alter."
+msgstr ""
+"Òîçè ôàéë ñúäúðæà íàñòðîéêèòå ïî ïîäðàçáèðàíå íà Turba è êîíòðîëèðà êîè îò "
+"òÿõ ïîòðåáèòåëÿò ìîæå äà ïðîìåíÿ."
+
+msgid ""
+"This file controls the stylesheet that is used to set colors and fonts in "
+"addition to or overriding Horde defaults."
+msgstr ""
+"Òîçè ôàéë êîíòðîëèðà ñòèëîâåòå, êîéòî ñå èçïîëçâàò çà öâåòîâåòå è øðèôòîâåòå "
+"â äîïúëíåíèå êúì ïîäðàçáèðàùèòå ñòèëîâå íà Horde."
+
+msgid ""
+"This file defines the Turba global attribute names and types - names, email "
+"addresses, etc."
+msgstr ""
+"Òîçè ôàéë çàäàâà ãëîáàëíèòå ñòîéíîñòè çà èìåíà è òèïîâe - èìåíà, email "
+"àäðåñè è ò.í."
+
+msgid "This file defines the list of available sources for Turba."
+msgstr "Òîçè ôàéë çàäàâà ñïèñúêà ñ íàëè÷íèòå ñîðñîâå çà Turba."
+
+msgid ""
+"This is the main Turba configuration file. It contains paths and options for "
+"the Turba scripts."
+msgstr ""
+"Òîâà å ãëàâíèÿ êîíôèãóðàöèîíåí ôàéë íà Turba. Òîé ñúäúðæà ïúòèùà è îïöèè çà "
+"ñêðèïòîâåòå íà Turba."
+
+#, c-format
+msgid "This person already has a %s entry in the address book."
+msgstr "Òîçè ÷îâåê âå÷å ñúùåñòâóâà êàòî %s âúâ àäðåñíàòà êíèãà."
+
+msgid "This person is already in your address book."
+msgstr "Òîçè ÷îâåê âå÷å ñúùåñòâóâà âúâ Âàøàòà àäðåñíà êíèãà."
+
+msgid "Title"
+msgstr "Äëúæíîñò"
+
+msgid "Turba is not properly configured"
+msgstr "Turba íå å êîíôèãóðèðàíà êîðåêòíî"
+
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "Ãðåøêà ïðè çàðåæäàíå íà äåôèíèöèèòå íà %s."
+
+msgid "Unnamed Contact"
+msgstr "Áåçèìåíåí êîíòàêò"
+
+msgid "User Options"
+msgstr "Ïîòðåáèòåëñêè îïöèè"
+
+msgid "Verisign Directory"
+msgstr "Verisign Directory"
+
+msgid "View map"
+msgstr "Âèæ êàðòà"
+
+msgid "View to display by default:"
+msgstr "Èçãëåä, êîèòî äà áúäå ïîêàçàí ïî ïîäðàçáèðàíå:"
+
+msgid "Work Address"
+msgstr "Áèçíåñ àäðåñ"
+
+msgid "Work Phone"
+msgstr "Áèçíåñ òåëåôîí"
+
+msgid ""
+"You didn't map any fields from the imported file to the corresponding fields "
+"in Turba."
+msgstr ""
+"Âèå íå ñúïîñòàâèõòå íèêàêâè ïîëåòà îò èìïîðòèðàíèÿ ôàéë êúì ñúîòâåòíèòå "
+"ïîëåòà â Turba."
+
+msgid "Your Information"
+msgstr "Èíôîðìàöèÿ çà Âàñ"
+
+msgid "[Edit]"
+msgstr "[Ðåäàêöèÿ]"
+
+msgid "add column"
+msgstr "äîáàâè êîëîíà"
+
+msgid "move left"
+msgstr "ïðåìåñòè íà ëÿâî"
+
+msgid "move right"
+msgstr "ïðåìåñòè íà äÿñíî"
+
+msgid "remove column"
+msgstr "ïðåìàõíè êîëîíà"
+
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/ca_ES.po b/turba/po/ca_ES.po
new file mode 100644 (file)
index 0000000..3533615
--- /dev/null
@@ -0,0 +1,1357 @@
+# Turba Catalan translation.
+# Copyright 2004-2009 The Horde Project
+# This file is distributed under the same license as the Turba package.
+# Jordi Giralt <projecte.k2@upcnet.es>, 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.0.4\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2006-05-11 12:51+0200\n"
+"PO-Revision-Date: 2006-08-09 10:18+0100\n"
+"Last-Translator: Jordi Giralt <projecte.k2@upcnet.es>\n"
+"Language-Team: Catalan <dev@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Afegir una Llibreta d'adreces IMSP "
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Suprimir una llibreta d'adreces IMSP"
+
+#: data.php:325
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" ja existeix i no s'ha importat.  "
+
+#: browse.php:140
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" no ha estat copiat perquè és una llista."
+
+#: browse.php:138
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" no ha estat mogut perquè és una llista"
+
+#: config/prefs.php.dist:137
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Nom Cognom\" (p. e. Joan Garcia)"
+
+#: config/prefs.php.dist:136
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Cognom, Nom\" (p. e. Garcia, Joan)"
+
+#: add.php:109
+#, php-format
+msgid "%s added."
+msgstr "%s afegit"
+
+#: data.php:343
+#, php-format
+msgid "%s file successfully imported"
+msgstr "L'arxiu %s ha estat importat correctament"
+
+#: templates/browse/footer.inc:5
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s a %s de %s"
+
+#: lib/Turba.php:458
+#, fuzzy, php-format
+msgid "%s's Address Book"
+msgstr "Llibreta d'adreces - %s"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "És necessari un navegador que accepti iFrames "
+
+#: config/prefs.php.dist:160
+msgid "Above search form"
+msgstr "El formulari de cerca anterior"
+
+#: view.php:52
+#, php-format
+msgid "Access denied to %s"
+msgstr "Accés denegat a %s."
+
+#: add.php:56 templates/browse/actions.inc:29
+msgid "Add"
+msgstr "Nou contacte"
+
+#: templates/prefs/addressbookselect.inc:174
+msgid "Add address book"
+msgstr "Afegix Llibreta d'adreces"
+
+#: config/prefs.php.dist:48
+msgid "Add and Delete IMSP address books"
+msgstr "Afegir i eliminar llibretes d'adreces IMSP"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Afegeix columna"
+
+#: edit.php:135
+#, fuzzy
+msgid "Add file"
+msgstr "Afegeix fitxer"
+
+#: templates/browse/actions.inc:29
+msgid "Add to"
+msgstr "Afegeix a"
+
+#: lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "No es pot afegir contactes."
+
+#: templates/addressbooks.inc:87
+#, fuzzy
+msgid "Address Book"
+msgstr "Llibreta d'adreces"
+
+#: browse.php:28 config/prefs.php.dist:125
+msgid "Address Book Listing"
+msgstr "Llista de la llibreta d'adreces"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Llibretes d'adreces"
+
+#: add.php:108
+msgid "Address book entry"
+msgstr "Entrada a la llibreta d'adreces"
+
+#: data.php:305
+msgid "Address book successfully purged."
+msgstr "S'ha buidat correctament la llibreta d'adreces. "
+
+#: templates/addressbooks.inc:63
+msgid "Address book to delete "
+msgstr "Llibreta d'adreces a eliminar "
+
+#: templates/prefs/addressbookselect.inc:170
+msgid "Address books that will not be displayed:"
+msgstr "Llibretes d'adreces que no es mostraran: "
+
+#: search.php:88 templates/browse/search.inc:38
+msgid "Advanced Search"
+msgstr "Cerca avançada"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "Àlies"
+
+#: templates/browse/footerAlpha.inc:7 templates/browse/footerAlpha.inc:10
+#: templates/browse/actions.inc:48
+msgid "All"
+msgstr "Tot"
+
+#: lib/api.php:576
+msgid "Already Exists"
+msgstr "Encara existeix"
+
+#: templates/browse/javascript.inc:93
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Està segur que desitja eliminar %s? "
+
+#: templates/browse/javascript.inc:67
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "Està segur que desitja eliminar les entrades seleccionades?"
+
+#: config/prefs.php.dist:96
+msgid "Ascending"
+msgstr "Ascendent"
+
+#: search.php:85 templates/browse/search.inc:37
+msgid "Basic Search"
+msgstr "Cerca simple"
+
+#: config/prefs.php.dist:159
+msgid "Below search form"
+msgstr "El formulari de cerca de més avall"
+
+#: lib/Driver/ldap.php:77 lib/Driver/ldap.php:80
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "És impossible efectuar el vincle: (%s) %s"
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "Aniversari"
+
+#: templates/menu.inc:7
+#, fuzzy
+msgid "Browse"
+msgstr "Navega"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr "Categoria Business"
+
+#: data.php:49
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:57
+msgid "Can't add a group to itself."
+msgstr "No es pot afegir un grup a si mateix.  "
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Verificar tots/cap"
+
+#: templates/addressbooks.inc:45
+msgid "Choose a name"
+msgstr "Trii un nom "
+
+#: add.php:48
+msgid "Choose an address book"
+msgstr "Trii una llibreta d'adreces. "
+
+#: templates/prefs/columnselect.inc:221
+msgid "Choose an address book:"
+msgstr "Trii una llibreta d'adreces"
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "Trii quines llibretes d'adreces mostrar i en quin ordre:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Seleccioneu la llibreta d'adreces que vulgueu utilitzar. "
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose which columns to display and in what order:"
+msgstr "Trii quines columnes mostrar i en quin ordre: "
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Opcions de la columna"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Columnes que no es mostraran: "
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Valors separats per comes"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Valors separats per comes (Microsoft Outlook)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "Empresa"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "Adreça de l'empresa"
+
+#: lib/api.php:320 lib/api.php:365 lib/api.php:409 lib/api.php:515
+#: lib/api.php:641 lib/api.php:728 lib/api.php:781 lib/api.php:862
+#: lib/api.php:1059 lib/api.php:1147
+#, php-format
+msgid "Connection failed: %s"
+msgstr "És impossible establir una connexió: %s"
+
+#: lib/Driver/ldap.php:58
+msgid "Connection failure"
+msgstr "Error de connexi"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Cerca de contactes "
+
+#: browse.php:306
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Contactes de la llista: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Còpia"
+
+#: templates/addressbooks.inc:54
+#, fuzzy
+msgid "Create"
+msgstr "Crea"
+
+#: templates/addressbooks.inc:41
+#, fuzzy
+msgid "Create Address Book"
+msgstr "Crea una nova llibreta d'adreces"
+
+#: lib/ListView.php:348
+msgid "Create a new Contact List in:"
+msgstr "Crear una nova Llista en: "
+
+#: lib/ObjectView.php:133
+msgid "Created"
+msgstr "Creat"
+
+#: config/prefs.php.dist:98
+msgid "Default sorting direction:"
+msgstr "Direcció d'ordenació per defecte"
+
+#: templates/addressbooks.inc:77 templates/browse/actions.inc:3
+#: lib/Object.php:328 lib/Renderer.php:47 lib/Renderer.php:50
+msgid "Delete"
+msgstr "Eliminar"
+
+#: templates/addressbooks.inc:59
+msgid "Delete Address Book"
+msgstr "Elimina llibreta d'adreces"
+
+#: config/prefs.php.dist:38
+msgid "Delete Confirmation"
+msgstr "Opcions d'eliminació"
+
+#: config/prefs.php.dist:39
+msgid "Delete button behaviour"
+msgstr "Comportament del botó d'eliminar"
+
+#: lib/Driver/ldap.php:270
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "No és possible eliminar: (%s) %s"
+
+#: lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "No es pot eliminar contactes."
+
+#: delete.php:38
+msgid "Deletion failed"
+msgstr "No és possible fer la elimació"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "Departament"
+
+#: config/prefs.php.dist:97
+msgid "Descending"
+msgstr "Descendent"
+
+#: templates/addressbooks.inc:116
+msgid "Description"
+msgstr "Descripció"
+
+#: templates/browse/search.inc:119
+msgid "Directory"
+msgstr "Directori"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Visualització per defecte"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Opcions de visualització"
+
+#: config/prefs.php.dist:177
+msgid "Do you want to confirm deleting entries?"
+msgstr "Desitja confirmar l'esborrat de les entrades? "
+
+#: lib/Object.php:297
+msgid "Download"
+msgstr "Descarregar "
+
+#: templates/browse/row.inc:17 templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Descarregar la vCard"
+
+#: templates/addressbooks.inc:103 templates/browse/row.inc:25
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+#: templates/browse/contactrow.inc:33 lib/Renderer.php:42
+msgid "Edit"
+msgstr "Edita"
+
+#: templates/browse/row.inc:25 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Edita \"%s\""
+
+#: templates/addressbooks.inc:82
+msgid "Edit Address Books"
+msgstr "Modificar Llibretes d'adreces "
+
+#: edit.php:85 edit.php:161
+#, php-format
+msgid "Edit entry for %s"
+msgstr "Modificar l'entrada per a %s "
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "Correu electrònic"
+
+#: edit.php:154
+#, php-format
+msgid "Entry for %s updated, but saving the uploaded file failed: %s"
+msgstr ""
+"S'ha actualitzat l'entrada de %s, però no s'ha pogut guardar l'arxiu "
+"carregat: %s "
+
+#: edit.php:156 edit.php:159
+#, php-format
+msgid "Entry for %s updated."
+msgstr "L'entrada per a %s està actualitzada"
+
+#: browse.php:216 browse.php:264
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "S'ha produït un error a l'afegir %d contacte(s) a la llista. "
+
+#: browse.php:218 browse.php:266
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr ""
+"S'ha produït un error a l'afegir %d de %d contacte(s) sol·licitat(s) a la "
+"llista. "
+
+#: browse.php:86
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "S'ha produït un error a l'eliminar %d contacte(s). "
+
+#: browse.php:88
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr ""
+"Es va produir un error a l'eliminar %d de %d contacte(s) sol·licitat(s). "
+
+#: browse.php:66
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "S'ha produït un error a l'eliminar %d contacte(s) de la llista. "
+
+#: browse.php:68
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr ""
+"S'ha produït un error a l'eliminar %d de %d contacte(s) sol·licitat(s) de la "
+"llista. "
+
+#: lib/api.php:415
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "S'ha produït un error buscant en la llibreta d'adreces: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:41
+msgid "Export"
+msgstr "Exporta"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Exporta la llibreta d'adreces"
+
+#: templates/data/export.inc:21
+msgid "Export only the selected contacts."
+msgstr "Exporta només els contactes seleccionats"
+
+#: templates/data/export.inc:27
+msgid "Export the following address book completely."
+msgstr "Exporta tota la llibreta d'adreces següent"
+
+#: data.php:134 data.php:228 data.php:297 browse.php:35 browse.php:103
+#: browse.php:130 add.php:67 search.php:37
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "És impossible accedir a la libreta d'adreces: %s."
+
+#: browse.php:158
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "És impossible afegir %s a %s: %s"
+
+#: browse.php:312
+msgid "Failed to browse list"
+msgstr "És impossible examinar la llista"
+
+#: browse.php:350
+msgid "Failed to browse the directory"
+msgstr "És impossible examinar el directori"
+
+#: lib/Driver/ldap.php:309
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"És impossible canviar el nom: (%s) %s; DN antic = %s, DN nou = %s, arrel = %s"
+
+#: browse.php:134
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "És impossible trobar l'objecte que s'ha d'afegir: %s"
+
+#: search.php:79
+msgid "Failed to search the address book"
+msgstr "No es pot buscar en la llibreta d'adreces "
+
+#: data.php:149
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "És impossible cercar al directori: %s"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "Fax"
+
+#: edit.php:131 display.php:99
+#, fuzzy
+msgid "Files"
+msgstr "Fitxers"
+
+#: templates/browse/search.inc:71
+msgid "Find"
+msgstr "Cerca"
+
+#: edit.php:104 edit.php:194
+#, fuzzy
+msgid "Finish"
+msgstr "Acabar"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "Nom de pila"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr "URL Disponibilitat (freebusy)"
+
+#: templates/browse/search.inc:84
+msgid "From"
+msgstr "De"
+
+#: config/sources.php.dist:611
+msgid "Global Address Book"
+msgstr "Llibreta d'adreces global"
+
+#: templates/browse/row.inc:43 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Grup"
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "Adreça personal"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "Ciutat natal"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "País natal"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "Telèfon particular"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "Codi postal"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "Província/estat natal"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "Adreça personal"
+
+#: config/sources.php.dist:513
+msgid "IMSP"
+msgstr ""
+
+#: config/prefs.php.dist:47
+msgid "IMSP Address Book Administration"
+msgstr "Administració de llibreta d'adreces IMSP "
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importar llibreta d'adreces. Pas %d. "
+
+#: data.php:361
+msgid "Import/Export Address Books"
+msgstr "Importar/Exportar les llibretes d'adreces"
+
+#: lib/api.php:636 lib/api.php:723
+msgid "Invalid ID"
+msgstr "La identificació no és vàlida."
+
+#: lib/api.php:232 lib/api.php:404 lib/api.php:447 lib/api.php:481
+#: lib/api.php:510 lib/api.php:632 lib/api.php:719 lib/api.php:771
+#: lib/api.php:1130
+msgid "Invalid address book"
+msgstr "La llibreta d'adreces no és vàlida."
+
+#: lib/api.php:1134 lib/api.php:1208 lib/api.php:1261
+msgid "Invalid email"
+msgstr "L'adreça electrònica no és vàlida."
+
+#: lib/api.php:1142
+msgid "Invalid entry"
+msgstr "L'entrada no és vàlida."
+
+#: lib/Driver/ldap.php:266
+msgid "Invalid key specified."
+msgstr "La clau especificada no és vàlida."
+
+#: lib/api.php:1138
+msgid "Invalid name"
+msgstr "El nom no és vàlid."
+
+#: lib/api.php:775
+msgid "Invalid objectId"
+msgstr "El ID de l'objecte no és vàlid."
+
+#: lib/Driver/ldap.php:30
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"És necessari el LDAP, però el mòdul LDAP no està disponible o no està "
+"carregat."
+
+#: lib/ObjectView.php:138
+msgid "Last Modified"
+msgstr "Darrera modificació"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Cognom"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Llitat"
+
+#: templates/browse/search.inc:78
+msgid "Matching"
+msgstr "Que coincideixi amb"
+
+#: lib/api.php:207
+msgid "Maximum Number of Contacts"
+msgstr "Nombre màxim de Contactes "
+
+#: config/prefs.php.dist:107
+msgid "Maximum number of pages"
+msgstr "Nombre màxim de pàgines"
+
+#: lib/Block/tree_menu.php:3
+#, fuzzy
+msgid "Menu List"
+msgstr "Llista de menú"
+
+#: lib/Driver/ldap.php:302
+msgid "Missing DN in LDAP source configuration."
+msgstr "Falta el DN a la configuració de la font del LDAP"
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "Telèfon mòbil"
+
+#: lib/Driver/ldap.php:331 lib/Driver/ldap.php:347
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "És impossible modificar: (%s) %s"
+
+#: lib/api.php:1247
+msgid "More than 1 entry found"
+msgstr "S'ha trobat més d'una entrada."
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Mou"
+
+#: templates/prefs/columnselect.inc:247
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Desplaça a l'esquerra"
+
+#: templates/prefs/columnselect.inc:249
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Desplaça a la dreta"
+
+#: data.php:52 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Llibreta d'adreces de Mulberry"
+
+#: lib/api.php:1166
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Diverses persones amb l'adreça [%s], però encara no n'hi ha cap amb el nom [%"
+"s]"
+
+#: config/sources.php.dist:112 config/sources.php.dist:248
+msgid "My Address Book"
+msgstr "La meva llibreta d'adreces"
+
+#: addressbooks.php:119
+msgid "My Address Books"
+msgstr "La meva llibreta d'adreces"
+
+#: templates/addressbooks.inc:108 config/attributes.php.dist:42
+msgid "Name"
+msgstr "Nom"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Format del nom"
+
+#: config/sources.php.dist:320
+msgid "Netcenter Member Directory"
+msgstr "Directori dels membres de Netcenter"
+
+#: add.php:36 add.php:124 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Nou contacte"
+
+#: edit.php:95 edit.php:102 edit.php:209 templates/data/import.inc:45
+msgid "Next"
+msgstr "Següent"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "Sobrenom"
+
+#: lib/api.php:1249 lib/api.php:1298
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "No s'ha trobat cap entrada %s de %s."
+
+#: lib/api.php:1217
+msgid "No address books found."
+msgstr "No s'ha trobat cap llibreta d'adreces."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "No s'ha trobat cap contacte"
+
+#: lib/api.php:535 lib/api.php:806
+msgid "No vCard data was found."
+msgstr "No s'ha trobat cap dada en format vCard."
+
+#: templates/browse/footer.inc:7
+msgid "None"
+msgstr "Cap"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "Notes"
+
+#: config/prefs.php.dist:115
+msgid "Number of items per page"
+msgstr "Nombre d'ítems per pàgina"
+
+#: lib/api.php:654 lib/api.php:787
+msgid "Object not found"
+msgstr "Objecte no trobat"
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr "Office"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Una vegada guardi aquesta pàgina d'opcions, la llibreta d'adreces "
+"s'esborrarà definitivament. Si no és el que desitja, hauria de canviar la "
+"selecció a \"Cap\". "
+
+#: lib/api.php:814
+msgid "Only one vcard supported."
+msgstr "Només es suporta el format vcard."
+
+#: config/prefs.php.dist:37 config/prefs.php.dist:46
+msgid "Other Options"
+msgstr "Altres opcions"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr "Clau pública PGP"
+
+#: lib/api.php:519 lib/api.php:645 lib/api.php:732 lib/api.php:987
+#: lib/api.php:1151
+msgid "Permission Denied"
+msgstr "Permís denegat"
+
+#: lib/Driver.php:551
+msgid "Permission denied"
+msgstr "Permís denegat"
+
+#: templates/addressbooks.inc:100
+#, fuzzy
+msgid "Permissions"
+msgstr "Permisos"
+
+#: data.php:53 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Llibreta d'adreces de Pine"
+
+#: templates/browse/javascript.inc:28
+msgid "Please name the new contact list:"
+msgstr "Introdueixi el nom de la nova llista:"
+
+#: edit.php:98 edit.php:101 edit.php:201
+msgid "Previous"
+msgstr "Previ"
+
+#: config/sources.php.dist:421
+msgid "Private Address Book"
+msgstr "Llibreta d'adreces privada"
+
+#: lib/Driver/ldap.php:147
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "És impossible fer la consulta: (%s) %s"
+
+#: templates/block/minisearch.inc:15
+msgid "Quick Search"
+msgstr "Cerca ràpida"
+
+#: lib/Driver/ldap.php:191 lib/Driver/ldap.php:199 lib/Driver/ldap.php:428
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "És impossible fer la lectura: (%s) %s"
+
+#: lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "No es poden llegir els contactes."
+
+#: lib/Renderer.php:49
+msgid "Really delete this contact?"
+msgstr "Eliminar realment aquest contacte? "
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr "Registres visualitzats"
+
+#: templates/prefs/addressbookselect.inc:176
+msgid "Remove address book"
+msgstr "Eliminar llibreta d'adreces "
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Suprimir columna"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Suprimir d'aquesta llista"
+
+#: templates/data/import.inc:21
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Substituir la llibreta existent per la importada? <strong> Advertiment: Ésto "
+"eliminarà totes les entrades de la seva llibreta d'adreces actual. </strong>"
+
+#: lib/Driver.php:439
+msgid "Requested object not found."
+msgstr "No s'ha trobat l'objecte sol·licitat"
+
+#: add.php:37 templates/browse/search.inc:114
+msgid "Reset to Defaults"
+msgstr "Restaura els valors predeterminats"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr "Certificat S/MIME públic"
+
+#: lib/Driver/ldap.php:69
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "Ha fallat STARTTLS: (%s) %s"
+
+#: edit.php:106 add.php:37 templates/addressbooks.inc:125
+msgid "Save"
+msgstr "Desa"
+
+#: lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "No es poden guardar els contactes. "
+
+#: templates/browse/search.inc:97 templates/browse/search.inc:113
+#: templates/block/minisearch.inc:18 lib/Block/tree_menu.php:49
+#: config/prefs.php.dist:126
+msgid "Search"
+msgstr "Cerca"
+
+#: lib/api.php:1064
+msgid "Search failed"
+msgstr "Hi ha hagut un error en la cerca"
+
+#: lib/api.php:1156 lib/api.php:1162 lib/api.php:1171 lib/api.php:1184
+#, php-format
+msgid "Search failed: %s"
+msgstr "Hi ha hagut un error en la cerca: %s"
+
+#: lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "No es pot realitzar cerques. "
+
+#: templates/block/minisearch.inc:19
+msgid "Searching..."
+msgstr "Cercant..."
+
+#: templates/addressbooks.inc:67
+msgid "Select an address book to delete"
+msgstr "Seleccioni una llibreta d'adreces a eliminar "
+
+#: templates/addressbooks.inc:91
+msgid "Select an address book to edit"
+msgstr "Seleccioni una llibreta d'adreces a modificar"
+
+#: templates/data/export.inc:32
+msgid "Select the address book to export from:"
+msgstr "Seleccioni la llibreta d'adreces a exportar: "
+
+#: templates/data/import.inc:26
+msgid "Select the address book to import to:"
+msgstr "Seleccioni la llibreta d'adreces a la qual importar: "
+
+#: templates/data/import.inc:35
+msgid "Select the charset of the source file:"
+msgstr "Seleccioni el joc de caràcters de l'arxiu origen:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Seleccioni el format d'exportació: "
+
+#: templates/data/import.inc:43
+msgid "Select the file to import:"
+msgstr "Seleccioni l'arxiu a importar:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Seleccioni el format de l'arxiu origen: "
+
+#: config/prefs.php.dist:135
+msgid "Select the format used to display names:"
+msgstr "Seleccioni el format usat per a mostrar els noms: "
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Seleccioneu la visualització que es mostra per defecte. "
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Seleccioneu quins camps voleu visualitzar en el llistat d'adreces."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Seleccioneu el format per mostrar els noms. "
+
+#: add.php:54
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Llibreta d'adreces seleccionada \"%s\". "
+
+#: config/sources.php.dist:178
+msgid "Shared Directory"
+msgstr "Directori compartit"
+
+#: templates/browse/actions.inc:46
+#, php-format
+msgid "Show %s"
+msgstr "Mostra %s"
+
+#: templates/browse/actions.inc:48
+msgid "Show All"
+msgstr "Mostra tots"
+
+#: templates/browse/actions.inc:47
+msgid "Show Contacts"
+msgstr "Mostra contactes"
+
+#: templates/browse/actions.inc:46
+msgid "Show Lists"
+msgstr "Mostra llistes"
+
+#: templates/browse/column_headers.inc:21
+#: templates/browse/column_headers.inc:36
+msgid "Sort Direction"
+msgstr "Ordre de classificació"
+
+#: lib/api.php:200
+msgid "Sources"
+msgstr "Fonts"
+
+#: config/prefs.php.dist:158
+msgid "Specify where you want advanced search results to appear."
+msgstr "Indiqui on desitja que apareguin els resultats de la cerca avançada.  "
+
+#: browse.php:214 browse.php:262
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "S'ha(n) afegit correctament %d contacte(s) a la llista. "
+
+#: browse.php:160
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s s'ha afegit correctament a %s"
+
+#: browse.php:248
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "S'ha creat correctament la llesta \"%s\"."
+
+#: browse.php:84
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "S'ha(n) eliminat correctament %d contacte(s). "
+
+#: browse.php:64
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "S'ha(n) eliminat correctament %d contacte(s) de la llista."
+
+#: data.php:50
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Valors separats per tabuladors"
+
+#: view.php:15
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "Cal configurar el motor VFS per a permetre la càrrega d'adjunts. "
+
+#: lib/Driver.php:1077
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "La llibreta d'adreces \"%s\" no existeix. "
+
+#: addressbooks.php:48
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "S'ha creat correctament la llibreta d'adreces \"%s\"."
+
+#: addressbooks.php:71
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "S'ha eliminat correctament la llibreta d'adreces \"%s\". "
+
+#: addressbooks.php:89
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "S'ha modificat correctament la llibreta d'adreces \"%s\". "
+
+#: data.php:303
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "No s'ha pogut buidar la llibreta d'adreces: %s"
+
+#: edit.php:51 vcard.php:22 display.php:23 view.php:26
+msgid "The contact you requested does not exist."
+msgstr "El contacte sol·licitat no existeix. "
+
+#: edit.php:123
+#, php-format
+msgid "The file \"%s\" has successfully been deleted."
+msgstr "S'ha eliminat correctament el fitxer \"%s\". "
+
+#: data.php:284
+msgid "The import can be finished despite the warnings."
+msgstr "Es pot completar la importació a pesar dels avisos. "
+
+#: browse.php:31
+msgid "There are no browseable address books."
+msgstr "No hi ha llibretes d'adreces que es puguin examinar."
+
+#: add.php:29
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"No hi ha llibretes d'adreces en què es pugui escriure. Cap de les llibretes "
+"d'adreces disponibles no està configurada perquè hi pugueu afegir noves "
+"entrades. Si considereu que això és un error, contacteu amb l'administrador "
+"de sistemes."
+
+#: add.php:121
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"S'ha produït un error a l'afegir el contacte. Contacti a l'administrador de "
+"sistemes per a més informació. "
+
+#: browse.php:271
+msgid "There was an error creating a new list."
+msgstr "Hi ha hagut un error en crear una nova llista."
+
+#: addressbooks.php:38
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "S'ha produït un error al crear aquesta llibreta d'adreces: %s "
+
+#: browse.php:166
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr ""
+"S'ha produït un error a l'eliminar \"%s\" de la llibreta d'adreces origen. "
+
+#: delete.php:37
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Hi ha hagut un error en eliminar aquest contacte: %s."
+
+#: browse.php:318
+msgid "There was an error displaying the list"
+msgstr "S'ha produït un error al mostrar la llista "
+
+#: data.php:335
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Hi ha hagut un error en importar les dades: %s."
+
+#: lib/api.php:531 lib/api.php:801
+msgid "There was an error importing the iCalendar data."
+msgstr "Hi ha hagut un error en importar les dades iCalendar."
+
+#: addressbooks.php:58 addressbooks.php:63 addressbooks.php:69
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "S'ha produït un error a l'eliminar aquesta llibreta d'adreces: %s "
+
+#: addressbooks.php:87
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "S'ha produït un error a l'actualitzar aquesta llibreta d'adreces: %s "
+
+#: edit.php:165
+#, php-format
+msgid "There was an error updating this entry: %s"
+msgstr "Hi ha hagut un error en actualitzar aquesta entrada: %s."
+
+#: data.php:179
+msgid "There were no addresses to export."
+msgstr "No hi havia adreces per exportar."
+
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Aquestes llibretes es mostraran en aquest ordre: "
+
+#: templates/prefs/columnselect.inc:243
+msgid "These columns will display in this order:"
+msgstr "Aquestes columnes es mostraran en aquest ordre"
+
+#: data.php:269
+msgid "This file format is not supported."
+msgstr "No és possible utilitzar aquest format d'arxiu"
+
+#: lib/api.php:1175 lib/api.php:1188
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Aquesta persona ja té una entrada %s en la llibreta d'adreces."
+
+#: config/prefs.php.dist:148
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Aquesta serà la llibreta per omissió a l'afegir o importar contactes. "
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "Títol"
+
+#: lib/Turba.php:443
+#, php-format
+msgid "Unable to create new share. Missing source type."
+msgstr "No es pot crear un nou \"share\". Falta el tipus d'origen. "
+
+#: lib/Driver.php:1001
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "No s'ha pogut carregar la definició de %s."
+
+#: edit.php:95 edit.php:98 edit.php:101 edit.php:106 edit.php:203
+msgid "Undo Changes"
+msgstr "Desfer els canvis"
+
+#: lib/api.php:564 lib/api.php:683 lib/api.php:819
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Tipus de contingut no suportat: %s "
+
+#: config/sources.php.dist:381
+msgid "Verisign Directory"
+msgstr "Directori Verisign"
+
+#: templates/browse/row.inc:19 templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Veure \"%s\""
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Veure contacte"
+
+#: config/prefs.php.dist:124
+msgid "View to display by default:"
+msgstr "Vista que es mostra per defecte:"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr "URL del web"
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "Adreça de la feina"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "Ciutat de la feina"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "País de la feina"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "Telèfon de la feina"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "Codi postal de la feina"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "Província/estat de la feina"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "Adreça de la feina"
+
+#: data.php:237 browse.php:106 browse.php:227 add.php:73
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "No disposa de permisos per a crear més de %d contactes en \"%s\". "
+
+#: edit.php:73 display.php:52 view.php:36
+msgid "You do not have permission to view this contact."
+msgstr "No està autoritzat a visualitzar aquest contacte."
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr "No està autoritzat a visualitzar aquest objecte."
+
+#: lib/Turba.php:531
+msgid "You do not have permissions to delete this source."
+msgstr "No disposa de privilegis per a eliminar aquest origen."
+
+#: templates/browse/javascript.inc:55
+msgid "You must select a target address book."
+msgstr "Ha de seleccionar una llibreta d'adreces de destinació."
+
+#: templates/browse/javascript.inc:23
+msgid "You must select a target list."
+msgstr "Ha de seleccionar una llista de destinació."
+
+#: edit.php:32
+msgid "You must select at least one contact first."
+msgstr "Primer ha de seleccionar almenys un contacte. "
+
+#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:49
+#: templates/browse/javascript.inc:72
+msgid "You must select at least one entry first."
+msgstr "Primer ha de seleccionar com a mínim una entrada."
+
+#: edit.php:77
+msgid "You only have permission to view this contact."
+msgstr "Només està autoritzat a visualitzar aquest contacte."
+
+#: browse.php:325
+msgid "Your default address book is not browseable."
+msgstr "La llibreta per omissió no es pot fullejar. "
+
+#: templates/browse/row.inc:6 templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[sense valor]"
+
+#: lib/Turba.php:554
+msgid "_Browse"
+msgstr "_Examina"
+
+#: templates/browse/actions.inc:47
+msgid "_Contacts"
+msgstr "_Contactes"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Elimina"
+
+#: lib/Turba.php:563
+msgid "_Import/Export"
+msgstr "Importa/Exporta"
+
+#: templates/browse/actions.inc:46
+#, fuzzy
+msgid "_Lists"
+msgstr "_Llistes"
+
+#: lib/Turba.php:551
+msgid "_My Address Books"
+msgstr "_Les meves llibretes d'adreces"
+
+#: lib/Turba.php:557
+msgid "_New Contact"
+msgstr "_Nou contacte"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Elimina d'aquesta llista"
+
+#: lib/Turba.php:559
+msgid "_Search"
+msgstr "Cerca"
+
+#: vcard.php:46
+msgid "contact.vcf"
+msgstr "contacte.vcf"
+
+#: data.php:199 data.php:204 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contactes.csv"
+
+#: data.php:209
+msgid "contacts.tsv"
+msgstr "contactes.tsv"
+
+#: data.php:219
+msgid "contacts.vcf"
+msgstr "contactes.vcf"
+
+#: config/prefs.php.dist:138
+msgid "no formatting"
+msgstr "Sense format"
+
+#: templates/prefs/imsp_opt.inc:32
+#, fuzzy
+msgid "none"
+msgstr "cap"
+
+#: templates/browse/actions.inc:31
+msgid "to a Contact List"
+msgstr "una llista"
+
+#: templates/browse/actions.inc:21
+msgid "to a different Address Book"
+msgstr "a una llibreta d'adreces diferent"
+
+#: data.php:51 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/cs_CZ.po b/turba/po/cs_CZ.po
new file mode 100644 (file)
index 0000000..93288e4
--- /dev/null
@@ -0,0 +1,1329 @@
+# translation of turba.po to Cestina
+# Turba Czech Translation.
+# Copyright 2004-2009 The Horde Project
+# This file is distributed under the same license as the Horde package.
+# Pavel Chytil <pavel@chytil.tk>, 2001-2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: turba\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2007-03-30 18:15+0200\n"
+"PO-Revision-Date: 2007-04-05 11:35+0200\n"
+"Last-Translator: Jan Krivanek <honza@atack.cz>\n"
+"Language-Team: Cestina <cs@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms:  nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Pøidat IMSP Adresáø"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Smazat IMSP Adresáø"
+
+#: data.php:333
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" ji¾ existuje a nebyl naimportován."
+
+#: browse.php:140
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" nebyl zkopírován, proto¾e je to seznam."
+
+#: browse.php:138
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" nebyl pøesunut, proto¾e je to seznam."
+
+#: config/prefs.php.dist:137
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Jméno pøíjmení\" (napø. Josef Novák)"
+
+#: config/prefs.php.dist:136
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Pøíjmení, jméno\" (napø. Novák, Josef) "
+
+#: add.php:112
+#, php-format
+msgid "%s added."
+msgstr "%s pøidán."
+
+#: data.php:357
+#, php-format
+msgid "%s file successfully imported"
+msgstr "%s soubor byl úspì¹nì importován"
+
+#: templates/browse/footer.inc:5
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s a¾ %s z %s"
+
+#: lib/Turba.php:458
+#, php-format
+msgid "%s's Address Book"
+msgstr "Adresáø %s"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Je nutné pou¾ít prohlí¾eè podporující iFrames."
+
+#: config/prefs.php.dist:160
+msgid "Above search form"
+msgstr "Vý¹e uvedený formuláø pro vyhledávání"
+
+#: view.php:52
+#, php-format
+msgid "Access denied to %s"
+msgstr "Do %s byl pøístup zamítnut"
+
+#: add.php:56 templates/browse/actions.inc:29
+msgid "Add"
+msgstr "Pøidat"
+
+#: templates/prefs/addressbookselect.inc:174
+msgid "Add address book"
+msgstr "Pøidat Adresáø"
+
+#: config/prefs.php.dist:48
+msgid "Add and Delete IMSP address books"
+msgstr "Pøidat a smazat IMSP adresáøe"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Pøidat sloupec"
+
+#: edit.php:135
+msgid "Add file"
+msgstr "Pøidat soubor"
+
+#: templates/browse/actions.inc:29
+msgid "Add to"
+msgstr "Pøidat do"
+
+#: lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Pøidávání kontaktù není k dispozici."
+
+#: templates/addressbooks.inc:93
+msgid "Address Book"
+msgstr "Adresáø"
+
+#: browse.php:28 config/prefs.php.dist:125
+msgid "Address Book Listing"
+msgstr "Výpis adresáøe"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Adresáøe"
+
+#: add.php:111
+msgid "Address book entry"
+msgstr "Polo¾ka adresáøe"
+
+#: data.php:313
+msgid "Address book successfully purged."
+msgstr "Adresáø byl úspì¹nì vyèistìný."
+
+#: templates/addressbooks.inc:69
+msgid "Address book to delete "
+msgstr "Adresáø ke smazání "
+
+#: templates/prefs/addressbookselect.inc:170
+msgid "Address books that will not be displayed:"
+msgstr "Adresáøe, které nebudou zobrazeny:"
+
+#: search.php:88 templates/browse/search.inc:38
+msgid "Advanced Search"
+msgstr "Pokroèilé vyhledávání"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/browse/footerAlpha.inc:7 templates/browse/footerAlpha.inc:10
+#: templates/browse/actions.inc:48
+msgid "All"
+msgstr "V¹e"
+
+#: lib/api.php:607
+msgid "Already Exists"
+msgstr "Ji¾ existuje"
+
+#: templates/browse/javascript.inc:93
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Jste si jistí, ¾e chcete smazat %s?"
+
+#: templates/browse/javascript.inc:67
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "Jste si jistí, ¾e chcete smazat vybrané polo¾ky?"
+
+#: config/prefs.php.dist:96
+msgid "Ascending"
+msgstr "Vzestupnì"
+
+#: search.php:85 templates/browse/search.inc:37
+msgid "Basic Search"
+msgstr "Vyhledat"
+
+#: config/prefs.php.dist:159
+msgid "Below search form"
+msgstr "Pod formuláøem pro vyhledávání"
+
+#: lib/Driver/ldap.php:77 lib/Driver/ldap.php:80
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Spojení selhalo: (%s) %s"
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "Narozeniny"
+
+#: templates/menu.inc:7
+msgid "Browse"
+msgstr "Prohlí¾et"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr "Obchodní kategorie"
+
+#: data.php:49
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:57
+msgid "Can't add a group to itself."
+msgstr "Nelze pøidat skupinu sama sobì."
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Vybrat _v¹e/¾ádné"
+
+#: templates/addressbooks.inc:51
+msgid "Choose a name"
+msgstr "Zvolte název"
+
+#: add.php:48
+msgid "Choose an address book"
+msgstr "Vyberte adresáø"
+
+#: templates/prefs/columnselect.inc:221
+msgid "Choose an address book:"
+msgstr "Zvolte Adresáø:"
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "Zvolte adresáøe k zobrazení a jejich poøadí:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Vyberte adresáø, který chcete pou¾ívat."
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose which columns to display and in what order:"
+msgstr "Vyberte sloupce k zobrazení a jejich poøadí:"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Mo¾nosti sloupce"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Sloupce, které nebudou zobrazeny:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Èárkou oddìlené hodnoty"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Èárkou oddìlené hodnoty (Microsoft Outlook)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "Firma"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "Adresa firmy"
+
+#: lib/api.php:319 lib/api.php:364 lib/api.php:414 lib/api.php:546
+#: lib/api.php:660 lib/api.php:747 lib/api.php:805 lib/api.php:886
+#: lib/api.php:1086 lib/api.php:1175
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Spojení selhalo: %s"
+
+#: lib/Driver/ldap.php:58
+msgid "Connection failure"
+msgstr "Spojení selhalo"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Vyhledat kontakt"
+
+#: browse.php:306
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Kontakty v seznamu: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopírovat"
+
+#: templates/addressbooks.inc:60
+msgid "Create"
+msgstr "Vytvoøit"
+
+#: templates/addressbooks.inc:47
+msgid "Create Address Book"
+msgstr "Vytvoøit Adresáø"
+
+#: lib/ListView.php:348
+msgid "Create a new Contact List in:"
+msgstr "Vytvoøit nový seznam kontaktù v:"
+
+#: lib/ObjectView.php:133
+msgid "Created"
+msgstr "Vytvoøeno"
+
+#: config/prefs.php.dist:98
+msgid "Default sorting direction:"
+msgstr "Implicitní smìr tøídìní:"
+
+#: lib/Renderer.php:47 lib/Renderer.php:50 lib/Object.php:328
+#: templates/addressbooks.inc:83 templates/browse/actions.inc:3
+msgid "Delete"
+msgstr "Smazat"
+
+#: templates/addressbooks.inc:65
+msgid "Delete Address Book"
+msgstr "Smazat Adresáø"
+
+#: config/prefs.php.dist:38
+msgid "Delete Confirmation"
+msgstr "Potvrzení smazání"
+
+#: config/prefs.php.dist:39
+msgid "Delete button behaviour"
+msgstr "Vlastnosti tlaèítka pro smazání"
+
+#: lib/Driver/ldap.php:270
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Smazaní selhalo: (%s) %s"
+
+#: lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Mazání kontaktù není k dispozici."
+
+#: delete.php:38
+msgid "Deletion failed"
+msgstr "Smazaní selhalo"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "Oddìlìní"
+
+#: config/prefs.php.dist:97
+msgid "Descending"
+msgstr "Sestupnì"
+
+#: templates/addressbooks.inc:122
+msgid "Description"
+msgstr "Popis"
+
+#: templates/browse/search.inc:119
+msgid "Directory"
+msgstr "Adresáø"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Zobrazit"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Zobrazit mo¾nosti"
+
+#: config/prefs.php.dist:177
+msgid "Do you want to confirm deleting entries?"
+msgstr "Chcete potvrdit smazání polo¾ek?"
+
+#: lib/Object.php:297
+msgid "Download"
+msgstr "Stáhnout"
+
+#: templates/browse/row.inc:17 templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Stahnout vCard"
+
+#: lib/Renderer.php:42 templates/addressbooks.inc:109
+#: templates/browse/row.inc:25 templates/browse/column_headers.inc:10
+#: templates/browse/contactrow.inc:33 templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "Upravit"
+
+#: templates/browse/row.inc:25 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Upravit \"%s\""
+
+#: templates/addressbooks.inc:88
+msgid "Edit Address Books"
+msgstr "Upravit Adresáøe"
+
+#: edit.php:85 edit.php:161
+#, php-format
+msgid "Edit entry for %s"
+msgstr "Upravit polo¾ku pro %s"
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "Email"
+
+#: edit.php:154
+#, php-format
+msgid "Entry for %s updated, but saving the uploaded file failed: %s"
+msgstr ""
+"Polo¾ka pro  %s byla zaktualizována, ale selhalo ulo¾ení poslaného soubory: %"
+"s"
+
+#: edit.php:156 edit.php:159
+#, php-format
+msgid "Entry for %s updated."
+msgstr "Polo¾ky pro %s byly aktualizovány."
+
+#: browse.php:216 browse.php:264
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Chyba pøi pøidávání %d kontaktu(ù) do seznamu."
+
+#: browse.php:218 browse.php:266
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Chyba pøi pøidávání %d z %d po¾adovaných kontaktù do seznamu."
+
+#: browse.php:86
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Chyba pøi mazání %d kontaktu(ù)."
+
+#: browse.php:88
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Chyba pøi odstraòování %d z po¾adovaných %d kontaktù."
+
+#: browse.php:66
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Chyba pøi odstraòování %d kontakt(ù) ze seznamu."
+
+#: browse.php:68
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Chyba pøi odstraòování %d z po¾adovaných %d kontaktù ze seznamu."
+
+#: lib/api.php:420
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Chyba pøi hledání v Adresáøi: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:41
+msgid "Export"
+msgstr "Exportovat"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Exportovat adresáø"
+
+#: templates/data/export.inc:21
+msgid "Export only the selected contacts."
+msgstr "Exportovat pouze vybrané kontakty."
+
+#: templates/data/export.inc:27
+msgid "Export the following address book completely."
+msgstr "Kompletnì exportovat následující adresáø."
+
+#: data.php:134 data.php:228 data.php:302 browse.php:35 browse.php:103
+#: browse.php:130 search.php:37 add.php:67
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Nelze pøistoupit k adresáøi: %s"
+
+#: browse.php:158
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Selhalo pøidání %s do %s: %s"
+
+#: browse.php:312
+msgid "Failed to browse list"
+msgstr "Nelze prohlédnout seznam"
+
+#: browse.php:350
+msgid "Failed to browse the directory"
+msgstr "Nelze prohlédnout adresáø"
+
+#: lib/Driver/ldap.php:303
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr "Selhala zmìna jména: (%s) %s; staré DN = %s, nové DN = %s, Root = %s"
+
+#: browse.php:134
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Nelze nalézt objekt k pøidání: %s"
+
+#: search.php:79
+msgid "Failed to search the address book"
+msgstr "Hledání v adresáøi je nedostupné"
+
+#: data.php:149
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Nelze prohledat kontakty: %s"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "Fax"
+
+#: edit.php:131 display.php:99
+msgid "Files"
+msgstr "Soubory"
+
+#: templates/browse/search.inc:71
+msgid "Find"
+msgstr "Hledat"
+
+#: edit.php:104 edit.php:195
+msgid "Finish"
+msgstr "Konec"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "Jméno"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr "Free/Busy URL"
+
+#: templates/browse/search.inc:84
+msgid "From"
+msgstr "Od"
+
+#: config/sources.php.dist:589
+msgid "Global Address Book"
+msgstr "Globální adresáø"
+
+#: templates/browse/row.inc:43 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Skupina"
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "Adresa domù"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "Mìsto adresy domù"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "Zemì adresy domù"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "Telefon domù"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "PSÈ domù"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "Stát/provincie adresy domù"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "Ulice adresy domù"
+
+#: config/sources.php.dist:491
+msgid "IMSP"
+msgstr "IMSP"
+
+#: config/prefs.php.dist:47
+msgid "IMSP Address Book Administration"
+msgstr "Správa IMSP Adresáøe"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importovat adresáø, krok %d"
+
+#: data.php:375
+msgid "Import/Export Address Books"
+msgstr "Importovat/exportovat adresáøe"
+
+#: lib/api.php:655 lib/api.php:742
+msgid "Invalid ID"
+msgstr "Neplatné ID"
+
+#: lib/api.php:231 lib/api.php:1158
+msgid "Invalid address book"
+msgstr "Neplatný adresáø"
+
+#: lib/api.php:409 lib/api.php:541 lib/api.php:651 lib/api.php:738
+#: lib/api.php:795
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Neplatný Adresáø: %s"
+
+#: lib/api.php:1162 lib/api.php:1236 lib/api.php:1292
+msgid "Invalid email"
+msgstr "Neplatný email"
+
+#: lib/api.php:1170
+msgid "Invalid entry"
+msgstr "Neplatná polo¾ka"
+
+#: lib/Driver/ldap.php:266
+msgid "Invalid key specified."
+msgstr "Byl poskytnut neplatný klíè."
+
+#: lib/api.php:1166
+msgid "Invalid name"
+msgstr "Neplatné jméno"
+
+#: lib/api.php:799
+msgid "Invalid objectId"
+msgstr "Neplatné ID objektu"
+
+#: lib/Driver/ldap.php:30
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr "Je vy¾adován LDAP, ale tento modul není dostupný nebo instalovaný."
+
+#: lib/ObjectView.php:138
+msgid "Last Modified"
+msgstr "Naposledy zmìnìno"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Pøíjmení"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Seznam"
+
+#: templates/browse/search.inc:78
+msgid "Matching"
+msgstr "Shodující se s"
+
+#: lib/api.php:206
+msgid "Maximum Number of Contacts"
+msgstr "Maximální poèet kontaktù"
+
+#: config/prefs.php.dist:107
+msgid "Maximum number of pages"
+msgstr "Maximální poèet stránek"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Seznam nabídky"
+
+#: lib/Driver/ldap.php:296
+msgid "Missing DN in LDAP source configuration."
+msgstr "Chybìjící DN u konfigurace zdroje LDAP."
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "Mobilní telefon"
+
+#: lib/Driver/ldap.php:325 lib/Driver/ldap.php:341
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Selhala úprava: (%s) %s"
+
+#: lib/api.php:1277
+msgid "More than 1 entry found"
+msgstr "Byla nalezena více ne¾ 1 polo¾ka"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Pøesunout"
+
+#: templates/prefs/addressbookselect.inc:184
+#: templates/prefs/columnselect.inc:247
+msgid "Move left"
+msgstr "Pøesunout vlevo"
+
+#: templates/prefs/addressbookselect.inc:186
+#: templates/prefs/columnselect.inc:249
+msgid "Move right"
+msgstr "Pøesunout vpravo"
+
+#: data.php:52 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry adresáø"
+
+#: lib/api.php:1194
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "Více osob s adresou [%s], ale se jménem [%s] neexistuje nikdo"
+
+#: config/sources.php.dist:114
+msgid "My Address Book"
+msgstr "Mùj Adresáø"
+
+#: addressbooks.php:119
+msgid "My Address Books"
+msgstr "Mé Adresáøe"
+
+#: templates/addressbooks.inc:114 config/attributes.php.dist:42
+msgid "Name"
+msgstr "Jméno"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Formát jména"
+
+#: add.php:36 add.php:127 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Nový kontakt"
+
+#: edit.php:95 edit.php:102 edit.php:210 templates/data/import.inc:45
+msgid "Next"
+msgstr "Dal¹í"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "Pøezdívka/alias"
+
+#: lib/api.php:1280 lib/api.php:1329
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "®ádná polo¾ka %s nebyla nalezena pro %s"
+
+#: lib/api.php:1245
+msgid "No address books found."
+msgstr "Nebyl nalezen ¾ádný adresáø."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Nebyly nalezeny ¾ádné kontakty."
+
+#: lib/api.php:566 lib/api.php:830
+msgid "No vCard data was found."
+msgstr "Nebyly nalezeny ¾ádná vCard data."
+
+#: templates/browse/footer.inc:7
+msgid "None"
+msgstr "®ádný"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "Poznámka"
+
+#: config/prefs.php.dist:115
+msgid "Number of items per page"
+msgstr "Poèet polo¾ek na stránku"
+
+#: lib/api.php:671 lib/api.php:811
+msgid "Object not found"
+msgstr "Objekt nebyl nalezen"
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr "Kanceláø"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Po ulo¾ení tohoto nastavení bude Adresáø nenávratnì odstranìn. Jestli¾e si "
+"to nepøejete, musíte zmìnit Va¹i volbu na \"®ádný\"."
+
+#: lib/api.php:838
+msgid "Only one vcard supported."
+msgstr "Je podporávána jen jedna vCard."
+
+#: config/prefs.php.dist:37 config/prefs.php.dist:46
+msgid "Other Options"
+msgstr "Dal¹í mo¾nosti"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr "Veøejný PGP klíè"
+
+#: lib/api.php:550 lib/api.php:664 lib/api.php:751 lib/api.php:1014
+#: lib/api.php:1179
+msgid "Permission Denied"
+msgstr "Nepovolený pøístup"
+
+#: lib/Driver.php:554
+msgid "Permission denied"
+msgstr "Nepovolený pøístup"
+
+#: templates/addressbooks.inc:106
+msgid "Permissions"
+msgstr "Oprávnìní"
+
+#: data.php:53 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine adresáø"
+
+#: templates/browse/javascript.inc:28
+msgid "Please name the new contact list:"
+msgstr "Zadejte jméno nového seznamu kontaktù:"
+
+#: edit.php:98 edit.php:101 edit.php:202
+msgid "Previous"
+msgstr "Pøedchozí"
+
+#: lib/Driver/ldap.php:147
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Vyhledávání selhalo: (%s) %s"
+
+#: templates/block/minisearch.inc:15
+msgid "Quick Search"
+msgstr "Rychlé vyhledávání"
+
+#: lib/Driver/ldap.php:191 lib/Driver/ldap.php:199 lib/Driver/ldap.php:435
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Ètení selhalo: (%s) %s"
+
+#: lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "Ètení kontaktù není dostupné."
+
+#: lib/Renderer.php:49
+msgid "Really delete this contact?"
+msgstr "Skuteènì odstranit tento kontakt?"
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr "Zobrazené záznamy:"
+
+#: templates/prefs/addressbookselect.inc:176
+msgid "Remove address book"
+msgstr "Odstranit Adresáø"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Odstranit sloupec"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Odstranit ze seznamu"
+
+#: templates/data/import.inc:21
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Nahratit existující adresáø importovaným? <strong>Upozornìní: Tato operace "
+"sma¾e v¹echny dosavadní polo¾ky v adresáøi.</strong>"
+
+#: lib/Driver.php:442
+msgid "Requested object not found."
+msgstr "Po¾adovaný objekt nebyl nalezen."
+
+#: add.php:37 templates/browse/search.inc:114
+msgid "Reset to Defaults"
+msgstr "Nastavit výchozí implicitní hodnoty"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME veøejný certifikát"
+
+#: lib/Driver/ldap.php:69
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS selhalo: (%s) %s"
+
+#: edit.php:106 add.php:37 templates/addressbooks.inc:131
+msgid "Save"
+msgstr "Ulo¾it"
+
+#: lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Ukládání kontaktù není dostupné."
+
+#: lib/Block/tree_menu.php:49 templates/browse/search.inc:97
+#: templates/browse/search.inc:113 templates/block/minisearch.inc:18
+#: config/prefs.php.dist:126
+msgid "Search"
+msgstr "Hledat"
+
+#: lib/api.php:1091
+msgid "Search failed"
+msgstr "Hledání selhalo"
+
+#: lib/api.php:1184 lib/api.php:1190 lib/api.php:1199 lib/api.php:1212
+#, php-format
+msgid "Search failed: %s"
+msgstr "Hledání selhalo: %s"
+
+#: lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Hledání není dostupné."
+
+#: templates/block/minisearch.inc:19
+msgid "Searching..."
+msgstr "Vyhledávám..."
+
+#: templates/addressbooks.inc:73
+msgid "Select an address book to delete"
+msgstr "Vyberte Adresáø k odstranìní"
+
+#: templates/addressbooks.inc:97
+msgid "Select an address book to edit"
+msgstr "Vyberte Adresáø k úpravì"
+
+#: templates/data/export.inc:32
+msgid "Select the address book to export from:"
+msgstr "Vyberte adresáø, ze kterého budete exportovat:"
+
+#: templates/data/import.inc:26
+msgid "Select the address book to import to:"
+msgstr "Vyberte adresáø, do kterého se bude importovat:"
+
+#: templates/data/import.inc:35
+msgid "Select the charset of the source file:"
+msgstr "Vyberte znakovou sadu zdrojového souboru:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Veberte formát exportu:"
+
+#: templates/data/import.inc:43
+msgid "Select the file to import:"
+msgstr "Vyberte soubor k importování:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Vyberte formát zdrojového souboru:"
+
+#: config/prefs.php.dist:135
+msgid "Select the format used to display names:"
+msgstr "Vyberte formát zobrazení jmen:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Zvolte implicitní zobrazení, mo¾nosti tøídìní a mo¾nosti stránkování."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Volba polí, která mají být zobrazena v seznamu adres."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Volba formátu zobrazení jmen."
+
+#: add.php:54
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Zvolený Adresáø \"%s\"."
+
+#: templates/browse/actions.inc:46
+#, php-format
+msgid "Show %s"
+msgstr "Zobrazit %s"
+
+#: templates/browse/actions.inc:48
+msgid "Show All"
+msgstr "Zobrazit v¹e"
+
+#: templates/browse/actions.inc:47
+msgid "Show Contacts"
+msgstr "Zobrazit kontakty"
+
+#: templates/browse/actions.inc:46
+msgid "Show Lists"
+msgstr "Zobrazit seznamy"
+
+#: templates/browse/column_headers.inc:21
+#: templates/browse/column_headers.inc:36
+msgid "Sort Direction"
+msgstr "Smìr tøídìní"
+
+#: lib/api.php:199
+msgid "Sources"
+msgstr "Zdroje"
+
+#: config/prefs.php.dist:158
+msgid "Specify where you want advanced search results to appear."
+msgstr "Urèete kam si pøejete zobrazit výsledky pokroèilého vyhledávání."
+
+#: browse.php:214 browse.php:262
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Do seznamu bylo úspì¹nì pøidáno %d kontakt(ù)."
+
+#: browse.php:160
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Úspì¹nì pøidáno %s do %s"
+
+#: browse.php:248
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Seznam kontaktù \"%s\" byl úspì¹nì vytvoøen."
+
+#: browse.php:84
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d kontakt(ù) bylo úspì¹nì odstranìno."
+
+#: browse.php:64
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d kontakt(ù) bylo úspì¹nì odstranìno ze seznamu."
+
+#: data.php:50
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Tab oddìlené hodnoty"
+
+#: data.php:304
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Soubor %s neobsahoval ¾ádné kontakty."
+
+#: view.php:15
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "Pro odesílání pøíloh musí být nastaven VSF systém."
+
+#: lib/Driver.php:1157
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Adresáø \"%s\" neexistuje."
+
+#: addressbooks.php:48
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "Adresáø \"%s\" byl úspì¹nì zalo¾en."
+
+#: addressbooks.php:71
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Adresáø \"%s\" byl úspì¹nì odstranìn."
+
+#: addressbooks.php:89
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "Adresáø \"%s\" byl úspì¹nì aktualizován."
+
+#: data.php:311
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Nelze vyèistit adresáø: %s"
+
+#: edit.php:51 view.php:26 display.php:23 vcard.php:22
+msgid "The contact you requested does not exist."
+msgstr "Po¾adovaný kontakt neexistuje."
+
+#: edit.php:123
+#, php-format
+msgid "The file \"%s\" has successfully been deleted."
+msgstr "\"%s\" soubor byl úspì¹nì smazán."
+
+#: data.php:284
+msgid "The import can be finished despite the warnings."
+msgstr "Import mù¾e být dokonèen navzdory upozornìním."
+
+#: browse.php:31
+msgid "There are no browseable address books."
+msgstr "Nejsou dostupné ¾adné adresáøe k prohlí¾ení."
+
+#: add.php:29
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Nejsou zde ¾ádné adresáøe s mo¾ností zápisu. ®ádné adresáøe nejsou "
+"nakonfigurovány pro zápis nových polo¾ek. Pokud si myslíte, ¾e je to chyba, "
+"prosím kontaktujte svého systémového administrátora."
+
+#: add.php:124
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Nastala chyba pøi vkládání nového kontaktu. Kontaktujte Va¹eho systémového "
+"administrátora."
+
+#: browse.php:271
+msgid "There was an error creating a new list."
+msgstr "Nastala chyba pøi vytváøení nového seznamu."
+
+#: addressbooks.php:38
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Nastala chyba pøi vytváøení tohoto Adresáøe: %s"
+
+#: browse.php:166
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Nastala chyba pøi mazání \"%s\" ze zdrojového adresáøe."
+
+#: delete.php:37
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Nastala chyba pøi mazání tohoto kontaktu: %s"
+
+#: browse.php:318
+msgid "There was an error displaying the list"
+msgstr "Nastala chyba pøi zobrazování seznamu"
+
+#: data.php:343
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Nastala chyba pøi importování dat: %s"
+
+#: lib/api.php:562 lib/api.php:825
+msgid "There was an error importing the iCalendar data."
+msgstr "Pøi importování iCalendar dat do¹lo k chybì."
+
+#: addressbooks.php:58 addressbooks.php:63 addressbooks.php:69
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Nastala chyba pøi odstraòování tohoto Adresáøe: %s"
+
+#: addressbooks.php:87
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Nastala chyba pøi aktualizaci tohoto Adresáøe: %s"
+
+#: edit.php:165
+#, php-format
+msgid "There was an error updating this entry: %s"
+msgstr "Nastala chyba pøi aktualizaci této polo¾ky: %s"
+
+#: data.php:179
+msgid "There were no addresses to export."
+msgstr "®ádné kontakty pro exportování."
+
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Tyto Adresáøe se zobrazí v tomto poøadí:"
+
+#: templates/prefs/columnselect.inc:243
+msgid "These columns will display in this order:"
+msgstr "Tyto sloupeèky se zobrazí v tomto poøadí:"
+
+#: data.php:269
+msgid "This file format is not supported."
+msgstr "Tento formát souboru nelze pou¾ít."
+
+#: lib/api.php:1203 lib/api.php:1216
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Tato osoba se ji¾ nachází ve Va¹em adresáøi jako %s."
+
+#: config/prefs.php.dist:148
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Toto bude implicitní Adresáø pro pøidávání nebo importování kontaktù."
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "Titul"
+
+#: lib/Turba.php:443
+#, php-format
+msgid "Unable to create new share. Missing source type."
+msgstr "Nelze vytvoøit novou sdílenou slo¾ku. Chybí typ zdroje."
+
+#: lib/Driver.php:1081
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Nelze dosáhnout definici %s."
+
+#: edit.php:95 edit.php:98 edit.php:101 edit.php:106 edit.php:204
+msgid "Undo Changes"
+msgstr "Storno zmìn"
+
+#: lib/api.php:595 lib/api.php:696 lib/api.php:843
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Nepodporovaný typ obsahu (Content-Type): %s"
+
+#: templates/browse/row.inc:19 templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Zobrazit \"%s\""
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Zobrazit kontakt"
+
+#: config/prefs.php.dist:124
+msgid "View to display by default:"
+msgstr "Implicitní zobrazení:"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr "URL www stránky"
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "Adresa do zamìstnání"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "Mìsto adresy do zamìstnání"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "Zemì adresy do zamìstnání"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "Telefon do zamìstnání"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "PSÈ do zamìstnání"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "Stát/provincie adresy do zamìstnání"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "Ulice adresy do zamìstnání"
+
+#: data.php:237 browse.php:106 browse.php:227 add.php:73
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Nejste oprávnìn vytvoøit více ne¾ %d kontaktù v \"%s\"."
+
+#: edit.php:73 view.php:36 display.php:52
+msgid "You do not have permission to view this contact."
+msgstr "Nedostateèná práva pro prohlí¾ení tohoto kontaktu."
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr "Nedostateèná práva pro prohlí¾ení tohoto objektu."
+
+#: lib/Turba.php:534
+msgid "You do not have permissions to delete this source."
+msgstr "Nedostateèná práva pro smazání tohoto zdroje."
+
+#: templates/browse/javascript.inc:55
+msgid "You must select a target address book."
+msgstr "Musíte nejdøíve vybrat cílový adresáø."
+
+#: templates/browse/javascript.inc:23
+msgid "You must select a target list."
+msgstr "Musíte nejdøíve vybrat cílový seznam."
+
+#: edit.php:32
+msgid "You must select at least one contact first."
+msgstr "Musíte nejdøíve vybrat alespoò jeden kontakt."
+
+#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:49
+#: templates/browse/javascript.inc:72
+msgid "You must select at least one entry first."
+msgstr "Musíte nejdøíve vybrat alespoò jednu polo¾ku."
+
+#: edit.php:77
+msgid "You only have permission to view this contact."
+msgstr "Va¹e práva dovolují pouze prohlí¾ení tohoto kontaktu."
+
+#: browse.php:325
+msgid "Your default address book is not browseable."
+msgstr "Vá¹ implicitní adresáø nelze procházet."
+
+#: templates/browse/row.inc:6 templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[¾ádná hodnota]"
+
+#: lib/Turba.php:557
+msgid "_Browse"
+msgstr "_Prohlí¾et"
+
+#: templates/browse/actions.inc:47
+msgid "_Contacts"
+msgstr "_Kontakty"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_Smazat"
+
+#: lib/Turba.php:566
+msgid "_Import/Export"
+msgstr "_Importovat/exportovat"
+
+#: templates/browse/actions.inc:46
+msgid "_Lists"
+msgstr "_Seznamy"
+
+#: lib/Turba.php:554
+msgid "_My Address Books"
+msgstr "_Mé Adresáøe"
+
+#: lib/Turba.php:560
+msgid "_New Contact"
+msgstr "_Nový kontakt"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Odstranit z tohoto seznamu"
+
+#: lib/Turba.php:562
+msgid "_Search"
+msgstr "_Vyhledat"
+
+#: vcard.php:46
+msgid "contact.vcf"
+msgstr "kontakty.vcf"
+
+#: data.php:199 data.php:204 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "kontakty.csv"
+
+#: data.php:209
+msgid "contacts.tsv"
+msgstr "kontakty.tsv"
+
+#: data.php:219
+msgid "contacts.vcf"
+msgstr "kontakty.vcf"
+
+#: config/prefs.php.dist:138
+msgid "no formatting"
+msgstr "bez formátování"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "¾ádný"
+
+#: templates/browse/actions.inc:31
+msgid "to a Contact List"
+msgstr "do seznamu kontaktù"
+
+#: templates/browse/actions.inc:21
+msgid "to a different Address Book"
+msgstr "do jiného Adresáøe"
+
+#: data.php:51 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/da_DK.po b/turba/po/da_DK.po
new file mode 100644 (file)
index 0000000..b0cf46c
--- /dev/null
@@ -0,0 +1,1491 @@
+# Danish translations for Turba package
+# Danske oversættelser for pakke Turba.
+# Copyright 2001-2009 The Horde Project
+# This file is distributed under the same license as the Turba package.
+# Martin List-Petersen <martin@list-petersen.dk>, 2001.
+# Brian Truelsen <horde+i18n@briantruelsen.dk>, 2005-2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba H3 (2.2-cvs)\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2006-03-11 12:34+0100\n"
+"PO-Revision-Date: 2006-03-11 12:45+0100\n"
+"Last-Translator: Brian Truelsen <horde+i18n@briantruelsen.dk>\n"
+"Language-Team: i18n@lists.horde.org\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Tilføj et IMSP-adressekartotek"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Slet IMSP-adressekartotek"
+
+#: data.php:334
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" findes allerede og blev ikke importeret."
+
+#: browse.php:140
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" blev ikke kopieret, fordi den er en liste."
+
+#: browse.php:138
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" blev ikke flyttet, fordi den er en liste."
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Fornavn Efternavn\"  (fx Jens Hansen)"
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Efternavn, Fornavn\" (fx Hansen, Jens)"
+
+#: add.php:109
+#, php-format
+msgid "%s added."
+msgstr "%s tilføjet"
+
+#: data.php:352
+#, php-format
+msgid "%s file successfully imported"
+msgstr "%s-fil importeret"
+
+#: templates/browse/footer.inc:5
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s til %s af %s"
+
+#: lib/Turba.php:507
+#, php-format
+msgid "%s's Address Book"
+msgstr "%ss adressekartotek"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "En browser som understøtter <em>iFrames</em> er nødvendig"
+
+#: config/prefs.php.dist:150
+msgid "Above search form"
+msgstr "Ovenstående søgeformular"
+
+#: view.php:52
+#, php-format
+msgid "Access denied to %s"
+msgstr "Adgang nægtet til %s"
+
+#: add.php:56 templates/browse/actions.inc:29
+msgid "Add"
+msgstr "Tilføj"
+
+#: templates/prefs/addressbookselect.inc:174
+msgid "Add address book"
+msgstr "Tilføj adressekartotek"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Tilføj kolonne"
+
+#: edit.php:133 lib/Views/EditContact.php:68
+msgid "Add file"
+msgstr "Tilføj fil"
+
+#: templates/browse/actions.inc:29
+msgid "Add to"
+msgstr "Tilføj til"
+
+#: lib/Driver.php:1137
+msgid "Adding contacts is not available."
+msgstr "Tilføjelse af kontakter er ikke tilgængelig."
+
+#: templates/addressbooks.inc:88
+msgid "Address Book"
+msgstr "Adressekartotek"
+
+#: browse.php:28 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Adressekartoteket-fortegnelse"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Adressekartoteker"
+
+#: add.php:108
+msgid "Address book entry"
+msgstr "Adressekartotekspost"
+
+#: data.php:314
+msgid "Address book successfully purged."
+msgstr "Adressekartotek tømt."
+
+#: templates/addressbooks.inc:64
+msgid "Address book to delete "
+msgstr "Adressekartotek, der skal slettes "
+
+#: templates/prefs/addressbookselect.inc:170
+msgid "Address books that will not be displayed:"
+msgstr "Adressekartoteker, som ikke vil blive vist:"
+
+#: search.php:207 templates/browse/search.inc:48
+msgid "Advanced Search"
+msgstr "Udvidet søgning"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "Kaldenavn"
+
+#: templates/browse/actions.inc:48 templates/browse/footerAlpha.inc:7
+#: templates/browse/footerAlpha.inc:10
+msgid "All"
+msgstr "Alle"
+
+#: lib/api.php:575
+msgid "Already Exists"
+msgstr "Findes allerede"
+
+#: templates/browse/javascript.inc:93
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Er du sikker på, at du vil slette %s?"
+
+#: templates/browse/javascript.inc:67
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "Er du sikker på, at du vil slette de valgte poster?"
+
+#: config/prefs.php.dist:86
+msgid "Ascending"
+msgstr "Stigende"
+
+#: search.php:204 templates/browse/search.inc:47
+msgid "Basic Search"
+msgstr "Simpel søgning"
+
+#: config/prefs.php.dist:149
+msgid "Below search form"
+msgstr "Nedenstående søgeformular"
+
+#: lib/Driver/ldap.php:84 lib/Driver/ldap.php:87
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Tilkobling fejlede: (%s) %s"
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "Fødselsdag"
+
+#: templates/menu.inc:7
+msgid "Browse"
+msgstr "Skim"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr "Firmakategori"
+
+#: data.php:58
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:57
+msgid "Can't add a group to itself."
+msgstr "Kan ikke tilføje en gruppe til sig selv."
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Hak alle/ingen af"
+
+#: templates/addressbooks.inc:45
+msgid "Choose a name"
+msgstr "Vælg et navn"
+
+#: add.php:48
+msgid "Choose an address book"
+msgstr "Vælg et adressekartotek"
+
+#: templates/prefs/columnselect.inc:221
+msgid "Choose an address book:"
+msgstr "Vælg et adressekartotek:"
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "Vælg de adressekartoteker, der skal vises og tilhørende rækkefølge:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Vælg de adressekartoteker, der skal anvendes."
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose which columns to display and in what order:"
+msgstr "Vælg hvilke kolonner, der skal vises og i hvilken rækkefølge:"
+
+#: templates/block/minisearch.inc:26
+msgid "Close"
+msgstr "Luk"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Kolonne-indstillinger"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Kolonner, som ikke vil blive vist:"
+
+#: templates/data/export.inc:12 templates/data/import.inc:13
+msgid "Comma separated values"
+msgstr "Kommaseparerede værdier"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Kommaseparerede værdier (Microsoft Outlook)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "Firma"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "Adresse (arbejde)"
+
+#: lib/api.php:319 lib/api.php:364 lib/api.php:408 lib/api.php:514
+#: lib/api.php:640 lib/api.php:727 lib/api.php:780 lib/api.php:861
+#: lib/api.php:1058 lib/api.php:1146
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Forbindelse fejlede: %s"
+
+#: lib/Driver/ldap.php:65
+msgid "Connection failure"
+msgstr "Forbindelsesfejl"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Kontakt-søgning"
+
+#: browse.php:306
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Kontakter i liste: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopier"
+
+#: lib/VBook.php:284 lib/VBook.php:342
+#, php-format
+msgid "Could not find the virtual address book \"%s\""
+msgstr "Kunne ikke finde det virtuelle adressekartoteket, \"%s\""
+
+#: search.php:97
+#, php-format
+msgid "Could not update the virtual address book \"%s\""
+msgstr "Kunne ikke opdateret det virtuelle adressekartoteket, \"%s\""
+
+#: templates/addressbooks.inc:54
+msgid "Create"
+msgstr "Opret"
+
+#: templates/addressbooks.inc:41
+msgid "Create Address Book"
+msgstr "Opret adressekartotek"
+
+#: lib/ListView.php:381
+msgid "Create a new Contact List in:"
+msgstr "Opret en nyt brevpapir"
+
+#: lib/ObjectView.php:125
+msgid "Created"
+msgstr "Oprettet"
+
+#: contact.php:83
+msgid "De_lete"
+msgstr "Slet"
+
+#: config/prefs.php.dist:88
+msgid "Default sorting direction:"
+msgstr "Standard sorteringsretning:"
+
+#: templates/addressbooks.inc:78 templates/browse/actions.inc:3
+#: templates/browse/header.inc:23 lib/Object.php:329
+#: lib/Views/DeleteContact.php:58
+msgid "Delete"
+msgstr "Slet"
+
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Slet %s"
+
+#: templates/addressbooks.inc:60
+msgid "Delete Address Book"
+msgstr "Slet adressekartotek"
+
+#: config/prefs.php.dist:38
+msgid "Delete Confirmation"
+msgstr "Godkend sletning"
+
+#: config/prefs.php.dist:39
+msgid "Delete button behaviour"
+msgstr "Opførsel af slette-knap"
+
+#: lib/Driver/ldap.php:277
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Sletning mislykkedes: (%s) %s"
+
+#: templates/browse/header.inc:19
+#, php-format
+msgid "Delete virtual address book \"%s\""
+msgstr "Slet virtueltadressekartotek, \"%s\""
+
+#: lib/Driver.php:1145
+msgid "Deleting contacts is not available."
+msgstr "Sletning af kontakter er ikke tilgængelig."
+
+#: delete.php:38
+msgid "Deletion failed"
+msgstr "Sletning mislykkedes"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "Afdeling"
+
+#: config/prefs.php.dist:87
+msgid "Descending"
+msgstr "Faldende"
+
+#: templates/addressbooks.inc:117
+msgid "Description"
+msgstr "Beskrivelse"
+
+#: templates/browse/search.inc:144
+msgid "Directory"
+msgstr "Katalog"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Vis"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Indstillinger for visning"
+
+#: config/prefs.php.dist:167
+msgid "Do you want to confirm deleting entries?"
+msgstr "Vil du godkende sletning af poster?"
+
+#: lib/Object.php:298
+msgid "Download"
+msgstr "Hent"
+
+#: templates/browse/row.inc:17
+msgid "Download vCard"
+msgstr "Hent vCard"
+
+#: templates/addressbooks.inc:104 templates/browse/actions.inc:6
+#: templates/browse/column_headers.inc:10 templates/browse/header.inc:20
+#: templates/browse/row.inc:26
+msgid "Edit"
+msgstr "Rediger"
+
+#: templates/browse/row.inc:26
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Redigér \"%s\""
+
+#: lib/Views/EditContact.php:28
+#, php-format
+msgid "Edit %s"
+msgstr "Ret %s"
+
+#: templates/addressbooks.inc:83
+msgid "Edit Address Books"
+msgstr "Ændre adressekartoteker"
+
+#: templates/browse/header.inc:22
+msgid "Edit Permissions"
+msgstr "Ændre tilladelser"
+
+#: templates/browse/vbook_header.inc:2
+msgid "Edit Virtual Address Book"
+msgstr "Redigér virtuelt adressekartotek"
+
+#: edit.php:84 edit.php:159
+#, php-format
+msgid "Edit entry for %s"
+msgstr "Redigér post for %s"
+
+#: templates/browse/header.inc:18
+#, php-format
+msgid "Edit permissions for virtual address book \"%s\""
+msgstr "Redigér tilladelser for virtuelt adressekartotek, \"%s\""
+
+#: templates/browse/header.inc:17
+#, php-format
+msgid "Edit virtual address book definition of \"%s\""
+msgstr "Redigér definition af virtuelt adressekartotek, \"%s\""
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "E-post"
+
+#: edit.php:152
+#, php-format
+msgid "Entry for %s updated, but saving the uploaded file failed: %s"
+msgstr "Post for %s opdateret, men lagring af overført fil mislykkedes: %s"
+
+#: edit.php:154 edit.php:157
+#, php-format
+msgid "Entry for %s updated."
+msgstr "Registrering for %s opdateret."
+
+#: browse.php:216 browse.php:264
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Fejl under tilføjelse af %d kontakt(er) til liste."
+
+#: browse.php:218 browse.php:266
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Fejl under tilføjelse af %d ud af %d anmodede kontakter til liste."
+
+#: browse.php:86
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Der opstod en fejl under sletning af %d kontakt(er)."
+
+#: browse.php:88
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Fejl under sletning af %d ud af %d anmodede kontakter."
+
+#: browse.php:66
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Der opstod et problem under sletning af %d kontakt(er) fra liste."
+
+#: browse.php:68
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr ""
+"Der opstod et problem under sletning af %d ud af %d anmodede kontakt(er) fra "
+"liste."
+
+#: lib/api.php:414
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Der opstod en fejl under søgning i adressekartoteket: %s"
+
+#: templates/data/export.inc:41 templates/browse/actions.inc:10
+msgid "Export"
+msgstr "Eksportér"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Eksportér adressekartotek"
+
+#: templates/data/export.inc:21
+msgid "Export only the selected contacts."
+msgstr "Eksportér kun de valgte kontakter."
+
+#: templates/data/export.inc:27
+msgid "Export the following address book completely."
+msgstr "Eksportér hele følgende adressekartotek."
+
+#: add.php:67 browse.php:35 browse.php:103 browse.php:130 data.php:143
+#: data.php:237 data.php:306 search.php:66
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Kunne ikke tilgå kataloget: %s"
+
+#: browse.php:158
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Kunne ikke tilføje %s til %s: %s"
+
+#: browse.php:312
+msgid "Failed to browse list"
+msgstr "Skimning af liste fejlede"
+
+#: browse.php:350
+msgid "Failed to browse the directory"
+msgstr "Kunne ikke skimme fortegnelsen"
+
+#: lib/Driver/ldap.php:316
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr "Navnskift fejlede: (%s) %s; Gammel DN = %s, ny DN = %s, rod = %s\""
+
+#: search.php:128
+#, php-format
+msgid "Failed to delete the virtual address book. %s"
+msgstr "Kunne ikke slette det virtuelle adressekartotek. %s"
+
+#: browse.php:134
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Kunne ikke finde objektet, som skulle tilføjes: %s"
+
+#: search.php:198
+msgid "Failed to search the address book"
+msgstr "Kunne ikke søge i adressekartoteket"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Kunne ikke søge i kataloget: %s"
+
+#: config/sources.php.dist:453
+msgid "Favourite Recipients"
+msgstr "Foretrukne modtagere"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "Fax"
+
+#: edit.php:129 lib/Views/Contact.php:83 lib/Views/EditContact.php:64
+msgid "Files"
+msgstr "Filer"
+
+#: templates/browse/search.inc:94
+msgid "Find"
+msgstr "Find"
+
+#: edit.php:103 edit.php:192
+msgid "Finish"
+msgstr "Afslut"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "Fornavn"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr "Ledig/optaget URL"
+
+#: templates/browse/search.inc:107
+msgid "From"
+msgstr "Fra"
+
+#: config/sources.php.dist:637
+msgid "Global Address Book"
+msgstr "Global adressekartotek"
+
+#: templates/browse/row.inc:44
+msgid "Group"
+msgstr "Gruppe"
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "Privat-adresse"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "By (hjemme)"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "Land (hjemme)"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "Privat-telefon"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "Postnummer (hjemme)"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "Region (hjemme)"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "Adresse (hjemme)"
+
+#: config/sources.php.dist:536
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importér adressekartotek, trin %d"
+
+#: data.php:370
+msgid "Import/Export Address Books"
+msgstr "Import/eksport af adressekartoteker"
+
+#: lib/api.php:635 lib/api.php:722
+msgid "Invalid ID"
+msgstr "Ugyldig ID"
+
+#: lib/api.php:231 lib/api.php:403 lib/api.php:446 lib/api.php:480
+#: lib/api.php:509 lib/api.php:631 lib/api.php:718 lib/api.php:770
+#: lib/api.php:1129
+msgid "Invalid address book"
+msgstr "Ugyldigt adressekartotek"
+
+#: lib/api.php:1133 lib/api.php:1207 lib/api.php:1260
+msgid "Invalid email"
+msgstr "Ugyldig e-mail-adresse"
+
+#: lib/api.php:1141
+msgid "Invalid entry"
+msgstr "Ugyldig post"
+
+#: lib/Driver/ldap.php:273
+msgid "Invalid key specified."
+msgstr "Ugyldig nøgle angivet."
+
+#: lib/api.php:1137
+msgid "Invalid name"
+msgstr "Ugyldigt navn"
+
+#: lib/api.php:774
+msgid "Invalid objectId"
+msgstr "Ugyldigt objekt-id"
+
+#: lib/Driver/ldap.php:61
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"LDAP understøttelse er nødvendig men LDAP-modulet er ikke tilgængelig eller "
+"ikke lastet."
+
+#: lib/ObjectView.php:130
+msgid "Last Modified"
+msgstr "Sidst ændret"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Efternavn"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Liste"
+
+#: templates/browse/search.inc:101
+msgid "Matching"
+msgstr "Matcher"
+
+#: lib/api.php:206
+msgid "Maximum Number of Contacts"
+msgstr "Maksimalt antal kontakter"
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "Maksimalt antal sider"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menu-liste"
+
+#: lib/Driver/ldap.php:309
+msgid "Missing DN in LDAP source configuration."
+msgstr "Mangler DN i LDAP-kilde-konfiguration."
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "Mobil (hjemme)"
+
+#: lib/Driver/ldap.php:339 lib/Driver/ldap.php:355
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Modifikation fejlede: (%s) %s"
+
+#: lib/api.php:1246
+msgid "More than 1 entry found"
+msgstr "Fandt mere end 1 opslag"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Flyt"
+
+#: templates/prefs/columnselect.inc:247
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Flyt til venstre"
+
+#: templates/prefs/columnselect.inc:249
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Flyt til højre"
+
+#: data.php:61 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Adressekartoteket Mulberry"
+
+#: lib/api.php:1165
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Flere person med adresse [%s], men ingen med navn [%s], eksisterer allerede"
+
+#: config/sources.php.dist:109 config/sources.php.dist:244
+msgid "My Address Book"
+msgstr "Importér mit adressekartotek"
+
+#: addressbooks.php:125
+msgid "My Address Books"
+msgstr "Mine adressekartoteker"
+
+#: templates/addressbooks.inc:109 config/attributes.php.dist:42
+msgid "Name"
+msgstr "Navn"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Navneformat"
+
+#: config/sources.php.dist:316
+msgid "Netcenter Member Directory"
+msgstr "Netcenter Member Directory"
+
+#: add.php:36 add.php:124 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Ny kontakt"
+
+#: edit.php:94 edit.php:101 edit.php:207 templates/data/import.inc:45
+msgid "Next"
+msgstr "Næste"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "Kaldenavn"
+
+#: lib/api.php:1248 lib/api.php:1297
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Ingen %s post fundet for %s"
+
+#: data.php:50
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Ingen adressekartoteker tilgængelige. Importering og eksportering er slået "
+"fra."
+
+#: search.php:42
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Ingen adressekartoteker tilgængelige. Søgning er slået fra."
+
+#: lib/api.php:1216
+msgid "No address books found."
+msgstr "Intet adressekartoteket fundet."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Ingen kontakter fundet"
+
+#: templates/browse/column_headers.inc:53
+msgid "No contacts match the current filter."
+msgstr "Ingen kontakter passer til de aktuelle filter."
+
+#: lib/Driver/favourites.php:91
+msgid "No source for favourite recipients exists."
+msgstr "Der eksisterer ingen kilder af foretrukne modtagere."
+
+#: lib/api.php:534 lib/api.php:805
+msgid "No vCard data was found."
+msgstr "Ingen vCard-data fundet."
+
+#: templates/browse/footer.inc:7
+msgid "None"
+msgstr "Ingen"
+
+#: lib/Views/Contact.php:26 lib/Views/DeleteContact.php:26
+#: lib/Views/EditContact.php:26
+msgid "Not Found"
+msgstr "Ikke fundet"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "Noter"
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "Antal opslag per side"
+
+#: lib/api.php:653 lib/api.php:786
+msgid "Object not found"
+msgstr "Objekt ikke fundet"
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr "Kontor"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Idet du gemmer denne side vil adressekartoteket bliver slettet permanent. "
+"Hvis dette ikke er, hvad du ønsker, så skal du ændre dit valg til \"Ingen\"."
+
+#: lib/api.php:813
+msgid "Only one vcard supported."
+msgstr "Kun ét vCard er understøttet."
+
+#: config/prefs.php.dist:37
+msgid "Other Options"
+msgstr "Andre indstillinger"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr "Offentlig PGP-nøgle"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Slet denne kontakt uigenkaldeligt?"
+
+#: lib/api.php:518 lib/api.php:644 lib/api.php:731 lib/api.php:986
+#: lib/api.php:1150
+msgid "Permission Denied"
+msgstr "Tilladelse nægtet"
+
+#: lib/Driver.php:571
+msgid "Permission denied"
+msgstr "Tilladelse nægtet"
+
+#: templates/addressbooks.inc:101
+msgid "Permissions"
+msgstr "Tilladelser"
+
+#: data.php:62 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Importér adressekartotek fra Pine"
+
+#: templates/browse/javascript.inc:28
+msgid "Please name the new contact list:"
+msgstr "Navngiv venligst den nye kontaktliste:"
+
+#: edit.php:97 edit.php:100 edit.php:199
+msgid "Previous"
+msgstr "Foregående"
+
+#: config/sources.php.dist:417
+msgid "Private Address Book"
+msgstr "Privat adressekartotek"
+
+#: lib/Driver/ldap.php:154
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Forespørgsel fejlede: (%s) %s"
+
+#: templates/browse/header.inc:6
+msgid "Quick Filter: "
+msgstr "Kvik-filter: "
+
+#: lib/Driver/ldap.php:198 lib/Driver/ldap.php:206 lib/Driver/ldap.php:436
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Læsefejl: (%s) %s"
+
+#: lib/Driver.php:1129
+msgid "Reading contacts is not available."
+msgstr "Læsning af kontakter er ikke tilgængelig."
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr "Poster vist:"
+
+#: templates/prefs/addressbookselect.inc:176
+msgid "Remove address book"
+msgstr "Fjern adressekartotek"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Fjern kolonne"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Fejl fra denne liste"
+
+#: templates/data/import.inc:21
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Erstat eksisterende adressekartotek med den importerede? <strong>Advarsel: "
+"Dette sletter alle poster i dit nuværende adressekartotek.</strong>"
+
+#: lib/Driver.php:459
+msgid "Requested object not found."
+msgstr "Forespurgte objekt ikke fundet."
+
+#: add.php:37 templates/browse/search.inc:139
+msgid "Reset to Defaults"
+msgstr "Tilbage til standardindstillinger"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr "Offentlig S/MIME certifikat"
+
+#: lib/Driver/ldap.php:76
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS fejlede: (%s) %s"
+
+#: add.php:37 edit.php:105 templates/addressbooks.inc:126
+#: templates/browse/search.inc:120 templates/browse/search.inc:138
+msgid "Save"
+msgstr "Gem"
+
+#: templates/browse/search_vbook.inc:20
+msgid "Save search as a virtual addressbook?"
+msgstr "Gem søgning som et virtuelt adressekartotek?"
+
+#: lib/Driver.php:1153
+msgid "Saving contacts is not available."
+msgstr "Lagring af kontakter er ikke tilgængelig."
+
+#: templates/browse/search.inc:120 templates/browse/search.inc:138
+#: templates/block/minisearch.inc:25 lib/Block/tree_menu.php:72
+#: config/prefs.php.dist:116
+msgid "Search"
+msgstr "Søg"
+
+#: lib/api.php:1063
+msgid "Search failed"
+msgstr "Søgning fejlede"
+
+#: lib/api.php:1155 lib/api.php:1161 lib/api.php:1170 lib/api.php:1183
+#, php-format
+msgid "Search failed: %s"
+msgstr "Søgning fejlede: %s"
+
+#: templates/block/minisearch.inc:23
+msgid "Search for: "
+msgstr "Søg efter: "
+
+#: lib/Driver.php:1121
+msgid "Searching is not available."
+msgstr "Søgning er ikke tilgængelig."
+
+#: templates/block/minisearch.inc:27
+msgid "Searching..."
+msgstr "Søger..."
+
+#: templates/addressbooks.inc:68
+msgid "Select an address book to delete"
+msgstr "Vælg det adressekartotek, der skal slettes"
+
+#: templates/addressbooks.inc:92
+msgid "Select an address book to edit"
+msgstr "Vælg det adressekartotek, der skal ændres"
+
+#: templates/data/export.inc:32
+msgid "Select the address book to export from:"
+msgstr "Vælg adressekartoteker, der skal eksporteres fra:"
+
+#: templates/data/import.inc:26
+msgid "Select the address book to import to:"
+msgstr "Vælg adressekartoteket, der skal importeres til:"
+
+#: templates/data/import.inc:35
+msgid "Select the charset of the source file:"
+msgstr "Vælg kildefilens tegnsæt:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Vælg formatet, der skal eksporteres i:"
+
+#: templates/data/import.inc:43
+msgid "Select the file to import:"
+msgstr "Vælg filen, som skal importeres:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Vælg formatet af oprindelsesfilen:"
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "Vælg formatet, som navne skal vises i:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Vælg standard visning, sortering og sideopsætning."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Vælg hvilke felter, der skal vises i adresselisterne."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Vælg formatet, som navne skal vises i."
+
+#: add.php:54
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Valgt adressekartotek \"%s\"."
+
+#: config/sources.php.dist:175
+msgid "Shared Directory"
+msgstr "Delt fortegnelse"
+
+#: templates/browse/actions.inc:46
+#, php-format
+msgid "Show %s"
+msgstr "Vis %s"
+
+#: templates/browse/actions.inc:48
+msgid "Show All"
+msgstr "Vis alle"
+
+#: templates/browse/actions.inc:47
+msgid "Show Contacts"
+msgstr "Vis kontakter"
+
+#: templates/browse/actions.inc:46
+msgid "Show Lists"
+msgstr "Vis lister"
+
+#: templates/browse/column_headers.inc:21
+#: templates/browse/column_headers.inc:36
+msgid "Sort Direction"
+msgstr "Sorteringsretning"
+
+#: lib/api.php:199
+msgid "Sources"
+msgstr "Kilder"
+
+#: config/prefs.php.dist:148
+msgid "Specify where you want advanced search results to appear."
+msgstr "Angiv hvor du ønsker at avancerede søgeresultater skal dukke op."
+
+#: browse.php:214 browse.php:262
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d kontakt(er) tilføjet til liste."
+
+#: browse.php:160
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Har tilføjet %s til %s"
+
+#: search.php:100
+#, php-format
+msgid "Successfully changed virtual address book \"%s\""
+msgstr "Virtuelt adressekartotek \"%s\" ændret."
+
+#: browse.php:248
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Kontaktliste \"%s\" oprettet."
+
+#: search.php:166
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Virtuelt adressekartotek \"%s\" oprettet."
+
+#: browse.php:84
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d kontakt(er) slettet."
+
+#: browse.php:64
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d kontakt(er) fjernet fra liste."
+
+#: data.php:59
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/export.inc:14 templates/data/import.inc:14
+msgid "Tab separated values"
+msgstr "Tabulator-separerede værdier"
+
+#: view.php:15
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "VFS motoren skal sættes op for at slå opsendelse af bilag til."
+
+#: lib/Driver.php:1099
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Adressekartotek \"%s\" eksisterer ikke."
+
+#: addressbooks.php:52
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "Adressekartoteket \"%s\" er oprettet."
+
+#: addressbooks.php:77
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Adressekartoteket \"%s\" er slettet."
+
+#: addressbooks.php:94
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "Adressekartoteket \"%s\" er opdateret."
+
+#: data.php:312
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Adressekartoteket kunne ikke tømmes: %s"
+
+#: edit.php:50 vcard.php:17 view.php:26 contact.php:22
+msgid "The contact you requested does not exist."
+msgstr "Den forespurgte kontakt findes ikke."
+
+#: edit.php:121
+#, php-format
+msgid "The file \"%s\" has successfully been deleted."
+msgstr "Filen \"%s\" er slettet."
+
+#: data.php:293
+msgid "The import can be finished despite the warnings."
+msgstr "Importen kan gennemføres uanset advarslerne."
+
+#: lib/Views/Contact.php:36 lib/Views/DeleteContact.php:36
+#: lib/Views/EditContact.php:36
+msgid "The requested contact was not found."
+msgstr "Den anmodede kontakt kunne ikke findes."
+
+#: browse.php:31
+msgid "There are no browseable address books."
+msgstr "Der findes ingen adressekartoteker, der kan skimmes."
+
+#: add.php:29
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Der er ingen skrivbare adressekartoteker. Ingen af de tilgængelige "
+"adressekartoteker er konfigureret til at tillade dig at tilføje nye poster. "
+"Hvis du mener dette er en fejl, så kontakt venligst din systemadministrator."
+
+#: search.php:162
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr ""
+"Der opstod en fejl under oprettelsen af det virtuelle adressekartotek: %s"
+
+#: add.php:121
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Der opstod en fejl ved tilføjelse af den nye kontakt. Kontakt din "
+"systemadministrator for yderligere hjælp."
+
+#: browse.php:271
+msgid "There was an error creating a new list."
+msgstr "Der opstod en fejl under oprettelsen af en ny liste."
+
+#: addressbooks.php:39 addressbooks.php:42
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Der opstod en fejl under oprettelsen af dette adressekartotek: %s"
+
+#: browse.php:166
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr ""
+"Der opstod en fejl under sletning af \"%s\" fra kilde-adressekartoteket."
+
+#: delete.php:37
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Der opstod en fejl ved fjernelse af denne kontakt: %s"
+
+#: browse.php:318
+msgid "There was an error displaying the list"
+msgstr "Der opstod en fejl under visning af listen"
+
+#: data.php:344
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Der opstod en fejl under importeringen af data: %s"
+
+#: lib/api.php:530 lib/api.php:800
+msgid "There was an error importing the iCalendar data."
+msgstr "Der opstod en fejl under importeringen af iCalendar data."
+
+#: addressbooks.php:64 addressbooks.php:69 addressbooks.php:75
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Der opstod en fejl under sletning af dette adressekartotek: %s"
+
+#: addressbooks.php:92
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Der opstod en fejl under opdatering af dette adressekatalog: %s"
+
+#: edit.php:163
+#, php-format
+msgid "There was an error updating this entry: %s"
+msgstr "Der opstod en fejl under opdatering af denne post: %s"
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Der findes ingen adresser at eksportere."
+
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Disse adressekartoteker vil vises i denne rækkefølge:"
+
+#: templates/prefs/columnselect.inc:243
+msgid "These columns will display in this order:"
+msgstr "Disse kolonner vil vises i denne rækkefølge:"
+
+#: data.php:278
+msgid "This file format is not supported."
+msgstr "Dette filformat er ikke understøttet."
+
+#: lib/api.php:1174 lib/api.php:1187
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Denne person har allerede en %s post i adressekartoteket"
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Dette vil være standard adressekartoteket ved tilføjelse eller import af "
+"kontakter."
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "Titel"
+
+#: lib/Turba.php:492
+#, php-format
+msgid "Unable to create new share. Missing source type."
+msgstr "Kan ikke oprette ny deling.  Mangler kildetype."
+
+#: lib/Driver.php:1021
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Kan ikke indlæse definitionen af %s."
+
+#: edit.php:94 edit.php:97 edit.php:100 edit.php:105 edit.php:201
+msgid "Undo Changes"
+msgstr "Fortryd ændringer"
+
+#: lib/api.php:563 lib/api.php:682 lib/api.php:818
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Ikke-understøttet Content-Type: %s"
+
+#: config/sources.php.dist:377
+msgid "Verisign Directory"
+msgstr "Verisign-fortegnelse"
+
+#: templates/browse/row.inc:19
+#, php-format
+msgid "View \"%s\""
+msgstr "Se \"%s\""
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Se kontakt"
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "Vælg hvad du først vi se:"
+
+#: lib/Block/tree_menu.php:51
+msgid "Virtual Address Books"
+msgstr "Virtuelle adressekartoteker"
+
+#: templates/browse/search_vbook.inc:15
+msgid "Virtual Addressbooks"
+msgstr "Virtuelle adressekartoteker"
+
+#: search.php:131
+#, php-format
+msgid "Virtual address book \"%s\" deleted."
+msgstr "Virtuelt adressekartotek \"%s\" slettet."
+
+#: templates/browse/search_vbook.inc:37
+msgid "Virtual address book description"
+msgstr "Beskrivelse af virtuelt adressekartotek"
+
+#: templates/browse/search_vbook.inc:29
+msgid "Virtual address book name"
+msgstr "Navn på virtuelt adressekartotek"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr "Website URL"
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "Adresse (arbejde)"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "By (arbejde)"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "Land (arbejde)"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "Telefon (arbejde)"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "Postnummer (arbejde)"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "Region (arbejde)"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "Adresse (arbejde)"
+
+#: add.php:73 browse.php:106 browse.php:227 data.php:246
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Du har ikke tilladelse til at danne flere end %d kontakter i \"%s\"."
+
+#: lib/Driver/vbook.php:116
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Du kan ikke tilføje en indgang til et virtuelt adressekartotek."
+
+#: lib/Driver/vbook.php:100
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Du kan ikke tilføje nye kontakter til et virtuelt adressekartoteket"
+
+#: lib/Driver/vbook.php:108
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Du kan ikke slette kontakter fra et virtuelt adressekartotek"
+
+#: edit.php:72 view.php:36 lib/Views/DeleteContact.php:42
+#: lib/Views/EditContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Du har ikke tilladelse til at se denne kontaktliste."
+
+#: vcard.php:35
+msgid "You do not have permission to view this object."
+msgstr "Du har ikke tilladelse til at se dette objekt."
+
+#: lib/Turba.php:579
+msgid "You do not have permissions to delete this source."
+msgstr "Du har ikke tilladelse til at slette denne kilde."
+
+#: search.php:148
+msgid "You must provide a name for virtual address books."
+msgstr "Du skal angive et navn til virtuelle adressekartoteker."
+
+#: templates/browse/javascript.inc:55
+msgid "You must select a target address book."
+msgstr "Du skal vælge destinations-adressekartoteket."
+
+#: templates/browse/javascript.inc:23
+msgid "You must select a target list."
+msgstr "Du skal vælge destinationslisten."
+
+#: edit.php:31
+msgid "You must select at least one contact first."
+msgstr "Først skal du vælge mindst en kontakt."
+
+#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:49
+#: templates/browse/javascript.inc:72
+msgid "You must select at least one entry first."
+msgstr "Først skal du vælge mindst én post."
+
+#: edit.php:76 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Du har kun tilladelse til at se denne kontakt."
+
+#: browse.php:325
+msgid "Your default address book is not browseable."
+msgstr "Dit standard adressekartotek er ikke skimbar."
+
+#: templates/browse/row.inc:6
+msgid "[no value]"
+msgstr "[ingen værdi]"
+
+#: lib/Turba.php:602
+msgid "_Browse"
+msgstr "Skim"
+
+#: templates/browse/actions.inc:47
+msgid "_Contacts"
+msgstr "Kontakter"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Slet"
+
+#: contact.php:79
+msgid "_Edit"
+msgstr "Redigér"
+
+#: lib/Turba.php:611
+msgid "_Import/Export"
+msgstr "Import/Eksport"
+
+#: templates/browse/actions.inc:46
+msgid "_Lists"
+msgstr "Lister"
+
+#: lib/Turba.php:599
+msgid "_My Address Books"
+msgstr "Mine adressekartoteker"
+
+#: lib/Turba.php:605
+msgid "_New Contact"
+msgstr "Ny kontakt"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Fjern fra denne liste"
+
+#: lib/Turba.php:607
+msgid "_Search"
+msgstr "Søg"
+
+#: vcard.php:43
+msgid "contact"
+msgstr "kontakt"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "contacts.vcf"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "ingen formattering"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "ingen"
+
+#: templates/browse/actions.inc:31
+msgid "to a Contact List"
+msgstr "til en kontaktliste"
+
+#: templates/browse/actions.inc:21
+msgid "to a different Address Book"
+msgstr "til et andet adressekartotek"
+
+#: data.php:60 templates/data/export.inc:15 templates/data/import.inc:15
+#: templates/browse/column_headers.inc:13
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/de_DE.po b/turba/po/de_DE.po
new file mode 100644 (file)
index 0000000..e5eb2bb
--- /dev/null
@@ -0,0 +1,1818 @@
+# German translations for Turba.
+# Copyright 2001-2009 The Horde Project
+# This file is distributed under the same license as the Turba package.
+# Jan Schneider <jan@horde.org>, 2001-2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 3.0-cvs\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-09-18 11:24+0200\n"
+"PO-Revision-Date: 2009-01-06 17:17+0100\n"
+"Last-Translator: Jan Schneider <jan@horde.org>\n"
+"Language-Team: German <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "IMSP-Adressbuch hinzufügen"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "IMSP-Adressbuch löschen"
+
+#: data.php:455
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" existiert bereits und wurde nicht importiert."
+
+#: lib/Forms/EditContact.php:83
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"\"%s\" wurde aktualisiert, aber die hochgeladene Datei konnte nicht "
+"gespeichert werden: %s"
+
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" aktualisiert."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" wurde nicht kopiert, da es sich um eine Liste handelt."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" wurde nicht verschoben, da es sich um eine Liste handelt."
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Vorname Nachname\" (z.B. Max Mustermann)"
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Nachname, Vorname\" (z.B. Mustermann, Max)"
+
+#: lib/Driver.php:627
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s von %s"
+
+#: lib/Forms/AddContact.php:88
+#, php-format
+msgid "%s added."
+msgstr "%s hinzugefügt."
+
+#: data.php:483
+#, php-format
+msgid "%s file successfully imported."
+msgstr "Die %s-Datei wurde erfolgreich importiert."
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s bis %s von %s"
+
+#: lib/Turba.php:544
+#, php-format
+msgid "%s's Address Book"
+msgstr "Adressbuch von %s"
+
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr "Ein Browser, der Iframes unterstützt, wird benötigt"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Zugriff auf %s verweigert"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Kontakt hinzufügen"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Adressbuch hinzufügen"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Datei hinzufügen"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Hinzufügen zu"
+
+#: lib/Driver.php:2120
+msgid "Adding contacts is not available."
+msgstr "Hinzufügen von Kontakten nicht unterstützt."
+
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr "Adressbuch"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Adressbuchübersicht"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Adressbuchliste"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Adressbücher"
+
+#: data.php:435
+msgid "Address book successfully purged."
+msgstr "Adressbuch wurde erfolgreich geleert."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Adressbücher, die nicht angezeigt werden:"
+
+#: search.php:184 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Erweiterte Suche"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Spitzname"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Alle"
+
+#: lib/api.php:942
+msgid "Already Exists"
+msgstr "Existiert bereits"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Jahrestage"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Jahrestag"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Sind Sie sicher, dass Sie %s löschen möchten?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Sind Sie sicher, dass Sie die ausgewählten Kontakte löschen möchten?"
+
+#: config/attributes.php.dist:424
+msgid "Assistant"
+msgstr "Assistent"
+
+#: search.php:181 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Einfache Suche"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Verbindung fehlgeschlagen: (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Geburtstag"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Geburtstage"
+
+#: contact.php:128 templates/browse/row.inc:10
+msgid "Blank name"
+msgstr "Leerer Name"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Beides"
+
+#: templates/menu.inc:8 templates/addressbook_list.php:29
+#: addressbooks/index.php:39
+msgid "Browse"
+msgstr "Liste"
+
+#: config/attributes.php.dist:300
+msgid "Business Category"
+msgstr "Geschäftskategorie"
+
+#: data.php:101
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Eine Gruppe kann nicht zu sich selbst hinzugefügt werden."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Es konnten nicht alle Adressbucheinträge für %s gelöscht werden"
+
+#: config/attributes.php.dist:388
+msgid "Category"
+msgstr "Kategorie"
+
+#: templates/browse/column_headers.inc:25
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Ändere Sortierung für %s nach %s"
+
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
+msgid "Change Permissions"
+msgstr "Rechte Ändern"
+
+#: templates/browse/column_headers.inc:8
+msgid "Check All/None"
+msgstr "Alle/Keine auswählen"
+
+#: templates/browse/column_headers.inc:8
+msgid "Check _All/None"
+msgstr "_Alle/Keine auswählen"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Kinder"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Wählen Sie ein Adressbuch"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr ""
+"Wählen Sie aus, welche Adressbücher in welcher Reihenfolge angezeigt werden "
+"sollen:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Wählen Sie die zu benutzenden Adressbücher aus."
+
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+"Klicken Sie auf ein Adressbuch, um dessen Spalten zu sortieren. Ziehen Sie "
+"die Spalten mit der Maus, um die Reihenfolge zu ändern. Markieren Sie eine "
+"Spalte, um sie einzublenden."
+
+#: templates/block/minisearch.inc:26
+msgid "Close"
+msgstr "Schließen"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Suche beenden"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Adressspalten"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Kommagetrennte Werte"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Kommagetrennte Werte (Microsoft Outlook)"
+
+#: config/attributes.php.dist:522
+msgid "Common Address Extended"
+msgstr "Erweiterte Adresse allgemein"
+
+#: config/attributes.php.dist:540
+msgid "Common City"
+msgstr "Stadt allgemein"
+
+#: config/attributes.php.dist:558
+msgid "Common Country"
+msgstr "Land allgemein"
+
+#: config/attributes.php.dist:466
+msgid "Common Phone"
+msgstr "Telefon allgemein"
+
+#: config/attributes.php.dist:534
+msgid "Common Post Office Box"
+msgstr "Postfach allgemein"
+
+#: config/attributes.php.dist:552
+msgid "Common Postal Code"
+msgstr "Postleitzahl allgemein"
+
+#: config/attributes.php.dist:546
+msgid "Common State/Province"
+msgstr "Bundesstaat oder Provinz allgemein"
+
+#: config/attributes.php.dist:528
+msgid "Common Street"
+msgstr "Straße allgemein"
+
+#: config/attributes.php.dist:491
+msgid "Common Video Call"
+msgstr "Bildtelefon allgemein"
+
+#: config/sources.php.dist:256 config/sources.php.dist:948
+msgid "Communications"
+msgstr "Kommunikation"
+
+#: config/attributes.php.dist:306
+msgid "Company"
+msgstr "Firma"
+
+#: config/attributes.php.dist:235
+msgid "Company Address"
+msgstr "Firmenadresse"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:547 lib/api.php:601
+#: lib/api.php:654 lib/api.php:702 lib/api.php:757 lib/api.php:816
+#: lib/api.php:867 lib/api.php:1005 lib/api.php:1067 lib/api.php:1138
+#: lib/api.php:1205 lib/api.php:1325 lib/api.php:1564 lib/api.php:1641
+#: lib/api.php:1792
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Verbindung fehlgeschlagen: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Verbindung fehlgeschlagen"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Kontaktsuche"
+
+#: config/sources.php.dist:866
+msgid "Contacts"
+msgstr "Kontakte"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Angezeigte Kontakte:"
+
+#: lib/Views/Browse.php:346
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Kontakte in Liste: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopieren"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Erstellen"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Adressbuch Erstellen"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Neues Adressbuch erstellen"
+
+#: lib/ListView.php:448
+msgid "Create a new Contact List in:"
+msgstr "Neue Kontaktliste anlegen in:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "Erstellt"
+
+#: contact.php:95
+msgid "De_lete"
+msgstr "_Löschen"
+
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: addressbooks/index.php:42 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
+msgid "Delete"
+msgstr "Löschen"
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "%s löschen"
+
+#: lib/api.php:645
+msgid "Delete denied."
+msgstr "Löschen nicht erlaubt."
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Löschen fehlgeschlagen: (%s) %s"
+
+#: lib/Driver.php:2128
+msgid "Deleting contacts is not available."
+msgstr "Löschen von Kontakten nicht unterstützt."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Löschen ist fehlgeschlagen"
+
+#: config/attributes.php.dist:312
+msgid "Department"
+msgstr "Abteilung"
+
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr "Beschreibung"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Verzeichnis"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Anzeige"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Anzeige-Einstellungen"
+
+#: lib/Object.php:354
+msgid "Download"
+msgstr "Herunterladen"
+
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
+msgid "Download vCard"
+msgstr "vCard herunterladen"
+
+#: templates/addressbook_list.php:31 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/column_headers.inc:11
+#: templates/browse/actions.inc:6 addressbooks/index.php:40
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr "\"%s\" bearbeiten"
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "%s Bearbeiten"
+
+#: config/attributes.php.dist:249
+msgid "Email"
+msgstr "E-Mail"
+
+#: config/attributes.php.dist:255
+msgid "Emails"
+msgstr "E-Mail-Adressen"
+
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Fehler beim Hinzufügen von %d Kontakten zur Liste."
+
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Fehler beim Hinzufügen von %d von %d Kontakten zur Liste."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Fehler beim Löschen von %d Kontakten."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Fehler beim Löschen von %d von %d Kontakten."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Fehler beim Entfernen von %d Kontakten aus der Liste."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Fehler beim Entfernen von %d von %d Kontakten aus der Liste."
+
+#: lib/api.php:708
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Das Adressbuch konnte nicht durchsucht werden: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Exportieren"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Adressbuch exportieren"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Nur die ausgewählten Kontakte exportieren."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Das folgende Adressbuch komplett exportieren."
+
+#: data.php:247 data.php:346 data.php:424 add.php:42 search.php:106
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Das Adressbuch konnte nicht geöffnet werden: %s"
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "%s konnte nicht zu %s hinzugefügt werden: %s"
+
+#: lib/Views/Browse.php:352
+msgid "Failed to browse list"
+msgstr "Die Liste konnte nicht angezeigt werden"
+
+#: lib/Views/Browse.php:383
+msgid "Failed to browse the directory"
+msgstr "Das Verzeichnis konnte nicht angezeigt werden"
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Name konnte nicht geändert werden: (%s) %s; Alte DN = %s, Neue DN = %s, Root "
+"= %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr ""
+"Das Objekt, das hinzugefügt werden sollte, konnte nicht gefunden werden: %s"
+
+#: search.php:175
+msgid "Failed to search the address book"
+msgstr "Das Adressbuch konnte nicht durchsucht werden"
+
+#: data.php:262
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Das Verzeichnis %s konnte nicht durchsucht werden."
+
+#: config/sources.php.dist:565
+msgid "Favourite Recipients"
+msgstr "Häufigste Empfänger"
+
+#: config/attributes.php.dist:276
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Dateien"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Durchsuchen von "
+
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
+msgid "Finish"
+msgstr "Beenden"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "Vorname"
+
+#: config/attributes.php.dist:350
+msgid "Freebusy URL"
+msgstr "Frei-/Gebucht-URL"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Von"
+
+#: config/attributes.php.dist:430
+msgid "Gender"
+msgstr "Geschlecht"
+
+#: config/sources.php.dist:791
+msgid "Global Address Book"
+msgstr "Allgemeines Adressbuch"
+
+#: templates/browse/row.inc:61
+msgid "Group"
+msgstr "Gruppe"
+
+#: config/attributes.php.dist:135
+msgid "Home Address"
+msgstr "Adresse privat"
+
+#: config/attributes.php.dist:592
+msgid "Home Address Extended"
+msgstr "Erweiterte Adresse privat"
+
+#: config/attributes.php.dist:153
+msgid "Home City"
+msgstr "Stadt privat"
+
+#: config/attributes.php.dist:171
+msgid "Home Country"
+msgstr "Land privat"
+
+#: config/attributes.php.dist:460
+msgid "Home Email"
+msgstr "E-Mail-Adresse privat"
+
+#: config/attributes.php.dist:476
+msgid "Home Fax"
+msgstr "Fax privat"
+
+#: config/attributes.php.dist:598
+msgid "Home Latitude"
+msgstr "Breitengrad privat"
+
+#: config/attributes.php.dist:603
+msgid "Home Longitude"
+msgstr "Längengrad privat"
+
+#: config/attributes.php.dist:486
+msgid "Home Mobile Phone"
+msgstr "Telefon mobil privat"
+
+#: config/attributes.php.dist:261
+msgid "Home Phone"
+msgstr "Telefon privat"
+
+#: config/attributes.php.dist:147
+msgid "Home Post Office Box"
+msgstr "Postfach privat"
+
+#: config/attributes.php.dist:165
+msgid "Home Postal Code"
+msgstr "Postleitzahl privat"
+
+#: config/attributes.php.dist:159
+msgid "Home State/Province"
+msgstr "Bundesstaat oder Provinz privat"
+
+#: config/attributes.php.dist:141
+msgid "Home Street Address"
+msgstr "Straße privat"
+
+#: config/attributes.php.dist:501
+msgid "Home Video Call"
+msgstr "Bildtelefon privat"
+
+#: config/attributes.php.dist:586
+msgid "Home Website URL"
+msgstr "Website-URL privat"
+
+#: config/sources.php.dist:682
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Adressbuch importieren, Schritt %d"
+
+#: data.php:501
+msgid "Import/Export Address Books"
+msgstr "Adressbücher Import/Export"
+
+#: config/attributes.php.dist:406
+msgid "Initials"
+msgstr "Initialien"
+
+#: config/attributes.php.dist:412
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: lib/api.php:1000 lib/api.php:1133
+msgid "Invalid ID"
+msgstr "Ungültige ID"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:369 lib/api.php:697
+#: lib/api.php:752 lib/api.php:811 lib/api.php:860 lib/api.php:996
+#: lib/api.php:1129 lib/api.php:1195 lib/api.php:1775
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Ungültiges Adressbuch: %s"
+
+#: lib/api.php:1199
+msgid "Invalid contact unique ID"
+msgstr "Ungültige eindeutige Kontakt-ID"
+
+#: lib/api.php:1779 lib/api.php:1865 lib/api.php:1926
+msgid "Invalid email"
+msgstr "Ungültige E-Mail-Adresse"
+
+#: lib/api.php:1787
+msgid "Invalid entry"
+msgstr "Ungültiger Eintrag"
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr "Ungültiger Schlüssel angegeben."
+
+#: lib/api.php:1783
+msgid "Invalid name"
+msgstr "Ungültiger Name"
+
+#: config/attributes.php.dist:288
+msgid "Job Title"
+msgstr "Position"
+
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Der Schlüssel fürs Speichern muss eine UID sein, kein(e) %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"LDAP-Unterstützung wird benötigt, aber das LDAP-Modul ist nicht verfügbar "
+"oder wurde nicht geladen."
+
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF-Adressbuch"
+
+#: config/attributes.php.dist:436
+msgid "Language"
+msgstr "Sprache"
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr "Letzte Änderung"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Nachname"
+
+#: config/attributes.php.dist:442
+msgid "Latitude"
+msgstr "Breitengrad"
+
+#: templates/browse/column_headers.inc:17
+msgid "List"
+msgstr "Liste"
+
+#: config/sources.php.dist:251 config/sources.php.dist:944
+msgid "Location"
+msgstr "Ort"
+
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "Logo"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr "Logo-Dateityp"
+
+#: config/attributes.php.dist:447
+msgid "Longitude"
+msgstr "Längengrad"
+
+#: lib/api.php:617
+msgid "Malformed request."
+msgstr "Ungültige Anfrage."
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
+msgid "Manage Address Books"
+msgstr "Adressbücher-Verwaltung"
+
+#: config/attributes.php.dist:418
+msgid "Manager"
+msgstr "Vorgesetzter"
+
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Diesen Kontakt als Ihre Visitenkarte markieren"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "nach"
+
+#: lib/api.php:330
+msgid "Maximum Number of Contacts"
+msgstr "Maximale Anzahl an Kontakten"
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "Maximale Seitenzahl"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menüliste"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Weitere Namen"
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr "DN fehlt in der LDAP-Konfiguration."
+
+#: config/attributes.php.dist:271
+msgid "Mobile Phone"
+msgstr "Telefon mobil"
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Änderung fehlgeschlagen: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Weitere Optionen..."
+
+#: lib/api.php:1903
+msgid "More than 1 entry found"
+msgstr "Mehr als 1 Eintrag zurückgeliefert"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Verschieben"
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Nach links"
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Nach rechts"
+
+#: data.php:104 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry-Adressbuch"
+
+#: lib/api.php:1811
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Mehrere Personen mit der Adresse [%s], aber keine mit dem Namen [%s] im "
+"Adressbuch"
+
+#: config/sources.php.dist:167
+msgid "My Address Book"
+msgstr "Mein Adressbuch"
+
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "Name"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Namensformat"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Titel vor dem Namen"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Titel nach dem Namen"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Name:"
+
+#: add.php:70 lib/Block/tree_menu.php:28
+msgid "New Contact"
+msgstr "Neuer Kontakt"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
+msgid "Next"
+msgstr "Weiter"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "Spitzname"
+
+#: lib/api.php:1906 lib/api.php:1966
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Es wurde kein %s Eintrag für %s gefunden"
+
+#: data.php:93
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Zur Zeit sind keine Adressbücher verfügbar. Import und Export stehen nicht "
+"zur Verfügung."
+
+#: search.php:92
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr ""
+"Zur Zeit sind keine Adressbücher verfügbar. Die Suche steht nicht zur "
+"Verfügung."
+
+#: lib/api.php:691 lib/api.php:746 lib/api.php:806 lib/api.php:991
+#: lib/api.php:1124 lib/api.php:1190
+msgid "No address book specified"
+msgstr "Kein Adressbuch angegeben"
+
+#: minisearch.php:80
+msgid "No contacts found"
+msgstr "Keine Kontakte gefunden."
+
+#: templates/browse/column_headers.inc:44
+msgid "No contacts match the current filter."
+msgstr "Keine Kontakte entsprechen den Suchkriterien."
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "Keine passende Kontakte"
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr "Es existiert keine Quelle für häufigste Empfänger."
+
+#: lib/api.php:894 lib/api.php:1236
+msgid "No vCard data was found."
+msgstr "Es wurden keine vCard-Daten gefunden."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Keine"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "Nicht gefunden"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Nicht gefunden"
+
+#: config/attributes.php.dist:338
+msgid "Notes"
+msgstr "Bemerkungen"
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "Anzahl der Einträge pro Seite"
+
+#: lib/api.php:1042 lib/api.php:1261
+msgid "Object not found"
+msgstr "Objekt nicht gefunden"
+
+#: lib/Driver/kolab.php:1199
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Objekt mit der UID %s existiert nicht!"
+
+#: config/attributes.php.dist:294
+msgid "Occupation"
+msgstr "Beruf"
+
+#: config/attributes.php.dist:318
+msgid "Office"
+msgstr "Büro"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Wenn Sie diese Einstellung speichern, wird das angegebene Adressbuch "
+"endgültig gelöscht. Wenn Sie das nicht möchten, ändern Sie Ihre Auswahl auf "
+"\"kein\"."
+
+#: lib/api.php:1244
+msgid "Only one vcard supported."
+msgstr "Nur einzelne vCards werden unterstützt."
+
+#: config/sources.php.dist:258 config/sources.php.dist:950
+msgid "Organization"
+msgstr "Firma"
+
+#: config/sources.php.dist:259 config/sources.php.dist:952
+msgid "Other"
+msgstr "Sonstige"
+
+#: config/attributes.php.dist:356
+msgid "PGP Public Key"
+msgstr "Öffentlicher PGP-Schlüssel"
+
+#: config/attributes.php.dist:517
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:281
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Diesen Kontakt unwiederbringlich löschen?"
+
+#: deletefile.php:36 lib/Driver.php:811 lib/api.php:871 lib/api.php:1796
+#: lib/Driver/sql.php:519
+msgid "Permission denied"
+msgstr "Zugriff verweigert"
+
+#: config/sources.php.dist:248 config/sources.php.dist:940
+msgid "Personal"
+msgstr "Persönlich"
+
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "Foto"
+
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr "Foto-Dateityp"
+
+#: data.php:105 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine-Adressbuch"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Bitte einen Namen für die neue Kontakliste angeben:"
+
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
+msgid "Previous"
+msgstr "Zurück"
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Abfrage fehlgeschlagen: (%s) %s"
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Lesen fehlgeschlagen: (%s) %s"
+
+#: lib/Driver.php:2112
+msgid "Reading contacts is not available."
+msgstr "Anzeigen von Kontakten nicht unterstützt."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Das Adressbuch \"%s\" wirklich löschen? Dieser Vorgang kann nicht rückgängig "
+"gemacht werden, und alle Kontakte in diesem Adressbuch werden endgültig "
+"gelöscht."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Adressbuch entfernen"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Aus dieser Liste entfernen"
+
+#: lib/Driver.php:2150
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Das Löschen von Benutzerdaten wird vom aktuellen Adressbuchtreiber nicht "
+"unterstützt."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Existierendes Adressbuch mit dem importierten ersetzen? <strong>Warnung: "
+"Damit werden alle aktuellen Einträge in dem Adressbuch gelöscht.</strong>"
+
+#: lib/Driver.php:705
+msgid "Requested object not found."
+msgstr "Gewünschtes Objekt nicht gefunden."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Zurücksetzen"
+
+#: config/attributes.php.dist:362
+msgid "S/MIME Public Certificate"
+msgstr "Öffentliches S/MIME-Zertifikat"
+
+#: config/attributes.php.dist:511
+msgid "SIP"
+msgstr "SIP"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS fehlgeschlagen: (%s) %s"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr "Speichern"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Suche als Virtuelles Adressbuch speichern?"
+
+#: lib/Driver.php:2138
+msgid "Saving contacts is not available."
+msgstr "Speichern von Kontakten nicht unterstützt."
+
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
+msgid "Search"
+msgstr "Suche"
+
+#: lib/api.php:1569
+msgid "Search failed"
+msgstr "Suche fehlgeschlagen"
+
+#: lib/api.php:1801 lib/api.php:1807 lib/api.php:1816 lib/api.php:1829
+#, php-format
+msgid "Search failed: %s"
+msgstr "Suche fehlgeschlagen: %s"
+
+#: templates/block/minisearch.inc:23
+msgid "Search for: "
+msgstr "Suchen nach: "
+
+#: lib/Driver.php:2097
+msgid "Searching is not available."
+msgstr "Suchen von Kontakten nicht unterstützt."
+
+#: templates/browse/row.inc:52
+msgid "Select contact"
+msgstr "Kontakt auswählen"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Wählen Sie das Adressbuch, aus dem exportiert werden soll:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Wählen Sie das Adressbuch, in das importiert werden soll:"
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Wählen Sie die Adressbücher, die für die Synchronisation mit externen "
+"Geräten verwendet werden sollen:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Wählen Sie den Zeichensatz der importierten Datei:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Wählen Sie das Exportformat:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Wählen Sie die Datei, die importiert werden soll:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Wählen Sie das Format der importierten Datei:"
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "Legen Sie fest, wie die Namen angezeigt werden sollen:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr "Wählen Sie die Standardansicht und Einstellungen fürs Blättern."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr ""
+"Wählen Sie die Felder aus, die in der Adressliste angezeigt werden sollen."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Wählen Sie das Format, in dem die Namen angezeigt werden sollen."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Adressbuch \"%s\" ausgewählt."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "%s anzeigen"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Beides anzeigen"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Kontakte anzeigen"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Listen anzeigen"
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "Sortierrichtung"
+
+#: templates/browse/column_headers.inc:32
+#, php-format
+msgid "Sort by %s"
+msgstr "Sortieren nach %s"
+
+#: templates/browse/column_headers.inc:27
+#, php-format
+msgid "Sort by %s only"
+msgstr "Nur nach %s sortieren"
+
+#: templates/browse/column_headers.inc:30
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Sortieren nach %s, dann nach %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Quelle:"
+
+#: lib/api.php:323
+msgid "Sources"
+msgstr "Quellen"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Partner"
+
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d Kontakte erfolgreich zur Liste hinzugefügt."
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s wurde erfolgreich zu %s hinzugefügt"
+
+#: lib/Views/Browse.php:298
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Die Kontaktliste \"%s\" wurde erfolgreich erstellt."
+
+#: search.php:150
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Virtuelles Adressbuch \"%s\" erfolgreich erstellt."
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d Kontakte erfolgreich gelöscht."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d Kontakte erfolgreich aus der Liste entfernt."
+
+#: data.php:102
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Tabgetrennte Werte"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Zieladressbuch"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Zielkontaktliste"
+
+#: data.php:426
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Die %s-Datei enthielt keine Kontakte."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"Das VFS-Backend muss konfiguriert sein, um das Hochladen von Dateien zu "
+"erlauben."
+
+#: lib/Driver.php:2068
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Das Adressbuch \"%s\" existiert nicht."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Das Adressbuch \"%s\" wurde erzeugt."
+
+#: data.php:433
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Das Adressbuch konnte nicht geleert werden: %s"
+
+#: lib/api.php:1062
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Das Adressbuch mit Ihrer Visitenkarte existiert nicht mehr."
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Das Adressbuch \"%s\" wurde gelöscht."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "Das Adressbuch \"%s\" wurde nach \"%s\" umbenannt."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Das Adressbuch \"%s\" wurde gespeichert."
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "Der ausgewählte Kontakt existiert nicht."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Die Datei \"%s\" wurde gelöscht."
+
+#: data.php:406
+msgid "The import can be finished despite the warnings."
+msgstr "Der Import kann trotz der Warnungen abgeschlossen werden."
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "Gewünschter Kontakt nicht gefunden."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Es gibt keine Adressbücher, die aufgelistet werden können."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Es gibt keine beschreibbaren Adressbücher. Keines der verfügbaren "
+"Adressbücher erlaubt Ihnen, neue Adressen hinzuzufügen. Wenn Sie meinen, "
+"dass es sich dabei um einen Fehler handelt, wenden Sie sich bitte an Ihren "
+"System-Administrator."
+
+#: lib/Views/Browse.php:356
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] ""
+"In dieser Liste befindet sich %d Kontakt, den Sie nicht einsehen dürfen"
+msgstr[1] ""
+"In dieser Liste befinden sich %d Kontakte, die Sie nicht einsehen dürfen"
+
+#: search.php:146
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr ""
+"Beim Erstellen des Virtuellen Adressbuchs ist ein Fehler aufgetreten: %s"
+
+#: lib/Forms/AddContact.php:95
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Beim Hinzufügen dieses Kontakts ist ein Fehler aufgetreten. Bitte wenden Sie "
+"sich an Ihren Systemadministrator für weitere Hilfe."
+
+#: lib/Views/Browse.php:318
+msgid "There was an error creating a new list."
+msgstr "Beim Erstellen einer neuen Liste ist ein Fehler aufgetreten."
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Beim Löschen von \"%s\" aus dem Adressbuch ist ein Fehler aufgetreten."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Beim Löschen des Kontakts ist ein Fehler aufgetreten: %s"
+
+#: lib/Views/Browse.php:362
+msgid "There was an error displaying the list"
+msgstr "Beim Anzeigen der Liste ist ein Fehler aufgetreten"
+
+#: data.php:469
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Beim Importieren der Daten ist ein Fehler aufgetreten: %s"
+
+#: lib/api.php:890 lib/api.php:1231
+msgid "There was an error importing the iCalendar data."
+msgstr "Beim Importieren der iCalendar Daten ist ein Fehler aufgetreten."
+
+#: lib/api.php:259
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Beim Löschen eines Adressbuchs von %s ist ein Fehler aufgetreten"
+
+#: lib/Forms/EditContact.php:93
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Beim Speichern des Kontaktes ist ein Fehler aufgetreten. Bitte wenden Sie "
+"sich an Ihren Systemadministrator für weitere Hilfe."
+
+#: data.php:292
+msgid "There were no addresses to export."
+msgstr "Es konnten keine Adressen zum Exportieren gefunden werden."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Diese Adressbücher werden in der folgenden Reihenfolge angezeigt:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Dieses Adressbuch kann nicht gelöscht werden"
+
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Der Kontakt wurde als Ihre Visitenkarte markiert."
+
+#: data.php:391
+msgid "This file format is not supported."
+msgstr "Dieses Dateiformat wird nicht unterstützt."
+
+#: lib/api.php:1820 lib/api.php:1833
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Diese Person hat bereits einen %s-Eintrag in Ihrem Adressbuch"
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Dies wird als Standardadressbuch für das Hinzufügen oder Importieren von "
+"Kontakten benutzt."
+
+#: config/attributes.php.dist:241
+msgid "Time Zone"
+msgstr "Zeitzone"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Kontaktbesitzer konnte nicht gefunden werden."
+
+#: lib/Driver.php:1988 lib/Turba.php:662
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Der %s-Treiber konnte nicht geladen werden."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Das Adressbuch \"%s\" kann nicht gespeichert werden: %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "Suche nicht möglich."
+
+#: config/attributes.php.dist:391
+msgid "Unfiled"
+msgstr "Nicht zugeordnet"
+
+#: lib/api.php:928 lib/api.php:1039 lib/api.php:1249
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Nicht unterstützter Inhaltstyp: %s"
+
+#: minisearch.php:72 minisearch.php:73
+msgid "View Contact"
+msgstr "Kontakt anzeigen"
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "Standardansicht:"
+
+#: config/attributes.php.dist:506
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:344
+msgid "Website URL"
+msgstr "Website-URL"
+
+#: config/attributes.php.dist:185
+msgid "Work Address"
+msgstr "Adresse geschäftlich"
+
+#: config/attributes.php.dist:570
+msgid "Work Address Extended"
+msgstr "Erweiterte Adresse geschäftlich"
+
+#: config/attributes.php.dist:203
+msgid "Work City"
+msgstr "Stadt geschäftlich"
+
+#: config/attributes.php.dist:221
+msgid "Work Country"
+msgstr "Land geschäftlich"
+
+#: config/attributes.php.dist:454
+msgid "Work Email"
+msgstr "E-Mail-Adresse geschäftlich"
+
+#: config/attributes.php.dist:471
+msgid "Work Fax"
+msgstr "Fax geschäftlich"
+
+#: config/attributes.php.dist:576
+msgid "Work Latitude"
+msgstr "Breitengrad geschäftlich"
+
+#: config/attributes.php.dist:581
+msgid "Work Longitude"
+msgstr "Längengrad geschäftlich"
+
+#: config/attributes.php.dist:481
+msgid "Work Mobile Phone"
+msgstr "Telefon mobil geschäftlich"
+
+#: config/attributes.php.dist:266
+msgid "Work Phone"
+msgstr "Telefon geschäftlich"
+
+#: config/attributes.php.dist:197
+msgid "Work Post Office Box"
+msgstr "Postfach geschäftlich"
+
+#: config/attributes.php.dist:215
+msgid "Work Postal Code"
+msgstr "Postleitzahl geschäftlich"
+
+#: config/attributes.php.dist:209
+msgid "Work State/Province"
+msgstr "Bundesstaat oder Provinz geschäftlich"
+
+#: config/attributes.php.dist:191
+msgid "Work Street Address"
+msgstr "Straße geschäftlich"
+
+#: config/attributes.php.dist:496
+msgid "Work Video Call"
+msgstr "Bildtelefon geschäftlich"
+
+#: config/attributes.php.dist:564
+msgid "Work Website URL"
+msgstr "Website-URL geschäftlich"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Sie dürfen dieses Adressbuch nicht ändern."
+
+#: data.php:355 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:281
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Sie dürfen nicht mehr als %d Kontakte in \"%s\" erstellen."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Sie dürfen dieses Adressbuch nicht löschen."
+
+#: lib/api.php:204
+msgid "You are not allowed to remove user data."
+msgstr "Sie dürfen keine Benutzerdaten löschen."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Sie können keine Einträge zu Virtuellen Adressbüchern hinzufügen."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Sie können keine Kontakte zu Virtuellen Adressbüchern hinzufügen"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Sie können keine Kontakte aus Virtuellen Adressbüchern löschen"
+
+#: lib/api.php:1057
+msgid "You didn't mark a contact as your own yet."
+msgstr "Sie haben noch keinen Kontakt als Ihre Visitenkarte markiert."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Sie haben nicht genügend Rechte, um diesen Kontakt zu sehen."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Sie haben nicht genügend Rechte, um dieses Objekt zu sehen."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Sie haben nicht genügend Rechte, um dieses Adressbuch zu löschen."
+
+#: lib/api.php:1071
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"Sie haben nicht genügend Rechte, um das Adressbuch zu lesen, das Ihre "
+"Visitenkarte enthält."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Sie müssen die Net_LDAP PEAR-Bibliothek installieren, um die "
+"Schemaüberprüfung verwenden zu können."
+
+#: search.php:133
+msgid "You must provide a name for virtual address books."
+msgstr "Sie müssen einen Namen für das Virtuelle Adressbuch angeben."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Sie müssen erst ein Zieladressbuch auswählen."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Sie müssen erst eine Zielliste angeben."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Sie müssen erst mindestens einen Kontakt auswählen."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Sie haben nur das Recht, diesen Kontakt anzusehen."
+
+#: lib/Views/Browse.php:369
+msgid "Your default address book is not browseable."
+msgstr "Ihr Standard-Adressbuch kann nicht angezeigt werden."
+
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "Ihre Visitenkarte"
+
+#: lib/api.php:1076
+msgid "Your own contact cannot be found in the address book."
+msgstr "Ihre Visitenkarte konnte in dem Adressbuch nicht gefunden werden."
+
+#: lib/Turba.php:604
+msgid "_Browse"
+msgstr "_Liste"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Kontakte"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Lös_chen"
+
+#: contact.php:91
+msgid "_Edit"
+msgstr "_Bearbeiten"
+
+#: lib/Turba.php:613
+msgid "_Import/Export"
+msgstr "_Import/Export"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Listen"
+
+#: lib/Turba.php:601
+msgid "_My Address Books"
+msgstr "_Meine Adressbücher"
+
+#: lib/Turba.php:607
+msgid "_New Contact"
+msgstr "_Neuer Kontakt"
+
+#: lib/Turba.php:618
+msgid "_Print"
+msgstr "_Drucken"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Aus dieser Liste entfernen"
+
+#: lib/Turba.php:609
+msgid "_Search"
+msgstr "_Suche"
+
+#: contact.php:88
+msgid "_View"
+msgstr "_Anzeigen"
+
+#: templates/browse/column_headers.inc:25
+msgid "ascending"
+msgstr "aufsteigend"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "durch %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "durch mich"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "Kontakt"
+
+#: data.php:312 data.php:317 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "adressen.csv"
+
+#: data.php:337
+msgid "contacts.ldif"
+msgstr "adressen.ldif"
+
+#: data.php:322
+msgid "contacts.tsv"
+msgstr "adressen.tsv"
+
+#: data.php:332
+msgid "contacts.vcf"
+msgstr "adressen.vcf"
+
+#: templates/browse/column_headers.inc:25
+msgid "descending"
+msgstr "absteigend"
+
+#: config/attributes.php.dist:433
+msgid "female"
+msgstr "weiblich"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "in %s"
+
+#: config/attributes.php.dist:433
+msgid "male"
+msgstr "männlich"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "Keine Formatierung"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "kein"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "zu einer Kontaktliste"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "zu einem anderen Adressbuch"
+
+#: data.php:103 templates/browse/column_headers.inc:14
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/el_GR.po b/turba/po/el_GR.po
new file mode 100644 (file)
index 0000000..eb6cec3
--- /dev/null
@@ -0,0 +1,1283 @@
+# Turba Greek translation.
+# Copyright 2002 Stefanos I. Dimitriou.
+# Stefanos I. Dimitriou <support_webmail@teiath.gr>, 2002.
+# Silligardos Xristoforos, 2002.
+# Anagnostopoulos Apostolis, 2002.
+# Milosis C. Konstantinos, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba: 1.2-cvs\n"
+"POT-Creation-Date: 2002-11-07 12:11+0200\n"
+"PO-Revision-Date: 2001-07-26 11:36+0200\n"
+"Last-Translator: Konstantinos C. Milosis <kmilosis@yahoo.com>\n"
+"Language-Team: Greek <dev@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-7\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"¼íïìá Åðþíõìï\" (ð.÷. Êþóôáò Ìõëþóçò)"
+
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Åðþíõìï, ¼íïìá\" (ð.÷. Ìõëþóçò, Êþóôáò)"
+
+msgid "%s added"
+msgstr "%s Åðéôõ÷þò åéóáãùãÞ ôïõ áñ÷åßïõ"
+
+#, c-format
+msgid "%s file successfully imported"
+msgstr "Ôï áñ÷åßï %s åéóÜ÷èçêå åðéôõ÷þò"
+
+#: templates/browse/footer.inc:9
+msgid "%s to %s of %s"
+msgstr "%s óå %s áðü %s"
+
+msgid "A"
+msgstr "Á"
+
+#: lib/Block/minisearch.php:45
+msgid "A browser that supports iFrames is required"
+msgstr "Áðáéôåßôáé åîåñåõíçôÞò (browser) ðïõ íá õðïóôçñßæåé iFrames"
+
+msgid "Above search form"
+msgstr "ÌåôÜ ôç öüñìá áíáæÞôçóçò"
+
+msgid "Ad_vanced Search"
+msgstr "ÅéäéêÞ ÁíáæÞôçóç"
+
+msgid "Add"
+msgstr "ÐñïóèÞêç"
+
+msgid "Add Contact ..."
+msgstr "ÍÝá êáñôÝëá ..."
+
+msgid "Add a new contact"
+msgstr "ÐñïóèÞêç íÝáò êáñôÝëáò"
+
+#: templates/prefs/columnselect.inc:238
+msgid "Add column"
+msgstr "ÐñïóèÞêç óôÞëçò"
+
+msgid "Add failed"
+msgstr "Ç ðñïóèÞêç áðÝôõ÷å"
+
+msgid "Add to"
+msgstr "ÐñïóèÞêç óôï"
+
+msgid "Address Book Listing"
+msgstr "Ëßóôá Äéåõèýíóåùí"
+
+msgid "Address Book entry"
+msgstr "ÅããñáöÞ ÄéåõèõíóéïãñÜöïõ"
+
+msgid "Address Books"
+msgstr "ÄéåõèõíóéïãñÜöïé"
+
+msgid "Address book is read-only."
+msgstr "Ï äéåõèõíóéïãñÜöïò åßíáé ìüíï ãéá áíÜãíùóç."
+
+#: data.php:236
+msgid "Address book successfully purged."
+msgstr "Ï ÄéåõèõíóéïãñÜöïò äéáãñÜöçêå åðéôõ÷þò."
+
+#, c-format
+msgid "Addresses in list: %s"
+msgstr "Äéåõèýíóåéò óôç ëßóôá: %s"
+
+msgid "Advanced Search"
+msgstr "ÅéäéêÞ ÁíáæÞôçóç"
+
+msgid "Alias"
+msgstr "Øåõäþíõìï"
+
+msgid "All"
+msgstr "¼ëá"
+
+#: lib/api.php:372
+msgid "Already Exists"
+msgstr "ÕðÜñ÷åé Þäç"
+
+msgid "An illegal value was specified."
+msgstr "Ïñßóôçêå ìßá ìç åðéôñåðüìåíç ôéìÞ."
+
+#: templates/browse/javascript.inc:79
+msgid "Are you sure that you want to delete %s?"
+msgstr "Åßóôå âÝâáéïé üôé èÝëåôå íá äéáãñÜøåôå %s;"
+
+#: templates/browse/javascript.inc:53
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "Åßóôå âÝâáéïé üôé èÝëåôå íá äéáãñÜøåôå ôéò åðéëåãìÝíåò åããñáöÝò;"
+
+msgid "Ascending"
+msgstr "Áýîïõóá"
+
+msgid "Available Columns:"
+msgstr "ÄéáèÝóéìá Ðåäßá:"
+
+msgid "B"
+msgstr "Â"
+
+#, c-format
+msgid "Ba_ck to %s"
+msgstr "ÅðéóôñïöÞ óôï %s"
+
+#, c-format
+msgid "Back to %s"
+msgstr "ÅðéóôñïöÞ óôï %s"
+
+msgid "Basi_c Search"
+msgstr "ÁðëÞ ÁíáæÞôçóç"
+
+msgid "Basic Search"
+msgstr "ÁðëÞ ÁíáæÞôçóç"
+
+msgid "Below search form"
+msgstr "Ðñéí áðü ôç öüñìá áíáæÞôçóçò"
+
+#: lib/Driver/ldap.php:75 lib/Driver/ldap.php:78
+msgid "Bind failed: (%s) %s"
+msgstr "Ç óýíäåóç áðÝôõ÷å: (%s) %s"
+
+#: config/attributes.php.dist:168
+msgid "Birthday"
+msgstr "ÃåíÝèëéá"
+
+msgid "Browse"
+msgstr "Ëßóôá"
+
+msgid "Browse..."
+msgstr "Ëßóôá..."
+
+#: config/attributes.php.dist:163
+msgid "Business Category"
+msgstr "ÅðáããåëìáôéêÞ Êáôçãïñßá"
+
+msgid "C"
+msgstr "Ã"
+
+#: templates/browse/actions.inc:59
+msgid "C_lear Search"
+msgstr "Êáèáñéóìüò ÁíáæÞôçóçò"
+
+msgid "Cancel"
+msgstr "Áêýñùóç"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "ÅðéëïãÞ ¼ëùí/Êáíåíüò"
+
+msgid "Checkbox"
+msgstr "ÅðéëïãÞ ôùí äéåõèýíóåùí"
+
+msgid ""
+"Choose a default directory for your personal addressbook, contact lists, and "
+"searches."
+msgstr ""
+"ÅðéëÝîôå ôïí ðñïêáèïñéóìÝíï êáôÜëïãï ãéá ôïí ðñïóùðéêü óáò ÄéåõèõíóéïãñÜöï, "
+"ôéò ïìÜäåò êáé ôéò áíáæçôÞóåéò."
+
+#: templates/addressbooks.inc:44
+msgid "Choose a name"
+msgstr "ÅðéëÝîôå Ýíá üíïìá"
+
+msgid "Choose an address book"
+msgstr "ÅðéëÝîôå ÄéåõèõíóéïãñÜöï"
+
+msgid "Choose an address book:"
+msgstr "ÅðéëÝîôå ÄéåõèõíóéïãñÜöï:"
+
+msgid "Choose the order of the columns to display in the address list."
+msgstr ""
+"ÅðéëïãÞ ôçò óåéñÜò ôùí óôçëþí êáôÜ ôçí ðñïâïëÞ ôçò ëßóôáò ôùí äéåõèýíóåùí."
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "ÅðéëÝîôå ðïéïß äéåõèõíóéïãñÜöïé èá åìöáíßæïíôáé êáé ìå ðïéÜ óåéñÜ:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "ÅðéëÝîôå ðïéïýò äéåõèõíóéïãñÜöïõò èá ÷ñçóéìïðïéåßôå."
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose which columns to display and in what order:"
+msgstr "ÅðéëÝîôå ðïéÝò óôÞëåò èá åìöáíßæïíôáé êáé ìå ðïéÜ óåéñÜ:"
+
+msgid "Clear Search"
+msgstr "Áêýñùóç ÁíáæÞôçóçò"
+
+msgid "Column Options"
+msgstr "ÅðéëïãÝò Óôçëþí"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "ÓôÞëåò ðïõ äå èá åìöáíßæïíôáé:"
+
+msgid "Comma separated values"
+msgstr "ÔéìÝò äéá÷ùñéóìÝíåò ìå êüììá"
+
+#: templates/data/export.inc:17
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "ÔéìÝò äéá÷ùñéóìÝíåò ìå êüììá (Microsoft Outlook)"
+
+msgid "Company"
+msgstr "Åôáéñßá"
+
+msgid "Company Address"
+msgstr "Äéåýèõíóç Åôáéñßáò"
+
+#: lib/api.php:611 lib/api.php:781
+msgid "Connection failed: %s"
+msgstr "Ç Óýíäåóç áðÝôõ÷å: %s"
+
+#: lib/Driver/ldap.php:64
+msgid "Connection failure"
+msgstr "Áðïôõ÷ßá Óýíäåóçò"
+
+msgid "Contact removed from list."
+msgstr "Ç êáñôÝëá áöáéñÝèçêå áðü ôç ëßóôá."
+
+#: browse.php:267
+msgid "Contacts in list: %s"
+msgstr "ÅðáöÝò óôç Ëßóôá: %s"
+
+#, c-format
+msgid "Contents of %s"
+msgstr "Ðåñéå÷üìåíá ôïõ %s"
+
+msgid "Copy"
+msgstr "ÁíôéãñáöÞ"
+
+#: templates/addressbooks.inc:53
+msgid "Create"
+msgstr "Äçìéïõñãßá"
+
+#: templates/addressbooks.inc:40
+msgid "Create Address Book"
+msgstr "Äçìéïõñãßá ÄéåõèõíóéïãñÜöïõ"
+
+#: lib/ListView.php:348
+msgid "Create a new Contact List in:"
+msgstr "Äçìéïõñãßá íÝáò Ëßóôáò Åðáöþí óå:"
+
+msgid "Created"
+msgstr "ÄçìéïõñãÞèçêå"
+
+msgid "Default Display"
+msgstr "ÐñïåðéëåãìÝíç ÅìöÜíéóç"
+
+msgid ""
+"Default directory for your personal addressbook, contact lists, and searches."
+msgstr ""
+"ÐñïåðéëåãìÝíç åìöÜíéóç ãéá ôïí ðñïóùðéêü óáò ÄéåõèõíóéïãñÜöï, ïìÜäåò,êáé "
+"áíáæçôÞóåéò."
+
+msgid "Default sorting direction:"
+msgstr "ÐñïåðéëåãìÝíç êáôåýèõíóç ôáîéíüìçóçò:"
+
+msgid "Delete"
+msgstr "ÄéáãñáöÞ"
+
+msgid "Delete Confirmation"
+msgstr "Åðéâåâáßùóç ÄéáãñáöÞò"
+
+msgid "Delete button behaviour"
+msgstr "ÓõìðåñéöïñÜ ðëÞêôñïõ ÄéáãñáöÞò"
+
+#: lib/Driver/ldap.php:267
+msgid "Delete failed: (%s) %s"
+msgstr "ÄéáãñáöÞ áðÝôõ÷å: (%s) %s"
+
+msgid "Deletion failed"
+msgstr "ÄéáãñáöÞ áðÝôõ÷å"
+
+#: config/attributes.php.dist:203
+msgid "Department"
+msgstr "ÔìÞìá"
+
+msgid "Descending"
+msgstr "Öèßíïõóá"
+
+msgid "Directory"
+msgstr "ÊáôÜëïãïò"
+
+msgid "Display"
+msgstr "ÅìöÜíéóç"
+
+msgid "Display Options"
+msgstr "ÅðéëïãÝò ÅìöÜíéóçò"
+
+msgid "Do you want to confirm deleting entries?"
+msgstr "Íá æçôåßôáé åðéâåâáßùóç êáôÜ ôç äéáãñáöÞ åðáöþí;"
+
+msgid "Does the first row contain the field names? If yes, check this box:"
+msgstr "ÐåñéÝ÷åé ç ðñþôç ãñáììÞ ôá ïíüìáôá ôùí ðåäßùí; Áí íáé åðÝëåîå áõôü:"
+
+#: templates/browse/contactrow.inc:29
+msgid "Download VCard"
+msgstr "ÊáôÝâáóìá óôï PC óå ìïñöÞ VCard"
+
+#: templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "ÊáôÝâáóìá óôï PC óå ìïñöÞ vCard"
+
+msgid "Edit"
+msgstr "Åðåîåñãáóßá"
+
+#, c-format
+msgid "Edit '%s'"
+msgstr "Åðåîåñãáóßá '%s'"
+
+#: templates/addressbooks.inc:81
+msgid "Edit Address Books"
+msgstr "Åðåîåñãáóßá ÄéåõèõíóéïãñÜöùí"
+
+#: edit.php:53 edit.php:80
+msgid "Edit entry for %s"
+msgstr "Åðåîåñãáóßá åããñáöÞò ãéá %s"
+
+msgid "Edit options for:"
+msgstr "Åðåîåñãáóßá åðéëïãþí ãéá:"
+
+msgid "Email"
+msgstr "Email"
+
+msgid "Entry for %s updated."
+msgstr "Ç åããñáöÞ ãéá %s åíçìåñþèçêå."
+
+msgid "Error while searching directory."
+msgstr "ÐáñïõóéÜóôçêå óöÜëìá êáôÜ ôçí áíáæÞôçóç óôïí êáôÜëïãï."
+
+msgid "Error"
+msgstr "ËÜèïò"
+
+msgid "Exit Address Book"
+msgstr "¸îïäïò áðü ôï ÄéåõèõíóéïãñÜöï"
+
+msgid "Export"
+msgstr "ÅîáãùãÞ"
+
+msgid "Export Address Book"
+msgstr "ÅîáãùãÞ Âéâëßïõ Äéåõèýíóåùí"
+
+#: templates/data/export.inc:26
+msgid "Export only the selected contacts."
+msgstr "ÅîáãùãÞ ìüíï ôùí åðéëåãìÝíùí åðáöþí."
+
+#: templates/data/export.inc:32
+msgid "Export the following address book completely."
+msgstr "Ç åîáãùãÞ ôùí ðáñáêÜôù ÄéåõèõíóéïãñÜöùí ïëïêëçñþèçêå."
+
+msgid "Failed to access the address book: %s"
+msgstr "Áðïôõ÷ßá êáôÜ ôç óýíäåóç óôïí äéåõèõíóéïãñÜöï: %s"
+
+msgid "Failed to access the specified address book."
+msgstr "Áðïôõ÷ßá êáôÜ ôç óýíäåóç óôïí åðéëåãìÝíï äéåõèõíóéïãñÜöï."
+
+#: browse.php:145
+msgid "Failed to add %s to %s: %s"
+msgstr "Áðïôõ÷ßá ðñïóèÞêçò %s óå %s: %s"
+
+msgid "Failed to browse list"
+msgstr "Áðïôõ÷ßá êáôÜ ôçí åìöÜíéóç ôçò ëßóôáò"
+
+msgid "Failed to browse the directory"
+msgstr "Áðïôõ÷ßá êáôÜ ôçí ðñïâïëÞ ôïõ êáôáëüãïõ"
+
+#: lib/Driver/ldap.php:304
+msgid "Failed to change name: (%s) %s, %s"
+msgstr "Áðïôõ÷ßá áëëáãÞò ôïõ ïíüìáôïò (%s) %s, %s"
+
+msgid "Failed to connect to the specified directory."
+msgstr "Áðïôõ÷ßá óýíäåóçò óôïí åðéëåãìÝíï êáôÜëïãï."
+
+#: browse.php:140
+msgid "Failed to find object to be added: %s"
+msgstr "Áðïôõ÷ßá áíåýñåóçò áíôéêåéìÝíïõ ãéá ðñïóèÞêç: %s"
+
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "Áðïôõ÷ßá êáôÜ ôçí áíáæÞôçóç óôïí êáôÜëïãï : %s"
+
+msgid "Failed to search the specified directory."
+msgstr "Áðïôõ÷ßá êáôÜ ôçí áíáæÞôçóç óôïí åðéëåãìÝíï êáôÜëïãï."
+
+msgid "Fax"
+msgstr "Öáî"
+
+msgid "Find"
+msgstr "ÁíáæÞôçóç"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "Ìéêñü ¼íïìá"
+
+msgid "Freebusy URL"
+msgstr "Éóôïóåëßäá Äéáèåóéìüôçôáò"
+
+msgid "From"
+msgstr "Áðü"
+
+#: config/sources.php.dist:521
+msgid "Global Address Book"
+msgstr "Êïéíüò ÄéåõèõíóéïãñÜöïò"
+
+msgid "Group"
+msgstr "ÏìÜäá"
+
+msgid "Help"
+msgstr "ÂïÞèåéá"
+
+msgid " Here is the beginning of the file:"
+msgstr "ÁõôÞ åßíáé ç áñ÷Þ ôïõ áñ÷åßïõ:"
+
+msgid "Home Address"
+msgstr "Äéåýèõíóç Êáôïéêßáò"
+
+#: config/attributes.php.dist:88
+msgid "Home City"
+msgstr "Ðüëç (Êáôïéêßáò)"
+
+#: config/attributes.php.dist:103
+msgid "Home Country"
+msgstr "×þñá (Êáôïéêßáò)"
+
+#: config/attributes.php.dist:140
+msgid "Home Phone"
+msgstr "ÔçëÝöùíï Êáôïéêßáò"
+
+#: config/attributes.php.dist:98
+msgid "Home Postal Code"
+msgstr "Ôá÷. Êþäéêáò (Êáôïéêßáò)"
+
+#: config/attributes.php.dist:93
+msgid "Home State/Province"
+msgstr "Åðáñ÷ßá (Êáôïéêßáò)"
+
+msgid "How many fields (columns) are there?"
+msgstr "Ðüóá ðåäßá (óôÞëåò) õðÜñ÷ïõí;"
+
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr ""
+"Áí åéóÜãåôå äéåõèýíóåéò áðü áñ÷åßï CVS, ç ðñþôç ãñáììÞ ðåñéÝ÷åé ôá ïíüìáôá "
+"ôùí ðåäßùí;"
+
+msgid "Illegal or malformed form data."
+msgstr "ËáíèáóìÝíç ìïñöÞ Þ ôýðïò äåäïìÝíùí."
+
+msgid "Import"
+msgstr "ÅéóáãùãÞ"
+
+msgid "Import Address Book"
+msgstr "ÅéóáãùãÞ Âéâëßïõ Äéåõèýíóåùí"
+
+msgid "Import Address Book, Step %s"
+msgstr "ÅéóáãùãÞ Âéâëßïõ Äéåõèýíóåùí, ÂÞìá %s"
+
+msgid "Import/Export Addressbooks"
+msgstr "ÅéóáãùãÞ/ÅîáãùãÞ ÄéåõèõíóéïãñÜöïõ"
+
+msgid "Import/Export"
+msgstr "ÅéóáãùãÞ/ÅîáãùãÞ"
+
+#: lib/api.php:358 lib/api.php:577
+msgid "Invalid Content-Type"
+msgstr "Ìç Ýãêõñïò ôýðïò ðåñéå÷ïìÝíùí"
+
+#: lib/api.php:419 lib/api.php:508
+msgid "Invalid ID"
+msgstr "Ìç Ýãêõñï ID"
+
+#: lib/api.php:191 lib/api.php:316 lib/api.php:415 lib/api.php:504
+#: lib/api.php:556 lib/api.php:852
+msgid "Invalid address book."
+msgstr "ËáíèáóìÝíï Âéâëßï Äéåõèýíóåùí."
+
+msgid "Invalid e-mail address."
+msgstr "ËÜèïò 'e-mail' äéåýèõíóç"
+
+msgid "Invalid email."
+msgstr "ËÜèïò email."
+
+msgid "Invalid entry."
+msgstr "ËÜèïò Êáôá÷þñéóç."
+
+#: lib/Driver/ldap.php:263
+msgid "Invalid key specified."
+msgstr "Êáèïñßóèçêå ìç Ýãêõñï êëåéäß."
+
+#: lib/api.php:860
+msgid "Invalid name."
+msgstr "ËÜèïò üíïìá"
+
+#: lib/api.php:560
+msgid "Invalid objectId"
+msgstr "Ìç Ýãêõñï ID áíôéêåéìÝíïõ"
+
+#: lib/Driver/ldap.php:39
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"Áðáéôåßôáé õðïóôÞñéîç LDAP. Ç ìïíÜäá áõôÞ äåí åßíáé äéáèÝóéìç, çäåí Ý÷åé "
+"öïñôùèåß."
+
+msgid "Language"
+msgstr "Ãëþóóá"
+
+msgid "Last Modified"
+msgstr "Ôåëåõôáßá Ôñïðïðïßçóç"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Åðßèåôï"
+
+msgid "Matching"
+msgstr "ÔáéñéÜæåé ìå"
+
+msgid "Maximum number of pages"
+msgstr "ÌÝãéóôïò áñéèìüò óåëßäùí"
+
+msgid "Message"
+msgstr "ÌÞíõìá"
+
+#: lib/Block/minisearch.php:3
+msgid "Mini Search"
+msgstr "ÃñÞãïñç ÁíáæÞôçóç"
+
+#: lib/Driver/ldap.php:298
+msgid "Missing DN in LDAP source configuration."
+msgstr "Ëåßðåé ôï DN áðü ôçí ðáñáìåôñïðïßçóç ôïõ LDAP"
+
+msgid "Mobile Phone"
+msgstr "Êéíçôü ÔçëÝöùíï"
+
+#: lib/Driver/ldap.php:326 lib/Driver/ldap.php:343
+msgid "Modify failed: (%s) %s"
+msgstr "Ç áëëáãÞ áðÝôõ÷å: (%s) %s"
+
+#: lib/api.php:965
+msgid "More than 1 entry found"
+msgstr "ÂñÝèçêáí ðåñéóóüôåñåò áðü 1 åããñáöÝò"
+
+msgid "More than 1 entry returned."
+msgstr "ÅðéóôñÜöçêáí ðåñéóóüôåñåò áðü ìßá êáôá÷ùñÞóåéò."
+
+msgid "Move"
+msgstr "Ìåôáêßíçóç"
+
+#: templates/prefs/columnselect.inc:248
+msgid "Move left"
+msgstr "Ìåôáêßíçóç áñéóôåñÜ"
+
+#: templates/prefs/columnselect.inc:250
+msgid "Move right"
+msgstr "Ìåôáêßíçóç äåîéÜ"
+
+#: data.php:31 templates/data/import.inc:21
+msgid "Mulberry Address Book"
+msgstr "ÄéåõèõíóéïãñÜöïò Mulberry"
+
+msgid "Mulberry addressbook sucessfully imported"
+msgstr "¸ãéíå åðéôõ÷þò åéóáãùãÞ ôïõ äéåõèõíóéïãñÜöïõ Mulberry"
+
+#: lib/api.php:886
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "ÕðÜñ÷ïõí ðïëëÜ Üôïìá ìå äéåýèõíóç [%s], êáíÝíá üìùò ìå üíïìá [%s]"
+
+#: config/sources.php.dist:165 config/sources.php.dist:294
+msgid "My Addressbook"
+msgstr "Ï ÄéåõèõíóéïãñÜöïò ìïõ"
+
+#: addressbooks.php:119
+msgid "My Address Books"
+msgstr "Ïé ÄéåõèõíóéïãñÜöïé ìïõ"
+
+msgid "Name"
+msgstr "¼íïìá"
+
+msgid "Name Format"
+msgstr "ÌïñöÞ ÏíïìÜôùí"
+
+#: config/sources.php.dist:72
+msgid "Netcenter Member Directory"
+msgstr "ÄéåõèõíóéïãñÜöïò ìÝëïõò Netcenter"
+
+msgid "New Contact"
+msgstr "ÍÝá ÅðáöÞ"
+
+msgid "New List"
+msgstr "ÍÝá Ëßóôá"
+
+msgid "Next"
+msgstr "Åðüìåíï"
+
+#: config/attributes.php.dist:208
+msgid "Nickname"
+msgstr "Øåõäþíõìï"
+
+#, c-format
+msgid "No %s entry found for %s."
+msgstr "Äå âñÝèçêå %s êáôá÷þñéóç ãéá %s."
+
+#: lib/api.php:936
+msgid "No address books found."
+msgstr "Äå âñÝèçêå ÄéåõèõíóéïãñÜöïò."
+
+msgid "No contacts found"
+msgstr "Äå âñÝèçêáí åðáöÝò"
+
+#: lib/api.php:338
+msgid "No vCard data was found."
+msgstr "Äå âñÝèçêáí äåäïìÝíá vCard."
+
+msgid "None"
+msgstr "ÊáíÝíá"
+
+msgid ""
+"None of the available address books are configured to allow you to add new "
+"entries to them. If you believe this is an error, please contact your system "
+"administrator."
+msgstr ""
+"ÊáíÝíáò áðü ôïõò äéáèÝóéìïõò äéåõèõíóéïãñÜöïõò äåí Ý÷åé ñõèìéóôåß þóôå íá "
+"ìðïñåß íá êáôá÷ùñåß åããñáöÝò. Ìðïñåßôå íá åíçìåñþóåôå ôï äéá÷åéñéóôÞ ôïõ "
+"óõóôÞìáôïò óáò."
+
+msgid "Notes"
+msgstr "Óçìåéþóåéò"
+
+msgid "Number of items per page"
+msgstr "Áñéèìüò ïíïìÜôùí áíÜ óåëßäá"
+
+#: lib/api.php:436
+msgid "Object not found"
+msgstr "Äå âñÝèçêå ôï áíôéêåßìåíï"
+
+#: config/attributes.php.dist:213
+msgid "Office"
+msgstr "Ãñáöåßï"
+
+msgid "Options"
+msgstr "ÅðéëïãÝò"
+
+msgid "Options for"
+msgstr "ÅðéëïãÝò ãéá"
+
+msgid "Other Options"
+msgstr "Áëëåò ÅðéëïãÝò"
+
+msgid "Outlook"
+msgstr "Ðñüãñáììá Outlook"
+
+#: config/attributes.php.dist:180
+msgid "PGP Public Key"
+msgstr "Äçìüóéï êëåéäß PGP"
+
+#: lib/Driver.php:453
+msgid "Permission denied"
+msgstr "Áñíçóç ðñüóâáóçò"
+
+msgid "Pine Address Book"
+msgstr "ÄéåõèõíóéïãñÜöïò Pine"
+
+msgid "Pine addressbook sucessfully imported"
+msgstr "¸ãéíå åðéôõ÷þò åéóáãùãÞ ôïõ äéåõèõíóéïãñÜöïõ Pine"
+
+msgid "Please choose an address book to add a contact to."
+msgstr ""
+"Ðáñáêáëþ åðéëÝîôå Ýíá äéåõèõíóéïãñÜöï ãéá íá ðñïóèÝóåôå ìßá êáñôÝëá óå áõôüí."
+
+msgid "Please enter the name of the new list:"
+msgstr "Ðáñáêáëþ äþóôå ôï üíïìá ãéá ôç íÝá ëßóôá:"
+
+msgid "Please select a directory:"
+msgstr "Ðáñáêáëþ åðéëÝîôå Ýíá êáôÜëïãï:"
+
+#: config/sources.php.dist:373
+msgid "Private Address Book"
+msgstr "Ðñïóùðéêüò ÄéåõèõíóéïãñÜöïò"
+
+msgid "Problem"
+msgstr "Ðñüâëçìá"
+
+msgid "Problem?"
+msgstr "Ðñüâëçìá;"
+
+#: lib/Driver/ldap.php:139
+msgid "Query failed: (%s) %s"
+msgstr "Ç áíáæÞôçóç áðÝôõ÷å: (%s) %s"
+
+msgid "Quick Search"
+msgstr "ÃñÞãïñç ÁíáæÞôçóç"
+
+#: lib/Driver/ldap.php:183 lib/Driver/ldap.php:191 lib/Driver/ldap.php:423
+msgid "Read failed: (%s) %s"
+msgstr "Ç áíÜãíùóç áðÝôõ÷å: (%s) %s"
+
+#: templates/browse/footer.inc:6
+msgid "Records displayed:"
+msgstr "Åìöáíßóèçêáí åããñáöÝò:"
+
+#: templates/prefs/columnselect.inc:240
+msgid "Remove column"
+msgstr "Áöáßñåóç óôÞëçò"
+
+#: templates/browse/actions.inc:5
+msgid "Remove from this list"
+msgstr "Áöáßñåóç áðü ôç Ëßóôá"
+
+#: templates/data/import.inc:26
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Íá áíôéêáôáóôáèåß ï õðÜñ÷ùí ÄéåõèõíóéïãñÜöïò ìå áõôüí ðïõ åéóÜãåôå; "
+"<strong>ÐÑÏÓÏ×Ç: Áõôü èá äéáãñÜøåé üëåò ôéò åããñáöÝò óå áõôü ôï "
+"ÄéåõèõíóéïãñÜöï.</strong>"
+
+#: lib/Driver.php:343
+msgid "Requested object not found."
+msgstr "Ôï áíôéêåßìåíï ðïõ æçôÞèçêå äåí âñÝèçêå."
+
+msgid "Reset"
+msgstr "ÅðáíáöïñÜ"
+
+#: add.php:46 templates/browse/search.inc:126
+msgid "Reset to Defaults"
+msgstr "ÅðáíáöïñÜ óôá ÐñïêáèïñéóìÝíá"
+
+#: config/attributes.php.dist:186
+msgid "S/MIME Public Certificate"
+msgstr "Äçìüóéï Ðéóôïðïéçôéêü S/MIME"
+
+#: add.php:46 edit.php:57
+msgid "Save"
+msgstr "ÁðïèÞêåõóç"
+
+msgid "Save Changes"
+msgstr "ÁðïèÞêåõóç áëëáãþí"
+
+msgid "Search"
+msgstr "ÁíáæÞôçóç"
+
+msgid "Search Results"
+msgstr "ÁðïôåëÝóìáôá ÁíáæÞôçóçò"
+
+msgid "Search failed"
+msgstr "ÁíáæÞôçóç áðÝôõ÷å"
+
+msgid "Search failed %s"
+msgstr "ÁíáæÞôçóç áðÝôõ÷å %s"
+
+msgid "Searching Options"
+msgstr "ÅðéëïãÝò ÁíáæÞôçóçò"
+
+msgid "Searching ..."
+msgstr "ÁíáæÞôçóç ..."
+
+msgid "Search&nbsp;Results"
+msgstr "ÁðïôåëÝóìáôá&nbsp;ÁíáæÞôçóçò"
+
+msgid "Select"
+msgstr "ÅðéëïãÞ"
+
+msgid "Select Address Book"
+msgstr "ÅðéëÝîôå ÄéåõèõíóéïãñÜöï"
+
+msgid "Select List"
+msgstr "Ëßóôá ÅðéëïãÞò"
+
+#: templates/addressbooks.inc:66
+msgid "Select an address book to delete"
+msgstr "ÅðéëÝîôå Ýíá äéåõèõíóéïãñÜöï ãéá äéáãñáöÞ"
+
+#: templates/addressbooks.inc:90
+msgid "Select an address book to edit"
+msgstr "ÅðéëÝîôå Ýíá äéåõèõíóéïãñÜöï ãéá åðåîåñãáóßá"
+
+msgid "Select the address book to export from:"
+msgstr "ÅðéëÝîôå ôï ÄéåõèõíóéïãñÜöï áðü ôïí ïðïßï èá ãßíåé ç åîáãùãÞ:"
+
+msgid "Select the address book to import to:"
+msgstr "ÅðéëÝîôå ôï ÄéåõèõíóéïãñÜöï ðïõ èá åéóá÷èïýí:"
+
+msgid "Select the destination to import to:"
+msgstr "ÅðéëÝîôå ðïõ èá ãßíåé ç åéóáãùãÞ:"
+
+msgid "Select the export format:"
+msgstr "ÅðéëÝîôå ôç ìïñöÞ ôïõ áñ÷åßïõ ÅîáãùãÞò:"
+
+msgid "Select the file to import:"
+msgstr "ÅðéëÝîôå ôï áñ÷åßï ðïõ èá åéóá÷èåß:"
+
+msgid "Select the format of the source file:"
+msgstr "ÅðéëÝîôå ôçí ìïñöÞ ôïõ áñ÷åßïõ ÅéóáãùãÞò:"
+
+msgid "Select the format to export to:"
+msgstr "ÅðéëÝîôå ôçí ìïñöÞ åîáãùãÞò ôùí äåäïìÝíùí:"
+
+msgid "Select the format to import from:"
+msgstr "ÅðéëÝîôå ôç ìïñöÞ åéóáãùãÞò ôùí äåäïìÝíùí:"
+
+msgid "Select the format used to display names:"
+msgstr "ÅðéëÝîôå ôç ìïñöÞ ðïõ èá åìöáíßæïíôáé ôá ïíüìáôá:"
+
+msgid "Select the source to export from:"
+msgstr "ÅðéëÝîôå áðü ðïõ èá åîÜãåôå ôá äåäïìÝíá:"
+
+msgid "Select view to display by default."
+msgstr "ÅðéëïãÞ ôçò ðñïåðéëåãìÝíçò ðñïâïëÞò."
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "ÅðéëïãÞ ôçò ðñïåðéëåãìÝíçò ðñïãïëÞò, ôáîéíüìçóçò êáé óåëéäïðïßçóçò."
+
+msgid "Select which fields to display in the address lists."
+msgstr "ÅðéëïãÞ ôùí ðåäßùí ðïõ èá åìöáíßæïíôáé óôç ëßóôá ôùí äéåõèýíóåùí."
+
+msgid "Select which format to display names."
+msgstr "ÅðéëÝîôå ìå ðïéÜ ìïñöÞ èá åìöáíßæïíôáé ôá ïíüìáôá:"
+
+msgid "Select your preferred language:"
+msgstr "ÅðéëÝîôå ôçí ðñïôéìïýìåíç ãëþóóá:"
+
+msgid "Selected Columns:"
+msgstr "ÅðéëåãìÝíåò ÓôÞëåò:"
+
+#: add.php:59
+msgid "Selected address book '%s'."
+msgstr "ÅðéëåãìÝíïò ÄéåõèõíóéïãñÜöïò '%s'."
+
+#, c-format
+msgid "Send mail to %s"
+msgstr "ÁðïóôïëÞ email ðñïò %s"
+
+msgid "Set your preferred display language."
+msgstr "Ñõèìßóôå ôçí ãëþóóá ðñïôßìçóçò óáò."
+
+#: config/sources.php.dist:230
+msgid "Shared Directory"
+msgstr "Êïéíü÷ñçóôïò ÊáôÜëïãïò"
+
+msgid "Sho_w All"
+msgstr "ÅìöÜíéóç ¼ëùí"
+
+msgid "Show"
+msgstr "ÅìöÜíéóç"
+
+msgid "Show All"
+msgstr "ÅìöÜíéóç ¼ëùí"
+
+msgid "Show Contacts"
+msgstr "ÅìöÜíéóç Åðáöþí"
+
+msgid "Show Lists"
+msgstr "ÅìöÜíéóç ÏìÜäùí"
+
+msgid "Show _Contacts"
+msgstr "ÅìöÜíéóç Åðáöþí"
+
+msgid "Show _Lists"
+msgstr "ÅìöÜíéóç ÏìÜäùí"
+
+msgid "Some of Turba's configuration files are missing:"
+msgstr "ÊÜðïéá áðü ôá áñ÷åßá ñõèìßóåùí ôïõ Turba's ëåßðïõí:"
+
+msgid "Sort Direction"
+msgstr "Êáôåýèõíóç Ôáîéíüìçóçò"
+
+#: lib/api.php:154
+msgid "Sources"
+msgstr "ÐçãÝò"
+
+msgid "Specify where you want advanced search results to appear."
+msgstr ""
+"Êáèïñßóôå ðïõ èá åìöáíßæïíôáé ôá áðïôåëÝóìáôá ôùí åéäéêþí (advanced) "
+"áíáæçôÞóåùí."
+
+msgid "Success"
+msgstr "Åðéôõ÷ßá"
+
+#: browse.php:147
+msgid "Successfully added %s to %s"
+msgstr "%s ðñïóôÝèçêå åðéôõ÷þò óôï %s"
+
+msgid "Tab separated values"
+msgstr "ÔéìÞò äéá÷ùñéóìÝíåò ìå 'Tab'"
+
+#: data.php:234
+msgid "The address book could not be purged: %s"
+msgstr "Ï ÄéåõèõíóéïãñÜöïò äåí ìðïñåß íá äéáãñáöåß: %s"
+
+#: display.php:23 edit.php:24 vcard.php:22
+msgid "The contact you requested does not exist."
+msgstr "Ç åðáöÞ ðïõ æçôÞóáôå äåí õðÜñ÷åé."
+
+msgid "The data got lost"
+msgstr "Ôá äåäïìÝíá ÷Üèçêáí"
+
+msgid "The data got lost."
+msgstr "Ôá äåäïìÝíá ÷Üèçêáí."
+
+msgid "The file contained no data."
+msgstr "Ôï áñ÷åßï äåí ðåñéåß÷å äåäïìÝíá."
+
+msgid "There are no browseable address books."
+msgstr "Äåí õðÜñ÷ïõí äéåõèõíóéïãñÜöïé ôïõò ïðïßïõò ìðïñåßôå íá äåßôå."
+
+msgid "There are no writeable address books."
+msgstr "Äåí õðÜñ÷ïõí äéåõèõíóéïãñÜöïé óôïõò ïðïßïõò ìðïñåßôå íá ãñÜøåôå."
+
+#: add.php:38
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Äåí õðÜñ÷ïõí äéåõèõíóéïãñÜöïé óôïõò ïðïßïõò ìðïñåßôå íá ãñÜøåôå. ÊáíÝíáò áðü "
+"ôïõò äéáèÝóéìïõò ÄéåõèõíóéïãñÜöïõò äåí Ý÷åé ñõèìéóôåß íá óáò åðéôñÝðåé íá "
+"ðñïóèÝóåôå åããñáöÝò. Áí íïìßæåôáé üôé áõôü åßíáé ëÜèïò, ðáñáêáëþ "
+"åðéêïéíùíÞóôå ìå ôï äéá÷åéñéóôÞ ôïõ óõóôÞìáôïò."
+
+msgid ""
+"There was a problem with the file upload. The file may have been larger than "
+"the maximum allowed size."
+msgstr ""
+"ÕðÞñîå ðñüâëçìá êáôÜ ôçí ìåôáöïñÜ ôïõ áñ÷åßïõ. Ôï áñ÷åßï ìðïñåß íá åßíáé "
+"ìåãáëýôåñï áðü ôï åðéôñåðüìåíï ìÝãåèïò."
+
+#: add.php:107
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Ðñüâëçìá êáôÜ ôçí ðñïóèÞêç ôçò íÝáò åðáöÞò. ÅðéêïéíùíÞóôå ìå ôï äéá÷åéñéóôÞ "
+"ôïõ óõóôÞìáôïò."
+
+msgid ""
+"There was an error adding this object. Contact your system administrator for "
+"further help."
+msgstr ""
+"ÕðÞñîå ðñüâëçìá óôçí ðñïóèÞêç ôïõ áíôéêåéìÝíïõ. ÅðéêïéíùíÞóôå ìå ôïí "
+"äéá÷åéñéóôÞ."
+
+msgid "There was an error creating a new list."
+msgstr "ÐáñïõóéÜóôçêå óöÜëìá êáôÜ ôçí äçìéïõñãßá ôçò íÝáò ëßóôáò."
+
+#: browse.php:154
+msgid "There was an error deleting %s from the source address book."
+msgstr "Ðñüâëçìá êáôÜ ôç äéáãñáöÞ %s áðü ôï ÄéåõèõíóéïãñÜöï."
+
+# 
+#: delete.php:31
+msgid "There was an error deleting this contact: %s"
+msgstr "Ðñüâëçìá êáôÜ ôç äéáãñáöÞ áõôÞò ôçò åðáöÞò: %s."
+
+#: browse.php:93
+msgid "There was an error deleting this object."
+msgstr "ÐáñïõóéÜóôçêå óöÜëìá êáôÜ ôçí äéáãñáöÞ áõôïý ôïõ áíôéêåéìÝíïõ."
+
+msgid ""
+"There was an error deleting this object. Contact your system administrator "
+"for further help."
+msgstr ""
+"ÐáñïõóéÜóôçêå ðñüâëçìá êáôÜ ôçí äéáãñáöÞ áõôïý ôïõ áíôéêåéìÝíïõ. "
+"ÅðéêïéíùíÞóôå ìå ôïí äéá÷åéñéóôÞ ãéá ðåñéóóüôåñåò ðëçñïöïñßåò."
+
+msgid "There was an error displaying the select List"
+msgstr "ÐáñïõóéÜóôçêå óöÜëìá êáôÜ åìöÜíéóç ôçò ëßóôáò"
+
+msgid "There was an error importing the data."
+msgstr "ÐáñïõóéÜóôçêå óöÜëìá êáôÜ ôçí åéóáãùãÞ äåäïìÝíùí."
+
+#: data.php:249
+msgid "There was an error importing the data: %s"
+msgstr "Ðñüâëçìá êáôÜ ôçí åéóáãùãÞ äåäïìÝíùí: %s"
+
+#: lib/api.php:334
+msgid "There was an error importing the iCalendar data."
+msgstr "ÐáñïõóéÜóèçêå óöÜëìá êáôÜ ôçí åéóáãùãÞ äåäïìÝíùí iCalendar."
+
+msgid "There was an error importing the uploaded file"
+msgstr "ÐáñïõóéÜóôçêå óöÜëìá êáôÜ ìåôáöïñÜ ôïõ áñ÷åßïõ óôïí server"
+
+msgid "There was an error importing the vCard data."
+msgstr "ÐáñïõóéÜóôçêå óöÜëìá êáôÜ ôçí åéóáãùãÞ ôçò ØçöéáêÞò ÊÜñôáò."
+
+msgid "There was an error removing this object."
+msgstr "ÐáñïõóéÜóôçêå óöÜëìá êáôÜ ôçí äéáãñáöÞ áõôïý ôïõ áíôéêåéìÝíïõ."
+
+#: edit.php:84
+msgid "There was an error updating this entry: %s"
+msgstr "ÐáñïõóéÜóèçêå óöÜëìá êáôÜ ôçí åíçìÝñùóç áõôÞò ôçò åããñáöÞò: %s"
+
+#: data.php:151
+msgid "There were no addresses to export."
+msgstr "Äåí õðÜñ÷ïõí äéåõèýíóåéò ãéá åîáãùãÞ."
+
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Áõôïß ïé äéåõèõíóéïãñÜöïé èá åìöáíßæïíôáé êáé ìå áõôÞ ôç óåéñÜ:"
+
+#: templates/prefs/columnselect.inc:243
+msgid "These columns will display in this order:"
+msgstr "ÁõèÝò ïé óôÞëåò èá åìöáíßæïíôáé êáé ìå áõôÞ ôç óåéñÜ:"
+
+#: lib/Driver.php:403 lib/Driver.php:444
+msgid "This address book is read-only"
+msgstr "Áõôüò ï ÄéåõèõíóéïãñÜöïò åßíáé ìüíï ãéá áíÜãíùóç"
+
+msgid ""
+"This file controls the default preferences for Turba, and also controls "
+"which preferences users can alter."
+msgstr ""
+"Áõôü ôï áñ÷åßï åëÝã÷åé ôéò ðñïêáèïñéóìÝíåò ñõèìßóåéò ôïõ Turba, êáé åðßóçò "
+"ðïéåò áðü áõôÝò ìðïñïýí íá ôñïðïðïéÞóïõí ïé ÷ñÞóôåò."
+
+msgid ""
+"This file controls the stylesheet that is used to set colors and fonts in "
+"addition to or overriding Horde defaults."
+msgstr ""
+"Áõôü ôï áñ÷åßï ðåñéÝ÷åé ôéò ñõèìßóåéò ãéá ôá ÷ñþìáôá êáé ôéò ãñáììáôïóåéñÝò."
+
+msgid ""
+"This file defines the Turba global attribute names and types - names, email "
+"addresses, etc."
+msgstr ""
+"Áõôü ôï áñ÷åßï ïñßæåé ôéò ãåíéêÝò éäéüôçôåò ôïõ ðñïãñÜììáôïò Turba - ôïõò "
+"ôýðïõò, ôï üíïìá, ôï email, ê.ô.ë"
+
+msgid "This file defines the list of available sources for Turba."
+msgstr "Áõôü ôï áñ÷åßï ïñßæåé ôçí ëßóôá ìå ôéò äéáèÝóéìåò ðçãÝò ôïõ Turba."
+
+#: data.php:211
+msgid "This file format is not supported."
+msgstr "Áõôç ç ìïñöÞ áñ÷åßïõ äåí õðïóôçñßæåôáé."
+
+msgid ""
+"This is the main Turba configuration file. It contains paths and options for "
+"the Turba scripts."
+msgstr ""
+"Áõôü åßíáé ôï âáóéêü áñ÷åßï ñõèìßóåùí ôïõ ðñïãñÜììáôïò Turba. ÐåñéëáìâÜíåé "
+"ôá ìïíïðÜôéá êáé ôéò åðéëïãÝò ãéá üëá ôïõ ôá script."
+
+msgid "This number must be at least one."
+msgstr "Áõôüò ï áñéèìüò ðñÝðåé íá åßíáé ôïõëÜ÷éóôïí Ýíá."
+
+#, c-format
+msgid "This person already has a %s entry in the address book."
+msgstr "ÁõôÞ ç åðáöÞ %s Ý÷åé Þäç êáôá÷ùñçèåß óôï äéåõèõíóéïãñÜöï."
+
+msgid "This person is already in your address book."
+msgstr "ÁõôÞ ç åðáöÞ õðÜñ÷åé Þäç óôï äéåõèõíóéïãñÜöï óáò."
+
+msgid "This value must be a number."
+msgstr "ÁõôÞ ç ôéìÞ ðñÝðåé íá åßíáé áñéèìüò."
+
+msgid "Title"
+msgstr "Ôßôëïò"
+
+msgid "Turba is not properly configured"
+msgstr "Ôï ðñüãñáììá Turba äåí Ý÷åé ñõèìéóôåß ðëÞñùò."
+
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "Äåí ìðïñïýí íá ãßíïõí ïé ñõèìßóåéò ôïõ %s."
+
+#: edit.php:57
+msgid "Undo Changes"
+msgstr "Áíáßñåóç Áëëáãþí"
+
+msgid "Unnamed Contact"
+msgstr "Óôçí åðáöÞ äåí Ý÷åé óõìðëçñùèåß üíïìá."
+
+#: lib/api.php:466
+msgid "Unsupported Content-Type."
+msgstr "ÌÞ õðïóôçñéæüìåíïò ôýðïò Ðåñéå÷ïìÝíïõ."
+
+msgid "User Options"
+msgstr "ÅðéëïãÝò ×ñÞóôç"
+
+#: config/sources.php.dist:131
+msgid "Verisign Directory"
+msgstr "ÊáôÜëïãïò Verisign"
+
+#: templates/browse/contactrow.inc:31
+msgid "View '%s'"
+msgstr "ÅìöÜíéóç '%s'"
+
+#: minisearch.php:80
+msgid "View Contact"
+msgstr "ÅìöÜíéóç ÅðáöÞò"
+
+msgid "View map"
+msgstr "ÅìöÜíéóç ×Üñôç"
+
+msgid "View to display by default:"
+msgstr "Ç ðñïâïëÞ ðïõ èá åìöáíßæåôáé:"
+
+msgid "Warning"
+msgstr "Ðñïåéäïðïßçóç"
+
+msgid "Warning: This deletes all entries in your current address book."
+msgstr ""
+"ÐÑÏÓÏ×Ç: Áõôü èá äéáãñÜøåé üëåò ôéò åããñáöÝò óôïí åðéëåãìÝíï ÄéåõèõíóéïãñÜöï."
+
+msgid "Web Site"
+msgstr "ÇëåêôñïíéêÞ Äéåýèõíóç(URL)"
+
+#: config/attributes.php.dist:198
+msgid "Website URL"
+msgstr "Óýíäåóç Äéêôõáêïý Ôüðïõ (Website)"
+
+msgid "What is the delimiter character?"
+msgstr "Ðïéüò åßíáé ï äéá÷ùñéóôéêüò ÷áñáêôÞñáò;"
+
+msgid "Work Address"
+msgstr "Äéåýèõíóç Åñãáóßáò"
+
+#: config/attributes.php.dist:114
+msgid "Work City"
+msgstr "Ðüëç Åñãáóßáò"
+
+#: config/attributes.php.dist:129
+msgid "Work Country"
+msgstr "×þñá Åñãáóßáò"
+
+#: config/attributes.php.dist:146
+msgid "Work Phone"
+msgstr "ÔçëÝöùíï Åñãáóßáò"
+
+#: config/attributes.php.dist:124
+msgid "Work Postal Code"
+msgstr "Ôá÷. Êþäéêáò Åñãáóßáò"
+
+#: config/attributes.php.dist:119
+msgid "Work State/Province"
+msgstr "Åðáñ÷ßá Åñãáóßáò"
+
+msgid "You are creating a distribution list."
+msgstr "Äçìéïõñãåßôå ìßá ëßóôá äéáíïìÞò."
+
+msgid ""
+"You didn't map any fields from the imported file to the corresponding fields "
+"in Turba."
+msgstr ""
+"Äåí áíôéóôïé÷Þèçêáí ðåäßá áðü ôï áñ÷åßï ðïõ åéóÞ÷èç óôá áíôßóôïé÷á ôïõ "
+"äéåõèõíóéïãñÜöïõ."
+
+#: display.php:48 edit.php:44
+msgid "You do not have permission to view this contact."
+msgstr "Äåí Ý÷åôå åîïõóéïäüôçóç íá äåßôå áõôÞ ôçí åðáöÞ."
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr "Äåí Ý÷åôå åîïõóéïäüôçóç íá äåßôå áõôü ôï áíôéêåßìåíï."
+
+#: templates/browse/javascript.inc:41
+msgid "You must select a target address book."
+msgstr "ÐñÝðåé íá åðéëÝîåôå ôï ÄéåõèõíóéïãñÜöï êáôåýèõíóçò."
+
+#: templates/browse/javascript.inc:18
+msgid "You must select a target list."
+msgstr "ÐñÝðåé íá åðéëÝîåôå Ëßóôá êáôåýèõíóçò."
+
+msgid "You must select at least one contact first."
+msgstr "ÐñÝðåé ðñþôá íá åðéëÝîåôå ìßá åðáöÞ."
+
+#: templates/browse/javascript.inc:58
+msgid "You must select at least one entry first."
+msgstr "ÐñÝðåé íá åðéëÝîåôå ðñþôá ôïõëÜ÷éóôïí ìéá åããñáöÞ."
+
+#: edit.php:48
+msgid "You only have permission to view this contact."
+msgstr "¸÷åôå åîïõóéïäüôçóç íá äåßôå ìüíï áõôÞ ôçí åðáöÞ."
+
+msgid "Your Information"
+msgstr "Ïé ðëçñïöïñßåò Óáò"
+
+msgid "Your options have been updated."
+msgstr "Ïé åðéëïãÝò óáò Ý÷ïõí áðïèçêåõôåß."
+
+msgid "[Edit]"
+msgstr "[Åðåîåñãáóßá]"
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[÷ùñßò ôéìÞ]"
+
+msgid "_Add"
+msgstr "ÐñïóèÞêç"
+
+msgid "_Browse"
+msgstr "Ëßóôá"
+
+msgid "_Delete"
+msgstr "ÄéáãñáöÞ"
+
+msgid "_Help"
+msgstr "ÂïÞèåéá"
+
+msgid "_Import/Export"
+msgstr "ÅéóáãùãÞ/ÅîáãùãÞ"
+
+#: templates/browse/actions.inc:46
+msgid "_Lists"
+msgstr "Ëßóôåò"
+
+#: lib/IMP.php:947
+msgid "_Log out"
+msgstr "Åîïäïò"
+
+#: lib/Turba.php:551
+msgid "_My Address Books"
+msgstr "Ïé ÄéåõèõíóéïãñÜöïé ìïõ"
+
+#: lib/Turba.php:557
+msgid "_New Contact"
+msgstr "ÍÝá ÅðáöÞ"
+
+#: templates/message/navbar_actions.inc:31
+msgid "_Options"
+msgstr "ÅðéëïãÝò"
+
+#: templates/browse/actions.inc:5
+msgid "_Remove from this list"
+msgstr "Áöáßñåóç áðü áõôÞ ôç ëßóôá"
+
+msgid "_Search"
+msgstr "ÁíáæÞôçóç"
+
+msgid "add column"
+msgstr "ðñïóèÞêç óôÞëçò"
+
+msgid "businesscategory"
+msgstr "Êáôçãïñßá Åñãáóßáò"
+
+msgid "move left"
+msgstr "Ìåôáêßíçóç ÁñéóôåñÜ"
+
+msgid "move right"
+msgstr "Ìåôáêßíçóç ÄåîéÜ"
+
+#: config/prefs.php.dist:138
+msgid "no formatting"
+msgstr "×ùñßò ìïñöïðïßçóç"
+
+msgid "remove column"
+msgstr "Áöáßñåóç ÓôÞëçò"
+
+#: templates/browse/actions.inc:22
+msgid "to Selected Address Book"
+msgstr "óôïí åðéëåãìÝíï ÄéåõèõíóéïãñÜöï"
+
+#: templates/browse/actions.inc:31
+msgid "to a Contact List"
+msgstr "óå ëßóôá Åðáöþí"
+
+#: templates/browse/actions.inc:21
+msgid "to a different Address Book"
+msgstr "óå äéáöïñåôéêü ÄéåõèõíóéïãñÜöï"
+
+msgid "vCard"
+msgstr "ØçöéáêÞ ÊÜñôá"
diff --git a/turba/po/es_ES.po b/turba/po/es_ES.po
new file mode 100644 (file)
index 0000000..fe57fd7
--- /dev/null
@@ -0,0 +1,1772 @@
+# Spanish translations for turba package
+# Traducciones al español para el paquete turba.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the turba package.
+# Automatically generated, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.2-rc4\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-05-24 09:49+0200\n"
+"PO-Revision-Date: 2008-05-24 09:49+0200\n"
+"Last-Translator: Manuel P. Ayala <mayala@unex.es>\n"
+"Language-Team: i18n@lists.horde.org\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Añadir una Libreta de direcciones de IMSP"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Eliminar Libreta de direcciones de IMSP"
+
+#: data.php:376
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" ya existe y no se importó."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"Se ha actualizado \"%s\", pero se ha producido un error al guardar el "
+"archivo cargado: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "Se ha actualizado \"%s\"."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "No se copió \"%s\" porque es una lista."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "No se trasladó \"%s\" porque es una lista."
+
+#: config/.bak/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Nombre Apellidos\"  (p.e. Juan Nadie)"
+
+#: config/.bak/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Apellidos, Nombre\" (p.e. Nadie, Juan)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "Se ha añadido %s."
+
+#: data.php:401
+#, php-format
+msgid "%s file successfully imported."
+msgstr "El archivo %s se ha importado satisfactoriamente."
+
+#: lib/Driver.php:555
+#, php-format
+msgid "%s of %s"
+msgstr "%s de %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s al %s de %s"
+
+#: lib/Turba.php:560
+#, php-format
+msgid "%s's Address Book"
+msgstr "Direcciones de %s"
+
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr "Hace falta un navegador con soporte de iFrames"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Acceso denegado a %s"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Añadir"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Añadir contacto"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Añadir Libreta de direcciones"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Añadir archivo"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Añadir a"
+
+#: lib/Driver.php:1876 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "La adición de contactos no está disponible."
+
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr "Direcciones"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Lista de Libretas de direcciones"
+
+#: lib/Views/Browse.php:78 config/.bak/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Listado de libreta de direcciones"
+
+#: config/.bak/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Libretas de direcciones"
+
+#: data.php:356
+msgid "Address book successfully purged."
+msgstr "Se ha vaciado correctamente la libreta de direcciones."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Libretas de direcciones que no se mostrarán:"
+
+#: search.php:199 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Búsqueda avanzada"
+
+#: config/.bak/attributes.php.dist:83
+msgid "Alias"
+msgstr "Apodo"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Todo"
+
+#: lib/api.php:916
+msgid "Already Exists"
+msgstr "Ya existe"
+
+#: config/.bak/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Aniversarios"
+
+#: config/.bak/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Aniversario"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "¿Seguro que desea eliminar %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "¿Seguro que desea eliminar los contactos seleccionados?"
+
+#: config/.bak/attributes.php.dist:378
+msgid "Assistant"
+msgstr "Asistente"
+
+#: search.php:196 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Búsqueda simple"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Ha fallado la vinculación: (%s) %s"
+
+#: config/.bak/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Cumpleaños"
+
+#: config/.bak/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Cumpleaños"
+
+#: contact.php:106 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Sin nombre"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Ambas"
+
+#: addressbooks/index.php:39 templates/addressbook_list.php:29
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Examinar"
+
+#: config/.bak/attributes.php.dist:288
+msgid "Business Category"
+msgstr "Categoría de negocio"
+
+#: data.php:86
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "No se puede añadir un grupo a sí mismo."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr ""
+"No se pueden borrar todas las entradas de Libretas de direcciones de %s"
+
+#: config/.bak/attributes.php.dist:350
+msgid "Category"
+msgstr "Categoría"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Cambiar la ordenación de %s a %s"
+
+#: addressbooks/index.php:41 templates/addressbook_list.php:33
+msgid "Change Permissions"
+msgstr "Cambiar permisos"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Comprobar Todas/Ninguna"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Comprobar _Todas/Ninguna"
+
+#: config/.bak/attributes.php.dist:115
+msgid "Children"
+msgstr "Hijo"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Elija una libreta de direcciones."
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Elegir las Libretas de direcciones mostradas y su orden:"
+
+#: config/.bak/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Elija las Libretas de direcciones a utilizar."
+
+#: templates/prefs/columnselect.inc:41
+msgid "Click an address book to sort its columns:"
+msgstr "Seleccione una libreta de direcciones para ordenar sus columnas:"
+
+#: templates/block/minisearch.inc:26
+msgid "Close"
+msgstr "Cerrar"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Cerrar búsqueda"
+
+#: config/.bak/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Opciones de columna"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Valores separados por comas"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Valores separados por comas (Outlook de Microsoft)"
+
+#: config/.bak/attributes.php.dist:476
+msgid "Common Address Extended"
+msgstr "Dirección habitual extendida"
+
+#: config/.bak/attributes.php.dist:494
+msgid "Common City"
+msgstr "Localidad habitual"
+
+#: config/.bak/attributes.php.dist:512
+msgid "Common Country"
+msgstr "Pais habitual"
+
+#: config/.bak/attributes.php.dist:420
+msgid "Common Phone"
+msgstr "Teléfono habitual"
+
+#: config/.bak/attributes.php.dist:488
+msgid "Common Post Office Box"
+msgstr "Buzón postal habitual"
+
+#: config/.bak/attributes.php.dist:506
+msgid "Common Postal Code"
+msgstr "Código postal habitual"
+
+#: config/.bak/attributes.php.dist:500
+msgid "Common State/Province"
+msgstr "Estado/Provincia habitual"
+
+#: config/.bak/attributes.php.dist:482
+msgid "Common Street"
+msgstr "Calle habitual"
+
+#: config/.bak/attributes.php.dist:445
+msgid "Common Video Call"
+msgstr "Videollamada habitual"
+
+#: config/.bak/sources.php.dist:243 config/.bak/sources.php.dist:922
+msgid "Communications"
+msgstr "Comunicaciones"
+
+#: config/.bak/attributes.php.dist:294
+msgid "Company"
+msgstr "Compañía"
+
+#: config/.bak/attributes.php.dist:223
+msgid "Company Address"
+msgstr "Domicilio laboral"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:523 lib/api.php:577
+#: lib/api.php:630 lib/api.php:678 lib/api.php:733 lib/api.php:792
+#: lib/api.php:842 lib/api.php:978 lib/api.php:1070 lib/api.php:1136
+#: lib/api.php:1242 lib/api.php:1475 lib/api.php:1552 lib/api.php:1701
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Ha fallado la conexión: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Fallo de conexión"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Búsqueda de contactos"
+
+#: config/.bak/sources.php.dist:851
+msgid "Contacts"
+msgstr "Contactos"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Contactos mostrados:"
+
+#: lib/Views/Browse.php:339
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Contactos en la lista: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Copiar"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Crear"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Crear Libreta de direcciones"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Crear Libreta de direcciones"
+
+#: lib/ListView.php:447
+msgid "Create a new Contact List in:"
+msgstr "Crear una lista de contactos en:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "Creado"
+
+#: contact.php:89
+msgid "De_lete"
+msgstr "E_liminar"
+
+#: addressbooks/index.php:42 templates/addressbook_list.php:35
+#: templates/browse/actions.inc:3 lib/Forms/DeleteAddressBook.php:45
+#: lib/Views/DeleteContact.php:58
+msgid "Delete"
+msgstr "Eliminar"
+
+#: lib/Forms/DeleteAddressBook.php:40 lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Eliminar %s"
+
+#: lib/api.php:621
+msgid "Delete denied."
+msgstr "Eliminación denegada."
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Se ha producido un error al eliminar: (%s) %s"
+
+#: lib/Driver.php:1884 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "La eliminación de contactos no está disponible."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Se ha producido un error al eliminar"
+
+#: config/.bak/attributes.php.dist:300
+msgid "Department"
+msgstr "Departamento"
+
+#: lib/Forms/CreateAddressBook.php:37 lib/Forms/EditAddressBook.php:44
+msgid "Description"
+msgstr "Descripción"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Directorio"
+
+#: config/.bak/prefs.php.dist:24
+msgid "Display"
+msgstr "Mostrar"
+
+#: config/.bak/prefs.php.dist:9 config/.bak/prefs.php.dist:16
+#: config/.bak/prefs.php.dist:23 config/.bak/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Opciones de Visualización"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Descargar"
+
+#: templates/browse/row.inc:15 templates/browse/row.inc:16
+#: templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Descargar vCard"
+
+#: templates/prefs/columnselect.inc:41
+msgid "Drag columns to re-arrange them. Check a column to enable it."
+msgstr ""
+"Arrastre las columnas para reorganizarlas. Pulse una columna para activarla."
+
+#: addressbooks/index.php:40 templates/addressbook_list.php:31
+#: templates/browse/actions.inc:6 templates/browse/column_headers.inc:10
+#: templates/browse/row.inc:28 templates/browse/row.inc:29
+#: templates/browse/contactrow.inc:33
+msgid "Edit"
+msgstr "Modificar"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Modificar \"%s\""
+
+#: lib/Forms/EditAddressBook.php:40 lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Modificar %s"
+
+#: config/.bak/attributes.php.dist:237
+msgid "Email"
+msgstr "Correo"
+
+#: config/.bak/attributes.php.dist:243
+msgid "Emails"
+msgstr "Correos"
+
+#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Error añadiendo %d contacto(s) a la lista."
+
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Error añadiendo %d de %d contacto(s) solicitado(s) a la lista."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Se produjo un error al eliminar %d contacto(s)."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Error eliminando %d de %d contacto(s) solicitado(s)."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Error eliminando %d contacto(s) de la lista."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Error eliminando %d de %d contacto(s) solicitado(s) de la lista."
+
+#: lib/api.php:684
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Fallo buscando en la libreta de direcciones: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Exportar"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Exportar libreta de direcciones"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Exportar sólo los contactos seleccionados."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Exportar las siguientes libretas de direcciones completas."
+
+#: data.php:168 data.php:267 data.php:345 add.php:42 search.php:121
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Fallo al acceder a la libreta de direcciones: %s"
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Fallo al añadir %s a %s: %s"
+
+#: lib/Views/Browse.php:345
+msgid "Failed to browse list"
+msgstr "Fallo al visualizar el listado"
+
+#: lib/Views/Browse.php:376
+msgid "Failed to browse the directory"
+msgstr "Fallo al visualizar el directorio"
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Fallo al cambiar el nombre: (%s) %s; Antiguo DN = %s, Nuevo DN = %s, Base = %"
+"s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Fallo al localizar el objecto a añadir: %s"
+
+#: search.php:190
+msgid "Failed to search the address book"
+msgstr "No se pudo buscar en la libreta de direcciones"
+
+#: data.php:183
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Fallo al buscar en el directorio: %s"
+
+#: config/.bak/sources.php.dist:550
+msgid "Favourite Recipients"
+msgstr "Destinatarios preferidos"
+
+#: config/.bak/attributes.php.dist:264
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Archivos"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Encontrar"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+msgid "Finish"
+msgstr "Terminar"
+
+#: config/.bak/attributes.php.dist:53
+msgid "First Name"
+msgstr "Nombre"
+
+#: config/.bak/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "URL de disponibilidad temporal"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "En"
+
+#: config/.bak/attributes.php.dist:384
+msgid "Gender"
+msgstr "Género"
+
+#: config/.bak/sources.php.dist:776
+msgid "Global Address Book"
+msgstr "Libreta de direcciones global"
+
+#: templates/browse/row.inc:49 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Grupo"
+
+#: config/.bak/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Dirección personal"
+
+#: config/.bak/attributes.php.dist:546
+msgid "Home Address Extended"
+msgstr "Dirección personal extendida"
+
+#: config/.bak/attributes.php.dist:141
+msgid "Home City"
+msgstr "Localidad personal"
+
+#: config/.bak/attributes.php.dist:159
+msgid "Home Country"
+msgstr "Pais personal"
+
+#: config/.bak/attributes.php.dist:414
+msgid "Home Email"
+msgstr "Correo personal"
+
+#: config/.bak/attributes.php.dist:430
+msgid "Home Fax"
+msgstr "Fax personal"
+
+#: config/.bak/attributes.php.dist:552
+msgid "Home Latitude"
+msgstr "Latitud personal"
+
+#: config/.bak/attributes.php.dist:557
+msgid "Home Longitude"
+msgstr "Longitud personal"
+
+#: config/.bak/attributes.php.dist:440
+msgid "Home Mobile Phone"
+msgstr "Teléfono móvil personal"
+
+#: config/.bak/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Teléfono personal"
+
+#: config/.bak/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr "Buzón postal personal"
+
+#: config/.bak/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "Código postal personal"
+
+#: config/.bak/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "Estado/Provincia personal"
+
+#: config/.bak/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "Calle personal"
+
+#: config/.bak/attributes.php.dist:455
+msgid "Home Video Call"
+msgstr "Videollamada personal"
+
+#: config/.bak/attributes.php.dist:540
+msgid "Home Website URL"
+msgstr "URL de sede Web personal"
+
+#: config/.bak/sources.php.dist:667
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importar libreta de direcciones. Paso %d"
+
+#: data.php:419
+msgid "Import/Export Address Books"
+msgstr "Importar/Exportar libretas de direcciones"
+
+#: config/.bak/attributes.php.dist:360
+msgid "Initials"
+msgstr "Iniciales"
+
+#: config/.bak/attributes.php.dist:366
+msgid "Instant Messenger"
+msgstr "Mensajería instantánea"
+
+#: lib/api.php:973 lib/api.php:1065
+msgid "Invalid ID"
+msgstr "ID no válido"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:345 lib/api.php:673
+#: lib/api.php:728 lib/api.php:787 lib/api.php:835 lib/api.php:969
+#: lib/api.php:1061 lib/api.php:1126 lib/api.php:1684
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Libreta de direcciones no válida: %s"
+
+#: lib/api.php:1130
+msgid "Invalid contact unique ID"
+msgstr "ID único de contacto no válido"
+
+#: lib/api.php:1688 lib/api.php:1774 lib/api.php:1835
+msgid "Invalid email"
+msgstr "La dirección de correo no es válida."
+
+#: lib/api.php:1696
+msgid "Invalid entry"
+msgstr "Entrada no válida."
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr "Se ha indicado una clave no válida."
+
+#: lib/api.php:1692
+msgid "Invalid name"
+msgstr "Nombre no válido"
+
+#: config/.bak/attributes.php.dist:276
+msgid "Job Title"
+msgstr "Cargo"
+
+#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "'La clave de almacenamiento tiene que se un UID no %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"Se precisa soporte LDAP pero el módulo LDAP no está disponible o cargado."
+
+#: data.php:91 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "Libreta de direcciones LDIF"
+
+#: config/.bak/attributes.php.dist:390
+msgid "Language"
+msgstr "Idioma"
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr "Última modificación"
+
+#: config/.bak/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Apellidos"
+
+#: config/.bak/attributes.php.dist:396
+msgid "Latitude"
+msgstr "Latitud"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Lista"
+
+#: config/.bak/sources.php.dist:238 config/.bak/sources.php.dist:918
+msgid "Location"
+msgstr "Ubicación"
+
+#: config/.bak/attributes.php.dist:401
+msgid "Longitude"
+msgstr "Longitud"
+
+#: lib/api.php:593
+msgid "Malformed request."
+msgstr "Solicitud malformada."
+
+#: addressbooks/index.php:46 templates/addressbook_list.php:2
+msgid "Manage Address Books"
+msgstr "Gestionar Libretas de direcciones"
+
+#: config/.bak/attributes.php.dist:372
+msgid "Manager"
+msgstr "Gestor"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Coincidente"
+
+#: lib/api.php:306
+msgid "Maximum Number of Contacts"
+msgstr "Número máximo de contactos"
+
+#: config/.bak/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "Número máximo de páginas"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Lista del menú"
+
+#: config/.bak/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "N. adicionales"
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr "Falta DN en la configuración origen de LDAP."
+
+#: config/.bak/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Teléfono móvil"
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Ha fallado la modificación: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Mas opciones..."
+
+#: lib/api.php:1812
+msgid "More than 1 entry found"
+msgstr "Se ha encontrado más de 1 entrada"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Trasladar"
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Desplazar a la izquierda"
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Desplazar a la derecha"
+
+#: data.php:89 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Libreta de direcciones Mulberry"
+
+#: lib/api.php:1720
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Varias personas con la dirección [%s] pero todavía no existe ninguna con el "
+"nombre [%s]"
+
+#: config/.bak/sources.php.dist:162
+msgid "My Address Book"
+msgstr "Mi libreta de direcciones"
+
+#: lib/Forms/CreateAddressBook.php:36 lib/Forms/EditAddressBook.php:43
+#: config/.bak/attributes.php.dist:47
+msgid "Name"
+msgstr "Nombre"
+
+#: config/.bak/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Formato de nombre"
+
+#: config/.bak/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Prefijos del nombre"
+
+#: config/.bak/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Sufijos del nombre"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nombre:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Añadir"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Siguiente"
+
+#: config/.bak/attributes.php.dist:89
+msgid "Nickname"
+msgstr "Apodo"
+
+#: lib/api.php:1815 lib/api.php:1875
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "No se ha encontrado una entrada %s para %s"
+
+#: data.php:78
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Actualmente no hay Libretas de direcciones disponibles. La importación y la "
+"exportación están deshabilitadas."
+
+#: search.php:107
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr ""
+"Actualmente no hay Libretas de direcciones disponibles. La búsqueda está "
+"deshabilitada."
+
+#: lib/api.php:667 lib/api.php:722 lib/api.php:782 lib/api.php:964
+#: lib/api.php:1056 lib/api.php:1121
+msgid "No address book specified"
+msgstr "No se ha indicado una libreta de direcciones"
+
+#: minisearch.php:80
+msgid "No contacts found"
+msgstr "No se han encontrado contactos"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "No hay contactos coincidentes con el filtro actual."
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "No hay contactos coincidentes"
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr "No existe un origen para destinatarios preferidos."
+
+#: lib/api.php:868 lib/api.php:1166
+msgid "No vCard data was found."
+msgstr "No se encontraron datos vCard."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Ninguna"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "No encontrado"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "No encontrado"
+
+#: config/.bak/attributes.php.dist:314
+msgid "Notes"
+msgstr "Notas"
+
+#: config/.bak/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "Número de artículos por página"
+
+#: lib/api.php:1015 lib/api.php:1191
+msgid "Object not found"
+msgstr "No se ha encontrado el objeto."
+
+#: lib/Driver/kolab.php:1184
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "¡El objeto con UID %s no existe!"
+
+#: config/.bak/attributes.php.dist:282
+msgid "Occupation"
+msgstr "Ocupación"
+
+#: config/.bak/attributes.php.dist:306
+msgid "Office"
+msgstr "Oficina"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Una vez guarde esta página de opciones, la Libreta de direcciones se "
+"eliminará definitivamente. Si ésto no es lo que quiere, tiene que cambiar su "
+"selección a \"Ninguna\"."
+
+#: lib/api.php:1174
+msgid "Only one vcard supported."
+msgstr "Sólo se soporta una vcard."
+
+#: config/.bak/sources.php.dist:245 config/.bak/sources.php.dist:924
+msgid "Organization"
+msgstr "Organización"
+
+#: config/.bak/sources.php.dist:246 config/.bak/sources.php.dist:926
+msgid "Other"
+msgstr "Otro"
+
+#: config/.bak/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "Clave PGP pública"
+
+#: config/.bak/attributes.php.dist:471
+msgid "PTT"
+msgstr "PTT"
+
+#: config/.bak/attributes.php.dist:269
+msgid "Pager"
+msgstr "Busca"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "¿Eliminar definitivamente este contacto?"
+
+#: deletefile.php:36 lib/Driver.php:721 lib/api.php:846 lib/api.php:1705
+#: lib/Driver/sql.php:486
+msgid "Permission denied"
+msgstr "Permiso denegado"
+
+#: config/.bak/sources.php.dist:235 config/.bak/sources.php.dist:914
+msgid "Personal"
+msgstr "Personal"
+
+#: data.php:90 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Libreta de direcciones de Pine"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Introduzca el nombre de la nueva lista:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:167
+msgid "Previous"
+msgstr "Anterior"
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Ha fallado la consulta: (%s) %s"
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Ha fallado la lectura: (%s) %s"
+
+#: lib/Driver.php:1868 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "No está disponible la consulta de contactos."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"¿Eliminar realmente la Libreta de direcciones\"%s\"? Ésto no se puede "
+"deshacer y todos los contactos de esta Libreta de direcciones se eliminarán "
+"definitivamente."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Eliminar Libreta de direcciones"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Eliminar de esta lista"
+
+#: lib/Driver.php:1906
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"El controlador actual de almacenamiento de Libreta de direcciones no soporta "
+"la eliminación de datos de usuario."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"¿Sustituir la libreta existente por la importada? <strong>Advertencia: Ésto "
+"eliminará todas las entradas de su Libreta de direcciones actual.</strong>"
+
+#: lib/Driver.php:615
+msgid "Requested object not found."
+msgstr "No se encontró el objeto solicitado."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Restaurar valores por omisión"
+
+#: config/.bak/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "Certificado S/MIME público"
+
+#: config/.bak/attributes.php.dist:465
+msgid "SIP"
+msgstr "SIP"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "Ha fallado STARTTLS: (%s) %s"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr "Guardar"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "¿Guardar búsqueda como Libreta de direcciones virtual?"
+
+#: lib/Driver.php:1894 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Guardar los contactos no está disponible."
+
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:58 config/.bak/prefs.php.dist:116
+msgid "Search"
+msgstr "Buscar"
+
+#: lib/api.php:1480
+msgid "Search failed"
+msgstr "Ha fallado la búsqueda"
+
+#: lib/api.php:1710 lib/api.php:1716 lib/api.php:1725 lib/api.php:1738
+#, php-format
+msgid "Search failed: %s"
+msgstr "Ha fallado la búsqueda: %s"
+
+#: templates/block/minisearch.inc:23
+msgid "Search for: "
+msgstr "Buscar: %s"
+
+#: lib/Driver.php:1853 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "La búsqueda no está disponible."
+
+#: templates/browse/row.inc:40
+msgid "Select contact"
+msgstr "Seleccionar contacto"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Seleccione la libreta de direcciones a exportar:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Seleccione la libreta de direcciones a la que importar:"
+
+#: config/.bak/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Seleccione las agendas a utilizar para sincronización con dispositivos "
+"externos:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Seleccione el juego de caracteres del archivo origen:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Seleccione el formato de exportación:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Seleccione el archivo a importar:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Seleccione el formato del archivo origen:"
+
+#: config/.bak/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "Seleccione el formato usado para mostrar los nombres:"
+
+#: config/.bak/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr "Seleccione la vista mostrada por omisión y las opciones de paginación."
+
+#: config/.bak/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Seleccione los campos visualizados en el listado de direcciones."
+
+#: config/.bak/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Seleccione cómo mostrar los nombres."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Se ha seleccionado la libreta de direcciones \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Mostrar %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Mostrar ambos"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Mostrar contactos"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Mostrar listas"
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "Sentido de clasificación"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Ordenar por %s"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Ordenar sólo por %s"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Ordenar por %s y por %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Origen:"
+
+#: lib/api.php:299
+msgid "Sources"
+msgstr "Orígenes"
+
+#: config/.bak/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Esposa"
+
+#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Se ha(n) añadido correctamente %d contacto(s) a la lista."
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Se ha añadido correctamente %s a %s."
+
+#: lib/Views/Browse.php:291
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Se ha creado correctamente la lista de contactos \"%s\"."
+
+#: search.php:165
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Se ha creado correctamente la libreta de direcciones virtual \"%s\"."
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Se ha(n) eliminado correctamente %d contacto(s)."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Se ha(n) eliminado correctamente %d contacto(s) de la lista."
+
+#: data.php:87
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Valores separados por tabuladores"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Libreta de direcciones de destino"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Lista de contactos de destino"
+
+#: data.php:347
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "El archivo %s no contenía ningún contacto."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "Hay que configurar el motor VFS para permitir la carga de adjuntos."
+
+#: lib/Driver.php:1824
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "La Libreta de direcciones \"%s\" no existe."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Se ha creado la Libreta de direcciones \"%s\"."
+
+#: data.php:354
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "No se pudo vaciar la libreta de direcciones: %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Se ha eliminado la Libreta de direcciones \"%s\"."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "Se ha renombrado la Libreta de direcciones \"%s\" como \"%s\"."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Se ha guardado la Libreta de direcciones \"%s\"."
+
+#: view.php:28 vcard.php:19 contact.php:23
+msgid "The contact you requested does not exist."
+msgstr "El contacto solicitado no existe."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Se ha eliminado el archivo \"%s\"."
+
+#: data.php:327
+msgid "The import can be finished despite the warnings."
+msgstr "La importación se puede terminar a pesar de las advertencias."
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "No se encontró el contacto solicitado."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "No hay libretas de direcciones visualizables."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"No hay libretas de direcciones en las que se pueda escribir. Ninguna de las "
+"disponibles está configurada para permitirle añadir entradas en ellas. Si "
+"considera que esto es un error, contacte con el administrador de sistemas."
+
+#: lib/Views/Browse.php:349
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "En esta lista hay %d contacto que no puede ver"
+msgstr[1] "En esta lista hay %d contactos que no puede ver"
+
+#: search.php:161
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Se produjo un error al crear la Libreta de direcciones virtual: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Se produjo un error al añadir el contacto. Contacte al administrador de "
+"sistemas para más información."
+
+#: lib/Views/Browse.php:311
+msgid "There was an error creating a new list."
+msgstr "Se produjo un error al crear una lista."
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr ""
+"Se produjo un error al eliminar \"%s\" de la Libreta de direcciones origen."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Se produjo un error al eliminar este contacto: %s"
+
+#: lib/Views/Browse.php:355
+msgid "There was an error displaying the list"
+msgstr "Se produjo un error al mostrar la lista"
+
+#: data.php:387
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Se produjo un error al importar los datos: %s"
+
+#: lib/api.php:864 lib/api.php:1161
+msgid "There was an error importing the iCalendar data."
+msgstr "Se produjo un error al importar los datos iCalendar."
+
+#: lib/api.php:235
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Se produjo un error al eliminar una Libreta de direcciones para %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Se produjo un error al guardar el contacto. Consulte a su administrador de "
+"sistemas para más información."
+
+#: data.php:213
+msgid "There were no addresses to export."
+msgstr "No hubo direcciones a exportar."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Estas Libretas de direcciones se mostrarán en este orden:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Esta Libreta de direcciones no se puede eliminar"
+
+#: data.php:312
+msgid "This file format is not supported."
+msgstr "Este formato de archivo no está soportado."
+
+#: lib/api.php:1729 lib/api.php:1742
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Esta persona ya tiene una entrada %s en la libreta de direcciones."
+
+#: config/.bak/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Ésta será la Libreta de direcciones por omisión al añadir o importar "
+"contactos."
+
+#: config/.bak/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "Zona horaria"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Incapaz de localizar el propietario del contacto."
+
+#: lib/Driver.php:1746 lib/Turba.php:672
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Incapaz de cargar la definición de %s."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Incapaz de guardar la Libreta de direcciones \"%s\": %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "Incapaz de buscar."
+
+#: config/.bak/attributes.php.dist:353
+msgid "Unfiled"
+msgstr "Sin categoría"
+
+#: lib/api.php:902 lib/api.php:1012 lib/api.php:1179
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Tipo de contenido no soportado: %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Ver \"%s\""
+
+#: minisearch.php:72 minisearch.php:73
+msgid "View Contact"
+msgstr "Ver contacto"
+
+#: config/.bak/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "Vista mostrada por omisión:"
+
+#: config/.bak/attributes.php.dist:460
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/.bak/attributes.php.dist:320
+msgid "Website URL"
+msgstr "URL de sede Web"
+
+#: config/.bak/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Dirección del trabajo"
+
+#: config/.bak/attributes.php.dist:524
+msgid "Work Address Extended"
+msgstr "Dirección del trabajo extendida"
+
+#: config/.bak/attributes.php.dist:191
+msgid "Work City"
+msgstr "Localidad del trabajo"
+
+#: config/.bak/attributes.php.dist:209
+msgid "Work Country"
+msgstr "País del trabajo"
+
+#: config/.bak/attributes.php.dist:408
+msgid "Work Email"
+msgstr "Correo del trabajo"
+
+#: config/.bak/attributes.php.dist:425
+msgid "Work Fax"
+msgstr "Fax del trabajo"
+
+#: config/.bak/attributes.php.dist:530
+msgid "Work Latitude"
+msgstr "Latitud del trabajo"
+
+#: config/.bak/attributes.php.dist:535
+msgid "Work Longitude"
+msgstr "Longitud del trabajo"
+
+#: config/.bak/attributes.php.dist:435
+msgid "Work Mobile Phone"
+msgstr "Teléfono móvil del trabajo"
+
+#: config/.bak/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Teléfono del trabajo"
+
+#: config/.bak/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr "Buzón postal del trabajo"
+
+#: config/.bak/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "Código postal del trabajo"
+
+#: config/.bak/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "Estado/provincia del trabajo"
+
+#: config/.bak/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "Calle del trabajo"
+
+#: config/.bak/attributes.php.dist:450
+msgid "Work Video Call"
+msgstr "Videollamada del trabajo"
+
+#: config/.bak/attributes.php.dist:518
+msgid "Work Website URL"
+msgstr "URL de sede Web del trabajo"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Carece de permiso para modificar esta Libreta de direcciones."
+
+#: data.php:276 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Carece de permiso para crear más de %d contactos en \"%s\"."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Carece de permiso para eliminar esta Libreta de direcciones."
+
+#: lib/api.php:198
+msgid "You are not allowed to remove user data."
+msgstr "Carece de permiso para eliminar datos de usuario."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "No se puede añadir una entrada a una Libreta de direcciones virtual."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "No se pueden añadir contactos a una Libreta de direcciones virtual."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "No se pueden eliminar contactos de una Libreta de direcciones virtual."
+
+#: view.php:38 edit.php:66 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Carece de permiso para ver este contacto."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Carece de permiso para ver este objeto."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Carece de permisos para eliminar esta Libreta de direcciones."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Tiene que haber instalado la librería PEAR Ner_LDAP para usar la función de "
+"comprobación de esquema."
+
+#: search.php:148
+msgid "You must provide a name for virtual address books."
+msgstr ""
+"Tiene que indicar un nombre para las Libretas de direcciones virtuales."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Tiene que seleccionar una libreta de direcciones de destino."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Tiene que seleccionar una lista de contactos de destino."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Primero tiene que seleccionar al menos un contacto."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Sólo tiene permiso para ver este contacto."
+
+#: lib/Views/Browse.php:362
+msgid "Your default address book is not browseable."
+msgstr "Su Libreta de direcciones por omisión no se puede examinar."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[sin valor]"
+
+#: lib/Turba.php:614
+msgid "_Browse"
+msgstr "_Examinar"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Contactos"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Eli_minar"
+
+#: contact.php:85
+msgid "_Edit"
+msgstr "Mo_dificar"
+
+#: lib/Turba.php:623
+msgid "_Import/Export"
+msgstr "_Importar/Exportar"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Listas"
+
+#: lib/Turba.php:611
+msgid "_My Address Books"
+msgstr "_Mis libretas"
+
+#: lib/Turba.php:617
+msgid "_New Contact"
+msgstr "_Añadir"
+
+#: lib/Turba.php:628
+msgid "_Print"
+msgstr "I_mprimir"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "E_liminar de esta lista"
+
+#: lib/Turba.php:619
+msgid "_Search"
+msgstr "_Buscar"
+
+#: contact.php:82
+msgid "_View"
+msgstr "_Ver"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "ascendente"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "por %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "por mi"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "contacto"
+
+#: data.php:233 data.php:238 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contactos.csv"
+
+#: data.php:258
+msgid "contacts.ldif"
+msgstr "contactos.ldif"
+
+#: data.php:243
+msgid "contacts.tsv"
+msgstr "contactos.tsv"
+
+#: data.php:253
+msgid "contacts.vcf"
+msgstr "contactos.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "descendente"
+
+#: config/.bak/attributes.php.dist:387
+msgid "female"
+msgstr "hembra"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "a %s"
+
+#: config/.bak/attributes.php.dist:387
+msgid "male"
+msgstr "macho"
+
+#: config/.bak/prefs.php.dist:128
+msgid "no formatting"
+msgstr "sin formato"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "Ninguna"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "a una lista de contactos"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "a una Libreta de direcciones distinta"
+
+#: data.php:88 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/et_EE.po b/turba/po/et_EE.po
new file mode 100644 (file)
index 0000000..51c5da7
--- /dev/null
@@ -0,0 +1,1608 @@
+# TURBA ESTONIAN TRANSLATION.
+# Toomas Aas <toomas.aas@mail.ee>, 2002 - 2006.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.1-cvs\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-05-29 15:48+0300\n"
+"PO-Revision-Date: 2008-06-05 19:27+0200\n"
+"Last-Translator: Alar SIng <alar.sing@err.ee>\n"
+"Language-Team: Estonian <dev@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-13\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Lisa IMSP aadressiraamat"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " Kustuta IMSP aadressiraamat"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" ei imporditud, kuna see oli juba olemas."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"\"%s\" kanne uuendati, kuid serverisse laetud faili salvestamine nurjus: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" kanne muudetud."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" ei kopeeritud, kuna see on list."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" ei teisaldatud, kuna see on list."
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Eesnimi Perekonnanimi\" (nt. Jaan Kask)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Perekonnanimi, Eesnimi\" (nt. Kask, Jaan)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s lisatud."
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "%s faili import õnnestus"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s kuni %s, kokku %s"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "Kasutaja %s aadressiraamat"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Vajalik on iFrame toetav veebilehitseja"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Puudub õigus failile %s"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Lisa"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Lisa kontakt"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Lisa aadressiraamat"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Lisa veerg"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Lisa fail"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Lisa"
+
+#: lib/Driver.php:1518
+msgid "Adding contacts is not available."
+msgstr "Kontaktide lisamine ei ole saadaval."
+
+#: templates/addressbooks.inc:105
+msgid "Address Book"
+msgstr "Aadressiraamat"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Aadresside loend"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Aadressiraamatud"
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "Aadressiraamat on tühjendatud."
+
+#: templates/addressbooks.inc:80
+msgid "Address book to delete "
+msgstr "Kustutatav aadressiraamat "
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Aadressiraamatud, mida ei näidata:"
+
+#: search.php:161 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Põhjalik otsing"
+
+#: config/attributes.php.dist:77
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Kõik"
+
+#: lib/api.php:725
+msgid "Already Exists"
+msgstr "On juba olemas"
+
+#: config/attributes.php.dist:95
+msgid "Anniversary"
+msgstr "Aastapäev"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Kas oled kindel, et soovid %s kustutada?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Kas oled kindel, et soovid märgitud kanded kustutada?"
+
+#: templates/addressbooks.inc:45
+msgid "Are you sure you want to delete the addressbook: "
+msgstr "Kas oled kindel, et soovid selle aadressi raamatu kustutada:"
+
+#: config/attributes.php.dist:368
+msgid "Assistant"
+msgstr "Assistent"
+
+#: search.php:158 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Lihtotsing"
+
+#: lib/Driver/ldap.php:95 lib/Driver/ldap.php:98
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Bind nurjus: (%s) %s"
+
+#: config/attributes.php.dist:89
+msgid "Birthday"
+msgstr "Sünnipäev"
+
+#: lib/Driver.php:524
+#, php-format
+msgid "Birthday of %s"
+msgstr "Sünnipäev %s"
+
+#: lib/api.php:1255
+msgid "Birthdays"
+msgstr "Sünnipäevad"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Tühi nimi"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Mõlemad"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Sirvi"
+
+#: config/attributes.php.dist:280
+msgid "Business Category"
+msgstr "Tegevusala"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Gruppi ei saa lisada iseenda liikmeks."
+
+#: lib/Driver/kolab.php:620
+#, fuzzy, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Ava \"%s\" kanne aadressiraamatus"
+
+#: config/attributes.php.dist:342
+msgid "Category"
+msgstr "Kategooria"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Vaheta sorteerimine %s - %s vastu"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Märgi/tühjenda kõik"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Märgi/tühjenda _kõik"
+
+#: config/attributes.php.dist:107
+msgid "Children"
+msgstr "Lapsed"
+
+#: templates/addressbooks.inc:60
+msgid "Choose a name"
+msgstr "Vali nimi"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Vali aadressiraamat"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "Vali aadressiraamat:"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Vali, milliseid aadressiraamatuid näidata, ja millises järjestuses:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Vali, milliseid aadressiraamatuid kasutada."
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Vali, milliseid veerge näidata, ja millises järjestuses."
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Sule"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Sulge otsing"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Veeru seaded"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Veerud, mida ei näidata:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Komaga eraldatud väljad"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Komaga eraldatud väljad (Microsoft Outlook)"
+
+#: config/sources.php.dist:228 config/sources.php.dist:901
+#, fuzzy
+msgid "Communications"
+msgstr "Veeru seaded"
+
+#: config/attributes.php.dist:286
+msgid "Company"
+msgstr "Firma"
+
+#: config/attributes.php.dist:215
+msgid "Company Address"
+msgstr "Töökoha aadress"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:394 lib/api.php:439
+#: lib/api.php:490 lib/api.php:525 lib/api.php:574 lib/api.php:620
+#: lib/api.php:661 lib/api.php:778 lib/api.php:865 lib/api.php:923
+#: lib/api.php:1012 lib/api.php:1231 lib/api.php:1289 lib/api.php:1371
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Ühendus nurjus: %s"
+
+#: lib/Driver/ldap.php:71
+msgid "Connection failure"
+msgstr "Ühendus nurjus"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+#, fuzzy
+msgid "Contact Search"
+msgstr "Lihtotsing"
+
+#: config/sources.php.dist:833
+msgid "Contacts"
+msgstr "Kontaktid"
+
+#: templates/list/numPager.inc:3
+#, fuzzy
+msgid "Contacts displayed:"
+msgstr "Näidatavad kanded:"
+
+#: lib/Views/Browse.php:336
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Aadressid listis: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopeeri"
+
+#: templates/addressbooks.inc:69
+msgid "Create"
+msgstr "Loo"
+
+#: templates/addressbooks.inc:56
+msgid "Create Address Book"
+msgstr "Loo aadressiraamat"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Loo uus list siia:"
+
+#: lib/Views/Contact.php:74
+msgid "Created"
+msgstr "Loodud"
+
+#: contact.php:86
+msgid "De_lete"
+msgstr "Kustuta"
+
+#: templates/addressbooks.inc:94 templates/browse/actions.inc:3
+#: lib/Views/DeleteContact.php:58
+msgid "Delete"
+msgstr "Kustuta"
+
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Kustuta %s"
+
+#: templates/addressbooks.inc:76
+msgid "Delete Address Book"
+msgstr "Kustuta aadressiraamat"
+
+#: lib/Driver/ldap.php:288
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Kustutamine nurjus: (%s) %s"
+
+#: lib/Driver.php:1526
+#, fuzzy
+msgid "Deleting contacts is not available."
+msgstr "FTP laiendus ei ole saadaval."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Kustutamine ebaõnnestus"
+
+#: config/attributes.php.dist:292
+msgid "Department"
+msgstr "Osakond"
+
+#: templates/addressbooks.inc:138
+msgid "Description"
+msgstr "Kirjeldus"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Kataloog"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Esitus"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Esituse seaded"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Salvesta"
+
+#: templates/browse/row.inc:13
+msgid "Download vCard"
+msgstr "Salvesta vCard"
+
+#: templates/addressbooks.inc:123 templates/browse/column_headers.inc:10
+#: templates/browse/row.inc:21 templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "Muuda"
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Muuda \"%s\""
+
+#: lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Muuda %s"
+
+#: templates/addressbooks.inc:100
+msgid "Edit Address Books"
+msgstr "Muuda aadressiraamatuid"
+
+#: config/attributes.php.dist:229
+msgid "Email"
+msgstr "E-post"
+
+#: config/attributes.php.dist:235
+#, fuzzy
+msgid "Emails"
+msgstr "E-post"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, fuzzy, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "%d sissekannet lisati listi."
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, fuzzy, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "%d sissekannet lisati listi."
+
+#: lib/Views/Browse.php:134
+#, fuzzy, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Viga sisu laadimisel: %s"
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Viga kustutamise %d'l kontakti %d'st. "
+
+#: lib/Views/Browse.php:117
+#, fuzzy, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "%d sissekanne(t) listist eemaldatud."
+
+#: lib/Views/Browse.php:119
+#, fuzzy, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "%d sissekanne(t) listist eemaldatud."
+
+#: lib/api.php:531
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Aadressiraamatu otsingu viga: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Eksport"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Aadressiraamatu eksport"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Ekspordi ainult märgitud kanded."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Ekspordi see aadressiraamat täies ulatuses."
+
+#: search.php:86 add.php:42 data.php:143 data.php:242 data.php:320
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Juurdepääs aadressiraamatule nurjus: %s"
+
+#: lib/Views/Browse.php:208
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "%s lisamine %s-le nurjus: %s"
+
+#: lib/Views/Browse.php:342
+msgid "Failed to browse list"
+msgstr "Listi sirvimine nurjus"
+
+#: lib/Views/Browse.php:369
+msgid "Failed to browse the directory"
+msgstr "Kataloogi sirvimine ebaõnnestus"
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr "Nime muutmine nurjus: (%s) %s; Vana DN = %s, uus DN = %s, Root = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Ei leidnud objekti, mida lisada: %s"
+
+#: search.php:152
+msgid "Failed to search the address book"
+msgstr "Aadressiraamatu otsing nurjus"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Otsing kataloogist ebaõnnestus: %s"
+
+#: config/sources.php.dist:532
+#, fuzzy
+msgid "Favourite Recipients"
+msgstr "Nähtamatud adressaadid"
+
+#: config/attributes.php.dist:256
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/Forms/Contact.php:40
+msgid "Files"
+msgstr "Failid"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Leia"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+msgid "Finish"
+msgstr "Lõpp"
+
+#: config/attributes.php.dist:47
+msgid "First Name"
+msgstr "Eesnimi"
+
+#: config/attributes.php.dist:318
+msgid "Freebusy URL"
+msgstr "Freebusy URL"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Kellelt"
+
+#: config/attributes.php.dist:374
+msgid "Gender"
+msgstr "Sugu"
+
+#: config/sources.php.dist:758
+msgid "Global Address Book"
+msgstr "Globaalne aadressiraamat"
+
+#: templates/browse/row.inc:39
+msgid "Group"
+msgstr "Grupp"
+
+#: config/attributes.php.dist:115
+msgid "Home Address"
+msgstr "Kodune aadress"
+
+#: config/attributes.php.dist:133
+msgid "Home City"
+msgstr "Kodulinn"
+
+#: config/attributes.php.dist:151
+msgid "Home Country"
+msgstr "Kodumaa"
+
+#: config/attributes.php.dist:241
+msgid "Home Phone"
+msgstr "Kodune telefon"
+
+#: config/attributes.php.dist:127
+msgid "Home Post Office Box"
+msgstr "Kodune postiindeks"
+
+#: config/attributes.php.dist:145
+msgid "Home Postal Code"
+msgstr "Kodune postiindeks"
+
+#: config/attributes.php.dist:139
+msgid "Home State/Province"
+msgstr "Kodumaakond"
+
+#: config/attributes.php.dist:121
+msgid "Home Street Address"
+msgstr "Kodune tänav/maja"
+
+#: config/sources.php.dist:649
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Aadressiraamatu import, samm %d"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Aadressiraamatute import/eksport"
+
+#: config/attributes.php.dist:350
+msgid "Initials"
+msgstr "Initsiaalid"
+
+#: config/attributes.php.dist:356
+msgid "Instant Messenger"
+msgstr "Otse suhtlus"
+
+#: lib/api.php:773 lib/api.php:860
+msgid "Invalid ID"
+msgstr "Vigane ID"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:306 lib/api.php:520
+#: lib/api.php:569 lib/api.php:615 lib/api.php:656 lib/api.php:769
+#: lib/api.php:856 lib/api.php:913 lib/api.php:1354
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Vigane aadressiraamat: %s"
+
+#: lib/api.php:1358 lib/api.php:1432 lib/api.php:1489
+msgid "Invalid email"
+msgstr "Vigane e-posti aadress"
+
+#: lib/api.php:1366
+msgid "Invalid entry"
+msgstr "Vigane kanne"
+
+#: lib/Driver/ldap.php:284
+msgid "Invalid key specified."
+msgstr "Määrati vigane võti."
+
+#: lib/api.php:1362
+msgid "Invalid name"
+msgstr "Vigane nimi"
+
+#: lib/api.php:917
+msgid "Invalid objectId"
+msgstr "Vigane objectId"
+
+#: config/attributes.php.dist:268
+msgid "Job Title"
+msgstr "Tiitel"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Salvestamise võti peab olema UID mitte %s!"
+
+#: lib/Driver/ldap.php:67
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr "Vajalik on LDAP toetus, ent LDAP moodul puudub või pole laetud."
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF Aadressiraamat"
+
+#: config/attributes.php.dist:380
+msgid "Language"
+msgstr "Keel"
+
+#: lib/Views/Contact.php:80
+msgid "Last Modified"
+msgstr "Viimati muudetud"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Perekonnanimi"
+
+#: config/attributes.php.dist:386
+msgid "Latitude"
+msgstr "laiuskraad"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Nimekiri"
+
+#: config/sources.php.dist:223 config/sources.php.dist:897
+msgid "Location"
+msgstr "Asukoht"
+
+#: config/attributes.php.dist:391
+msgid "Longitude"
+msgstr "Pikkuskraad"
+
+#: config/attributes.php.dist:362
+msgid "Manager"
+msgstr "Haldur"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr " mis sisaldab "
+
+#: lib/api.php:281
+msgid "Maximum Number of Contacts"
+msgstr "Kannete suurim arv"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Lehekülgede suurim arv"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menüü nimekiri"
+
+#: config/attributes.php.dist:59
+msgid "Middle Names"
+msgstr "Kesknimi"
+
+#: lib/Driver/ldap.php:314
+msgid "Missing DN in LDAP source configuration."
+msgstr "LDAP allika seadistuses puudub DN."
+
+#: config/attributes.php.dist:251
+msgid "Mobile Phone"
+msgstr "Mobiiltelefon"
+
+#: lib/Driver/ldap.php:343 lib/Driver/ldap.php:359
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Muutmine nurjus: (%s) %s"
+
+#: templates/browse/header.inc:8
+#, fuzzy
+msgid "More Options..."
+msgstr "Kirja seaded"
+
+#: lib/api.php:1474
+msgid "More than 1 entry found"
+msgstr "Leiti rohkem kui 1 kanne"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Nihuta"
+
+#: templates/prefs/addressbookselect.inc:184
+#: templates/prefs/columnselect.inc:248
+msgid "Move left"
+msgstr "nihuta vasakule"
+
+#: templates/prefs/addressbookselect.inc:186
+#: templates/prefs/columnselect.inc:250
+msgid "Move right"
+msgstr "nihuta paremale"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry aadressiraamat"
+
+#: lib/api.php:1390
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "Kirjas on juba mitu inimest aadressiga [%s], kuid ühegi nimi pole [%s]"
+
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "Minu aadressiraamat"
+
+#: addressbooks.php:174
+msgid "My Address Books"
+msgstr "Minu aadressiraamatud"
+
+#: templates/addressbooks.inc:130 config/attributes.php.dist:41
+msgid "Name"
+msgstr "Nimi"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Nime esitus"
+
+#: config/attributes.php.dist:65
+msgid "Name Prefixes"
+msgstr "Nime liides"
+
+#: config/attributes.php.dist:71
+msgid "Name Suffixes"
+msgstr "Nime liited."
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nimi:"
+
+#: add.php:70 lib/Block/tree_menu.php:28
+msgid "New Contact"
+msgstr "Lisa uus sissekanne"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Edasi"
+
+#: config/attributes.php.dist:83
+msgid "Nickname"
+msgstr "Hüüdnimi"
+
+#: lib/api.php:1477 lib/api.php:1526
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "%s kannet %s jaoks ei leitud"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "Aadressi raamatuid ei ole saadaval. Import ja eksport on keelatud."
+
+#: search.php:72
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Aadressi raamatuid ei ole saadaval. Otsimine on keelatud."
+
+#: lib/api.php:1441
+msgid "No address books found."
+msgstr "Ei leitud ühtki aadressiraamatut."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Kandeid ei leitud"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Ühtegi vastet ei leitud otsingule."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Ühtegi vastet ei leitud."
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Lemmik saajate allikat ei leidu."
+
+#: lib/api.php:682 lib/api.php:949
+msgid "No vCard data was found."
+msgstr "vCard andmeid ei leitud."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Puudub"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "Ei leitud"
+
+#: deletefile.php:22 edit.php:48
+msgid "Not found"
+msgstr "Ei leitud"
+
+#: config/attributes.php.dist:306
+msgid "Notes"
+msgstr "Märkmed"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Kannete arv leheküljel"
+
+#: lib/api.php:789 lib/api.php:929
+msgid "Object not found"
+msgstr "Objekti ei leitud"
+
+#: config/attributes.php.dist:274
+msgid "Occupation"
+msgstr "Amet"
+
+#: config/attributes.php.dist:298
+msgid "Office"
+msgstr "Töökoht"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Selle seadistuse lehe salvestamisel kustutatakse aadressiraamat jäädavalt."
+"Kui sa seda ei taha, pead valima \"Puudub\"."
+
+#: lib/api.php:957
+msgid "Only one vcard supported."
+msgstr "Lubatud on ainult üks vCard."
+
+#: config/sources.php.dist:230 config/sources.php.dist:903
+msgid "Organization"
+msgstr "Organisatsioon"
+
+#: config/sources.php.dist:231 config/sources.php.dist:905
+msgid "Other"
+msgstr "Muu"
+
+#: config/attributes.php.dist:324
+msgid "PGP Public Key"
+msgstr "PGP avalik võti"
+
+#: config/attributes.php.dist:261
+msgid "Pager"
+msgstr "Piipar"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Kustutada see kontakt igaveseks?"
+
+#: deletefile.php:36 lib/Driver.php:676 lib/api.php:665 lib/api.php:782
+#: lib/api.php:869 lib/api.php:1159 lib/api.php:1375 lib/Driver/sql.php:481
+msgid "Permission denied"
+msgstr "Juurdepääs puudub"
+
+#: templates/addressbooks.inc:120
+msgid "Permissions"
+msgstr "Õigused"
+
+#: config/sources.php.dist:221 config/sources.php.dist:893
+msgid "Personal"
+msgstr "Isiklik"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine aadressiraamat"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Sisesta uue listi nimi:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+msgid "Previous"
+msgstr "Tagasi"
+
+#: lib/Driver/ldap.php:165
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Päring nurjus: (%s) %s"
+
+#: lib/Driver/ldap.php:209 lib/Driver/ldap.php:217 lib/Driver/ldap.php:453
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Lugemine nurjus: (%s) %s"
+
+#: lib/Driver.php:1510
+msgid "Reading contacts is not available."
+msgstr "Kontaktide kuvamine ei ole võimalik."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Eemalda aadressiraamat"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "eemalda veerg"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Eemalda sellest listist"
+
+#: lib/Driver.php:1548
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Kasutaja andmete kustutamine ei ole võimalik antud aadressi raamatu "
+"draiveriga."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Kas asendame olemasoleva aadressiraamatu imporditavaga? <strong>Hoiatus: "
+"sellega hävivad kõik olemasolevad sissekanded aadressiraamatus.</strong>"
+
+#: lib/Driver.php:573
+msgid "Requested object not found."
+msgstr "Soovitud objekti ei leitud."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Taasta vaikeväärtused"
+
+#: config/attributes.php.dist:330
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME avalik sertifikaat"
+
+#: lib/Driver/ldap.php:87
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS nurjus: (%s) %s"
+
+#: templates/addressbooks.inc:147 lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "Salvesta"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Säilita otsingutulemus virtuaalkaustana?"
+
+#: lib/Driver.php:1536
+msgid "Saving contacts is not available."
+msgstr "Kontatkide salvestamine ei ole saadaval."
+
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:59 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Otsing"
+
+#: lib/api.php:1236
+msgid "Search failed"
+msgstr "Otsing nurjus"
+
+#: lib/api.php:1380 lib/api.php:1386 lib/api.php:1395 lib/api.php:1408
+#, php-format
+msgid "Search failed: %s"
+msgstr "Otsing nurjus: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Otsing: %s"
+
+#: lib/Driver.php:1495
+msgid "Searching is not available."
+msgstr "Otismine ei ole saadaval."
+
+#: templates/addressbooks.inc:84
+msgid "Select an address book to delete"
+msgstr "Vali kustutamisele kuuluv aadressiraamat."
+
+#: templates/addressbooks.inc:109
+msgid "Select an address book to edit"
+msgstr "Vali aadressiraamat, mida soovid muuta."
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Vali kontakt"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Kust eksportida:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Kuhu importida:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Vali lähtefaili märgistik:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Ekspordi vorming:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Vali imporditav fail:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Vali lähtefaili vorming:"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Vali nimede esitusviis:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Vali vaikimisi näidatav vaade, järjestuse seaded ja lehekülje seaded."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Vali, milliseid välju näidata aadresside nimekirjades."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Vali, millisel kujul näidata nimesid."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Valitud aadressiraamat \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Näita %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Näita mõlemaid"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Näita sissekandeid"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Näita liste"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "Järjestuse suund"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Järjesta %s järgi"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Järjesta ainult %s järgi"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Sorteeri %s ja siis %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Allikad:"
+
+#: lib/api.php:274
+msgid "Sources"
+msgstr "Allikad"
+
+#: config/attributes.php.dist:101
+msgid "Spouse"
+msgstr "Abikaasa"
+
+#: lib/Views/Browse.php:258 lib/Views/Browse.php:298
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d sissekannet lisati listi."
+
+#: lib/Views/Browse.php:212
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s lisati %s-i"
+
+#: lib/Views/Browse.php:288
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "List \"%s\" loodud."
+
+#: search.php:127
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Virtuaal aadressiraamatu \"%s\" tegemine õnnestus"
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d sissekanne(t) kustutatud."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d sissekanne(t) listist eemaldatud."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Tabulaatoriga eraldatud väljad"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Siht aadressiraamat"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Siht kontaktide nimekiri"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Fail %s ei sisaldanud ühtegi kontakti."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "Lisandite üleslaadimiseks peab VFS olema seadistatud."
+
+#: lib/Driver.php:1466
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Aadressiraamatut \"%s\" pole olemas."
+
+#: addressbooks.php:104
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "Aadressiraamat \"%s\" loodud."
+
+#: addressbooks.php:130
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Aadressiraamat \"%s\" kustutatud."
+
+#: addressbooks.php:151
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "Muudatused aadressiraamatus \"%s\" salvestatud."
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Aadressiraamatut ei saanud tühjendada: %s"
+
+#: contact.php:23 view.php:28 vcard.php:19
+msgid "The contact you requested does not exist."
+msgstr "Soovitud sissekannet pole olemas."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Fail \"%s\" on kustutatud."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "Import on võimalik sooritada hoiatustele vaatamata."
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "Otsitud kontakti ei leitud."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Ükski aadressiraamat ei luba sirvimist."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Ükski kasutatav aadressiraamat ei võimalda sul aadresse lisada. Kui see on "
+"sinu arvates viga, võta ühendust süsteemi halduriga."
+
+#: search.php:123
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Selle aadressiraamatu loomisel tekkis viga: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Uue sissekande lisamisel tekkis viga. Abi saamiseks võta ühendust süsteemi "
+"halduriga."
+
+#: lib/Views/Browse.php:308
+msgid "There was an error creating a new list."
+msgstr "Listi loomisel tekkis viga."
+
+#: addressbooks.php:96 addressbooks.php:102
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Selle aadressiraamatu loomisel tekkis viga: %s"
+
+#: lib/Views/Browse.php:218
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "\"%s\" kustutamisel lähteaadressiraamatust tekkis viga."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Selle sissekande kustutamisel tekkis viga: %s"
+
+#: lib/Views/Browse.php:348
+msgid "There was an error displaying the list"
+msgstr "Listi näitamisel tekkis viga"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Andmete impordil tekkis viga: %s"
+
+#: lib/api.php:678 lib/api.php:944
+msgid "There was an error importing the iCalendar data."
+msgstr "iCalendar andmete impordil tekkis viga."
+
+#: lib/api.php:227
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Selle aadressiraamatu eemaldamisel tekkis viga: %s"
+
+#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Selle aadressiraamatu eemaldamisel tekkis viga: %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Uue sissekande lisamisel tekkis viga. Abi saamiseks võta ühendust süsteemi "
+"halduriga."
+
+#: addressbooks.php:149
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Selle aadressiraamatu muutmisel tekkis viga: %s"
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Polnudki aadresse, mida eksportida."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Aadressiraamatuid näidatakse selles järjestuses:"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Veerge näidatakse selles järjekorras:"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "Seda failivormingut ei toetata."
+
+#: lib/api.php:1399 lib/api.php:1412
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Sellel isikul on juba aadressiraamatus %s kanne"
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"See on aadressiraamat, kuhu aadresse vaikimisi lisatakse ja imporditakse."
+
+#: config/attributes.php.dist:221
+msgid "Time Zone"
+msgstr "Ajatsoon"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Kontakti omaniku ei leitud."
+
+#: lib/Turba.php:643 lib/Driver.php:1388
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Ei suuda laadida %s kirjeldust."
+
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "Otsing ei õnnestunud."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "Võta tagasi"
+
+#: config/attributes.php.dist:340
+msgid "Unfiled"
+msgstr "Kategooriata"
+
+#: lib/api.php:711 lib/api.php:814 lib/api.php:962
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Toetamata Content-Type: %s"
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Vaata sissekannet"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Vaikimisi näidatav vaade:"
+
+#: config/attributes.php.dist:312
+msgid "Website URL"
+msgstr "Veebilehe URL"
+
+#: config/attributes.php.dist:165
+msgid "Work Address"
+msgstr "Tööaadress"
+
+#: config/attributes.php.dist:183
+msgid "Work City"
+msgstr "Töökoha linn"
+
+#: config/attributes.php.dist:201
+msgid "Work Country"
+msgstr "Töökoha riik"
+
+#: config/attributes.php.dist:246
+msgid "Work Phone"
+msgstr "Töötelefon"
+
+#: config/attributes.php.dist:177
+msgid "Work Post Office Box"
+msgstr "Töökoha postiindeks"
+
+#: config/attributes.php.dist:195
+msgid "Work Postal Code"
+msgstr "Töökoha postiindeks"
+
+#: config/attributes.php.dist:189
+msgid "Work State/Province"
+msgstr "Töökoha maakond"
+
+#: config/attributes.php.dist:171
+msgid "Work Street Address"
+msgstr "Töökoha tänav/maja"
+
+#: add.php:48 data.php:251 lib/Views/Browse.php:159 lib/Views/Browse.php:271
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Sa ei saa luua rohkem kui %d sissekannet \"%s\"-sse"
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Virtuaal aadressiraamatusse ei saa lisada kirjeid."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Virtuaal aadressiraamatusse ei saa lisada kirjeid."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Virtuaal aadressiraamatust ei saa kustutada kirjeid."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Sul puuduvad õigused selle sissekande vaatamiseks."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Sul puuduvad õigused selle objekti vaatamiseks."
+
+#: addressbooks.php:59
+msgid "You do not have permissions to delete this source."
+msgstr "Sul puuduvad õigused selle objekti kustutamiseks."
+
+#: lib/Driver/ldap.php:708
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Sul peab olema installeeritud PEAR pakket Net_LDAP kasutamaks raamistik "
+"kontroll funktsiooni."
+
+#: search.php:110
+msgid "You must provide a name for virtual address books."
+msgstr "Sa pead sisestama nime sellele virtuaal aadressiraamatule."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Sa pead valima sihtaadressiraamatu."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Sa pead valima sihtlisti."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Kõigepealt pead valima vähemalt ühe sissekande."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Sul on õigus seda sissekannet ainult vaadata."
+
+#: lib/Views/Browse.php:355
+msgid "Your default address book is not browseable."
+msgstr "Sinu vaikeaadressiraamat ei võimalda sirvimist."
+
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "Sir_vi"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Kanded"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "K_ustuta"
+
+#: contact.php:82
+msgid "_Edit"
+msgstr "Muuda"
+
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "_Import/Eksport"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Listid"
+
+#: lib/Turba.php:582
+msgid "_My Address Books"
+msgstr "_Minu aadressiraamatud"
+
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "_Uus sissekanne"
+
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "_Prindi"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Eemalda sellest listist"
+
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "_Otsing"
+
+#: contact.php:79
+msgid "_View"
+msgstr "Vaata"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "Kasvav"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "kontakt"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "aadressid.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "aadressid.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "aadressid.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "Kahanev"
+
+#: config/attributes.php.dist:377
+msgid "female"
+msgstr "naine"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "%s sees"
+
+#: config/attributes.php.dist:377
+msgid "male"
+msgstr "mees"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "suvaline"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "puudub"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "listi"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "teise aadressiraamatusse"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/eu_ES.po b/turba/po/eu_ES.po
new file mode 100644 (file)
index 0000000..f2ab2b8
--- /dev/null
@@ -0,0 +1,1309 @@
+# Basque translations for Turba.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the Turba package.
+# Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta@ehu.es>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba H3 (2.1)\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-01-16 09:33+0100\n"
+"PO-Revision-Date: 2008-07-17 14:28+0200\n"
+"Last-Translator: Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta@ehu."
+"es>\n"
+"Language-Team: Euskal Herriko Unibertsitatea EHU/UPV <xabier.arrieta@ehu."
+"es>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Gehitu IMSP helbide-liburu bat"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " Ezabatu IMSP helbide-liburua"
+
+#: data.php:339
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" badago lehendik eta ez da inportatu."
+
+#: browse.php:140
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" ez da kopiatu zerrenda bat delako."
+
+#: browse.php:138
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" ez da lekuz aldatu zerrenda bat delako."
+
+#: config/prefs.php.dist:130
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Izena Abizena\" (adib. Maialen Ugarte)"
+
+#: config/prefs.php.dist:129
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Abizena, Izena\" (adib. Ugarte, Maialen)"
+
+#: add.php:112
+#, php-format
+msgid "%s added."
+msgstr "%s gehitu da."
+
+#: data.php:363
+#, php-format
+msgid "%s file successfully imported."
+msgstr "%s fitxategia ondo inportatu da."
+
+#: templates/browse/footer.inc:5
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s - %s / %s"
+
+#: lib/Turba.php:460
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s(r)en helbide-liburua"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "iFrames onartzen duen arakatzailea behar da."
+
+#: view.php:52
+#, php-format
+msgid "Access denied to %s"
+msgstr "%s(e)rako sarbidea ukatuta"
+
+#: add.php:56 templates/browse/actions.inc:29
+msgid "Add"
+msgstr "Gehitu"
+
+#: templates/prefs/addressbookselect.inc:174
+msgid "Add address book"
+msgstr "Gehitu helbide-liburua"
+
+#: config/prefs.php.dist:41
+msgid "Add and Delete IMSP address books"
+msgstr "Gehitu eta ezabatu IMPSP helbide-liburua"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Gehitu zutabea"
+
+#: edit.php:135
+msgid "Add file"
+msgstr "Gehitu fitxategia"
+
+#: templates/browse/actions.inc:29
+msgid "Add to"
+msgstr "Gehitu hemen"
+
+#: lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Kontaktu-gehitzea ez dago erabilgarri."
+
+#: templates/addressbooks.inc:93
+msgid "Address Book"
+msgstr "Helbide-liburua"
+
+#: browse.php:28 config/prefs.php.dist:118
+msgid "Address Book Listing"
+msgstr "Helbide-liburuen zerrenda"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Helbide-liburuak"
+
+#: add.php:111
+msgid "Address book entry"
+msgstr "Helbide-liburuko sarrera"
+
+#: data.php:319
+msgid "Address book successfully purged."
+msgstr "Helbide-liburua behar bezala purgatu da."
+
+#: templates/addressbooks.inc:69
+msgid "Address book to delete "
+msgstr "Ezabatzeko helbide-liburua "
+
+#: templates/prefs/addressbookselect.inc:170
+msgid "Address books that will not be displayed:"
+msgstr "Bistaratuko ez diren helbide-liburuak:"
+
+#: search.php:88 templates/browse/search.inc:38
+msgid "Advanced Search"
+msgstr "Bilaketa aurreratua"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "Aliasa"
+
+#: templates/browse/footerAlpha.inc:7 templates/browse/footerAlpha.inc:10
+#: templates/browse/actions.inc:49
+msgid "All"
+msgstr "Denak"
+
+#: lib/api.php:607
+msgid "Already Exists"
+msgstr "Badago lehendik"
+
+#: templates/browse/javascript.inc:93
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Ziur zaude %s ezabatu nahi duzula?"
+
+#: templates/browse/javascript.inc:67
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "Ziur zaude hautatutako sarrerak ezabatu nahi dituzula?"
+
+#: config/prefs.php.dist:89
+msgid "Ascending"
+msgstr "Gorantz"
+
+#: search.php:85 templates/browse/search.inc:37
+msgid "Basic Search"
+msgstr "Oinarrizko bilaketa"
+
+#: lib/Driver/ldap.php:77 lib/Driver/ldap.php:80
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Loturak huts egin du: (%s) %s"
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "Urtebetetzea"
+
+#: templates/menu.inc:7
+msgid "Browse"
+msgstr "Arakatu"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr "Negozio kategoria"
+
+#: data.php:49
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:57
+msgid "Can't add a group to itself."
+msgstr "Ezin zaio talde bat gehitu bere buruari."
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Egiaztatu _guztiak/bat ere ez"
+
+#: templates/addressbooks.inc:51
+msgid "Choose a name"
+msgstr "Aukeratu izen bat"
+
+#: add.php:48
+msgid "Choose an address book"
+msgstr "Aukeratu helbide-liburu bat"
+
+#: templates/prefs/columnselect.inc:221
+msgid "Choose an address book:"
+msgstr "Aukeratu helbide-liburu bat:"
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "Aukeratu zein helbide-liburu bistaratuko diren eta zein ordenatan:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Aukeratu zein helbide-liburu erabiliko diren."
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose which columns to display and in what order:"
+msgstr "Aukeratu zein zutabe bistaratuko diren eta zein ordenatan:"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Zutabe-aukerak"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Bistaratuko ez diren zutabeak:"
+
+#: templates/data/export.inc:12 templates/data/import.inc:13
+msgid "Comma separated values"
+msgstr "Komaz bereizitako balioak"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Komaz bereizitako balioak (Microsoft Outlook)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "Enpresa"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "Enpresaren helbidea"
+
+#: lib/api.php:319 lib/api.php:364 lib/api.php:414 lib/api.php:546
+#: lib/api.php:660 lib/api.php:747 lib/api.php:805 lib/api.php:886
+#: lib/api.php:1087 lib/api.php:1176
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Konexioak huts egin du: %s"
+
+#: lib/Driver/ldap.php:58
+msgid "Connection failure"
+msgstr "Konexioak huts egin du"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Kontaktu-bilaketa"
+
+#: browse.php:310
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Zerrendako kontaktuak: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopiatu"
+
+#: templates/addressbooks.inc:60
+msgid "Create"
+msgstr "Sortu"
+
+#: templates/addressbooks.inc:47
+msgid "Create Address Book"
+msgstr "Sortu helbide-liburua"
+
+#: lib/ListView.php:350
+msgid "Create a new Contact List in:"
+msgstr "Sortu kontaktu-zerrenda berria hemen:"
+
+#: lib/ObjectView.php:133
+msgid "Created"
+msgstr "Sortu da"
+
+#: config/prefs.php.dist:91
+msgid "Default sorting direction:"
+msgstr "Ordenatze-noranzko lehenetsia:"
+
+#: lib/Renderer.php:47 lib/Renderer.php:50 lib/Object.php:328
+#: templates/addressbooks.inc:83 templates/browse/actions.inc:3
+msgid "Delete"
+msgstr "Ezabatu"
+
+#: templates/addressbooks.inc:65
+msgid "Delete Address Book"
+msgstr "Ezabatu helbide-liburua"
+
+#: lib/Driver/ldap.php:270
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Huts egin du ezabatzean: (%s) %s"
+
+#: lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Kontaktu-ezabatzea ez dago erabilgarri."
+
+#: delete.php:38
+msgid "Deletion failed"
+msgstr "Huts egin du ezabatzean"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "Saila"
+
+#: config/prefs.php.dist:90
+msgid "Descending"
+msgstr "Beherantz"
+
+#: templates/addressbooks.inc:122
+msgid "Description"
+msgstr "Azalpena"
+
+#: templates/browse/search.inc:106
+msgid "Directory"
+msgstr "Direktorioa"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Bistaratu"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Bistaratzeko aukerak"
+
+#: lib/Object.php:297
+msgid "Download"
+msgstr "Deskargatu"
+
+#: templates/browse/row.inc:17 templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Deskargatu vCard"
+
+#: lib/Renderer.php:42 templates/addressbooks.inc:109
+#: templates/browse/row.inc:25 templates/browse/column_headers.inc:10
+#: templates/browse/contactrow.inc:33 templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "Editatu"
+
+#: templates/browse/row.inc:25 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Editatu \"%s\""
+
+#: templates/addressbooks.inc:88
+msgid "Edit Address Books"
+msgstr "Editatu helbide-liburuak"
+
+#: edit.php:85 edit.php:161
+#, php-format
+msgid "Edit entry for %s"
+msgstr "Editatu %s(r)en sarrera"
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "Helb.el."
+
+#: edit.php:154
+#, php-format
+msgid "Entry for %s updated, but saving the uploaded file failed: %s"
+msgstr ""
+"%s(r)en sarrera eguneratu da, baina huts egin du eguneratutako fitxategia "
+"gordetzean: %s"
+
+#: edit.php:156 edit.php:159
+#, php-format
+msgid "Entry for %s updated."
+msgstr "%s(r)en sarrera eguneratu da."
+
+#: browse.php:220 browse.php:268
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Errorea %d kontaktu zerrendan gehitzean."
+
+#: browse.php:222 browse.php:270
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Errorea eskatutako %d / %d kontaktu zerrendan gehitzean."
+
+#: browse.php:86
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Errorea %d kontaktu ezabatzean."
+
+#: browse.php:88
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Errorea eskatutako %d / %d kontaktu ezabatzean."
+
+#: browse.php:66
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Errorea %d kontaktu zerrendatik kentzean."
+
+#: browse.php:68
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Errorea eskatutako %d / %d kontaktu zerrendatik kentzean."
+
+#: lib/api.php:420
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Errorea helbide liburuan bilatzean: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:41
+msgid "Export"
+msgstr "Esportatu"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Esportatu helbide-liburua"
+
+#: templates/data/export.inc:21
+msgid "Export only the selected contacts."
+msgstr "Esportatu hautatako kontaktuak bakarrik."
+
+#: templates/data/export.inc:27
+msgid "Export the following address book completely."
+msgstr "Esportatu helbide-liburu hau osorik."
+
+#: add.php:67 search.php:37 browse.php:35 browse.php:103 browse.php:130
+#: data.php:134 data.php:228 data.php:302
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Huts egin du helbide-liburua atzitzean: %s"
+
+#: browse.php:158
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Huts egin du gehitzean %s --> %s: %s"
+
+#: browse.php:316
+msgid "Failed to browse list"
+msgstr "Huts egin du zerrenda arakatzean"
+
+#: browse.php:354
+msgid "Failed to browse the directory"
+msgstr "Huts egin du direktorioa arakatzean"
+
+#: lib/Driver/ldap.php:303
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Huts egin du izena aldatzean: (%s) %s; DN zaharra = %s, DN berria = %s, Root "
+"= %s"
+
+#: browse.php:134
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Huts egin du gehitzeko objektua aurkitzean: %s"
+
+#: search.php:79
+msgid "Failed to search the address book"
+msgstr "Huts egin du helbide-liburuan bilatzean"
+
+#: data.php:149
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Huts egin du direktorioan bilatzean: %s"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "Faxa"
+
+#: display.php:99 edit.php:131
+msgid "Files"
+msgstr "Fitxategiak"
+
+#: templates/browse/search.inc:77
+msgid "Find"
+msgstr "bilatu"
+
+#: edit.php:104 edit.php:195
+msgid "Finish"
+msgstr "Amaitu"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "Izena"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr "Libre/lanpetutaren URLa"
+
+#: templates/browse/search.inc:69
+msgid "From"
+msgstr "Hemen"
+
+#: config/sources.php.dist:625
+msgid "Global Address Book"
+msgstr "Helbide-liburu orokorra"
+
+#: templates/browse/row.inc:43 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Taldea"
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "Helbidea (etxea)"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "Herria (etxea)"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "Estatua (etxea)"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "Telefonoa (etxekoa)"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "Posta-kodea (etxea)"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "Herrialdea/probintzia (etxea)"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "Kale-helbidea (etxea)"
+
+#: config/sources.php.dist:527
+msgid "IMSP"
+msgstr "IMSP"
+
+#: config/prefs.php.dist:40
+msgid "IMSP Address Book Administration"
+msgstr "IMSP helbide-liburuen administrazioa"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Inportatu helbide-liburua, %d. urratsa"
+
+#: data.php:381
+msgid "Import/Export Address Books"
+msgstr "Inportatu/esportatu helbide-liburuak"
+
+#: lib/api.php:655 lib/api.php:742
+msgid "Invalid ID"
+msgstr "IDa ez da baliozkoa"
+
+#: lib/api.php:231 lib/api.php:1159
+msgid "Invalid address book"
+msgstr "Helbide-liburua ez da baliozkoa"
+
+#: lib/api.php:409 lib/api.php:541 lib/api.php:651 lib/api.php:738
+#: lib/api.php:795
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Helbide-liburua ez da baliozkoa: %s"
+
+#: lib/api.php:1163 lib/api.php:1237 lib/api.php:1293
+msgid "Invalid email"
+msgstr "Helbide elektronikoa ez da baliozkoa"
+
+#: lib/api.php:1171
+msgid "Invalid entry"
+msgstr "Sarrera ez da baliozkoa"
+
+#: lib/Driver/ldap.php:266
+msgid "Invalid key specified."
+msgstr "Gako baliogabea zehaztu da."
+
+#: lib/api.php:1167
+msgid "Invalid name"
+msgstr "Izena ez da baliozkoa"
+
+#: lib/api.php:799
+msgid "Invalid objectId"
+msgstr "objectId ez da baliozkoa"
+
+#: lib/Driver/ldap.php:30
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"LDAP euskarria behar da, baina LDAP modulua ez dago erabilgarri edo ez da "
+"kargatu."
+
+#: lib/ObjectView.php:138
+msgid "Last Modified"
+msgstr "Aldatze-data"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Abizena"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Zerrenda"
+
+#: templates/browse/search.inc:82
+msgid "Matching"
+msgstr "hau"
+
+#: lib/api.php:206
+msgid "Maximum Number of Contacts"
+msgstr "kontaktu gehienez"
+
+#: config/prefs.php.dist:100
+msgid "Maximum number of pages"
+msgstr "orri gehienez"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menu-zerrenda"
+
+#: lib/Driver/ldap.php:296
+msgid "Missing DN in LDAP source configuration."
+msgstr "DN falta da LDAP iturburuen konfigurazioan."
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "Telefono mugikorra"
+
+#: lib/Driver/ldap.php:325 lib/Driver/ldap.php:341
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Huts egin du aldaketak: (%s) %s"
+
+#: lib/api.php:1278
+msgid "More than 1 entry found"
+msgstr "Sarrera bat baino gehiago aurkitu da"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Lekuz aldatu"
+
+#: templates/prefs/addressbookselect.inc:184
+#: templates/prefs/columnselect.inc:247
+msgid "Move left"
+msgstr "Eraman ezkerrera"
+
+#: templates/prefs/addressbookselect.inc:186
+#: templates/prefs/columnselect.inc:249
+msgid "Move right"
+msgstr "Mugitu eskuinera"
+
+#: data.php:52 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry helbide-liburua"
+
+#: lib/api.php:1195
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "Hainbat pertsonak dute helbidea [%s], baina ez dago [%s] izena duenik"
+
+#: config/sources.php.dist:132
+msgid "My Address Book"
+msgstr "Nire helbide-liburua"
+
+#: addressbooks.php:119
+msgid "My Address Books"
+msgstr "Nire helbide-liburuak"
+
+#: templates/addressbooks.inc:114 config/attributes.php.dist:42
+msgid "Name"
+msgstr "Izena"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Izen-formatua"
+
+#: add.php:36 add.php:127 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Kontaktu berria"
+
+#: edit.php:95 edit.php:102 edit.php:210 templates/data/import.inc:45
+msgid "Next"
+msgstr "Hurrengoa"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "Goitizena"
+
+#: lib/api.php:1281 lib/api.php:1330
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Ez da aurkitu %s sarrerarik %s(r)entzat"
+
+#: lib/api.php:1246
+msgid "No address books found."
+msgstr "Ez da aurkitu helbide-libururik."
+
+#: minisearch.php:83
+msgid "No contacts found"
+msgstr "Ez da aurkitu kontakturik"
+
+#: lib/api.php:566 lib/api.php:830
+msgid "No vCard data was found."
+msgstr "Ez da aurkitu vCard daturik."
+
+#: templates/browse/footer.inc:7
+msgid "None"
+msgstr "Bat ere ez"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "Oharrak"
+
+#: config/prefs.php.dist:108
+msgid "Number of items per page"
+msgstr "Elementu kopurua orriko"
+
+#: lib/api.php:671 lib/api.php:811
+msgid "Object not found"
+msgstr "Objektua ez da aurkitu"
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr "Bulegoa"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Aukera-orri hau gordetzen duzunean, helbide-liburua betiko ezabatuko da. Ez "
+"baduzu hori nahi, hautatu \"Bat ere ez\"."
+
+#: lib/api.php:838
+msgid "Only one vcard supported."
+msgstr "vcard bat bakarrik onartzen da."
+
+#: config/prefs.php.dist:39
+msgid "Other Options"
+msgstr "Beste aukera batzuk"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr "PGP gako publikoa"
+
+#: lib/api.php:550 lib/api.php:664 lib/api.php:751 lib/api.php:1015
+#: lib/api.php:1180
+msgid "Permission Denied"
+msgstr "Baimena ukatu da"
+
+#: lib/Driver.php:554
+msgid "Permission denied"
+msgstr "Baimena ukatuta"
+
+#: templates/addressbooks.inc:106
+msgid "Permissions"
+msgstr "Baimenak"
+
+#: data.php:53 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine helbide-liburua"
+
+#: templates/browse/javascript.inc:28
+msgid "Please name the new contact list:"
+msgstr "Idatzi kontaktu-zerrenda berriaren izena:"
+
+#: edit.php:98 edit.php:101 edit.php:202
+msgid "Previous"
+msgstr "Aurrekoa"
+
+#: lib/Driver/ldap.php:147
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Kontsulta honek huts egin du: (%s) %s"
+
+#: templates/block/minisearch.inc:15
+msgid "Quick Search"
+msgstr "Bilaketa azkarra"
+
+#: lib/Driver/ldap.php:191 lib/Driver/ldap.php:199 lib/Driver/ldap.php:435
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Huts egin du irakurtzean: (%s) %s"
+
+#: lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "Kontaktu-irakurtzea ez dago erabilgarri."
+
+#: lib/Renderer.php:49
+msgid "Really delete this contact?"
+msgstr "Ziur zaude kontaktu hau ezabatu nahi duzula?"
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr "Bistaratutako erregistroak:"
+
+#: templates/prefs/addressbookselect.inc:176
+msgid "Remove address book"
+msgstr "Kendu helbide-liburua"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Kendu zutabea"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Kendu zerrenda honetatik"
+
+#: templates/data/import.inc:21
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Ordeztu lehendik dagoen helbide-liburua inportatutakoarekin? <strong>Kontuz: "
+"uneko helbide-liburuko sarrera guztiak ezabatuko ditu.</strong>"
+
+#: lib/Driver.php:442
+msgid "Requested object not found."
+msgstr "Eskatutako objektua ez da aurkitu"
+
+#: add.php:37 templates/browse/search.inc:101
+msgid "Reset to Defaults"
+msgstr "Berrezarri lehenetsiak"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME ziurtagiri publikoa"
+
+#: lib/Driver/ldap.php:69
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLSek huts egin du: (%s) %s"
+
+#: add.php:37 edit.php:106 templates/addressbooks.inc:131
+msgid "Save"
+msgstr "Gorde"
+
+#: lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Kontaktu-gordetzea ez dago erabilgarri."
+
+#: lib/Block/tree_menu.php:49 templates/browse/search.inc:85
+#: templates/browse/search.inc:100 templates/block/minisearch.inc:18
+#: config/prefs.php.dist:119
+msgid "Search"
+msgstr "Bilatu"
+
+#: lib/api.php:1092
+msgid "Search failed"
+msgstr "Bilaketak huts egin du"
+
+#: lib/api.php:1185 lib/api.php:1191 lib/api.php:1200 lib/api.php:1213
+#, php-format
+msgid "Search failed: %s"
+msgstr "Bilaketak huts egin du: %s"
+
+#: lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Bilaketa ez dago erabilgarri."
+
+#: templates/block/minisearch.inc:19
+msgid "Searching..."
+msgstr "Bilatzen..."
+
+#: templates/addressbooks.inc:73
+msgid "Select an address book to delete"
+msgstr "Hautatu helbide-liburu bat ezabatzeko"
+
+#: templates/addressbooks.inc:97
+msgid "Select an address book to edit"
+msgstr "Hautatu helbide-liburu bat editatzeko"
+
+#: templates/data/export.inc:32
+msgid "Select the address book to export from:"
+msgstr "Hautatu zein helbide-liburutatik egingo den esportazioa:"
+
+#: templates/data/import.inc:26
+msgid "Select the address book to import to:"
+msgstr "Hautatu zein helbide-liburutara egingo den inportazioa:"
+
+#: templates/data/import.inc:35
+msgid "Select the charset of the source file:"
+msgstr "Hautatu iturburu-fitxategiaren karaktere-katea:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Hautatu esportazio-formatua:"
+
+#: templates/data/import.inc:43
+msgid "Select the file to import:"
+msgstr "Hautatu inportatu beharreko fitxategia:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Hautatu iturburu-fitxategiaren formatua:"
+
+#: config/prefs.php.dist:128
+msgid "Select the format used to display names:"
+msgstr "Hautatu izenak bistaratzeko erabiliko den formatua:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr ""
+"Hautatu lehenespenez bistaratzeko ikuspegia, ordenatze-aukerak eta "
+"orrialdekatze-aukerak."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Hautatu helbide-zerrendetan bistaratzeko eremuak."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Hautatu izenak bistaratzeko formatua."
+
+#: add.php:54
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Hautatutako helbidea liburua, \"%s\"."
+
+#: templates/browse/actions.inc:47
+#, php-format
+msgid "Show %s"
+msgstr "Erakutsi %s"
+
+#: templates/browse/actions.inc:49
+msgid "Show All"
+msgstr "Erakutsi denak"
+
+#: templates/browse/actions.inc:48
+msgid "Show Contacts"
+msgstr "Erakutsi kontaktuak"
+
+#: templates/browse/actions.inc:47
+msgid "Show Lists"
+msgstr "Erakutsi zerrendak"
+
+#: templates/browse/column_headers.inc:21
+#: templates/browse/column_headers.inc:36
+msgid "Sort Direction"
+msgstr "Ordenatzeko noranzkoa"
+
+#: lib/api.php:199
+msgid "Sources"
+msgstr "Iturburuak"
+
+#: browse.php:218 browse.php:266
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Behar bezala gehitu da/dira %d kontaktu zerrendan."
+
+#: browse.php:160
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Behar bezala gehitu da: %s --> %s"
+
+#: browse.php:252
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Behar bezala sortu da \"%s\" kontaktu-zerrenda."
+
+#: browse.php:84
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Behar bezala ezabatu da/dira %d kontaktu."
+
+#: browse.php:64
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Behar bezala kendu da/dira %d kontaktu zerrendatik."
+
+#: data.php:50
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/export.inc:14 templates/data/import.inc:14
+msgid "Tab separated values"
+msgstr "Tabulazioz bereizitako balioak"
+
+#: data.php:304
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "%s fitxategiak ez dauka kontakturik."
+
+#: view.php:15
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"VFS moduluak eranskinak kargatzea gaitzeko egon behar du konfiguratuta."
+
+#: lib/Driver.php:1188
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "\"%s\" helbide-liburua ez dago."
+
+#: addressbooks.php:48
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "\"%s\" helbide-liburua behar bezala sortu da."
+
+#: addressbooks.php:71
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "\"%s\" helbide-liburua behar bezala kendu da."
+
+#: addressbooks.php:89
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "\"%s\" helbide-liburua behar bezala eguneratu da."
+
+#: data.php:317
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Helbide-liburua ezin izan da purgatu: %s"
+
+#: view.php:26 display.php:23 vcard.php:22 edit.php:51
+msgid "The contact you requested does not exist."
+msgstr "Zuk eskatutako kontaktua ez dago."
+
+#: edit.php:123
+#, php-format
+msgid "The file \"%s\" has successfully been deleted."
+msgstr "\"%s\" fitxategia behar bezala ezabatu da."
+
+#: data.php:284
+msgid "The import can be finished despite the warnings."
+msgstr "Inportazioa burutu daiteke, abisuak egon arren."
+
+#: browse.php:31
+msgid "There are no browseable address books."
+msgstr "Ez dago arakatzeko moduko helbide-libururik."
+
+#: add.php:29
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Ez dago idazteko moduko helbide-libururik. Erabilgarri dauden helbide-"
+"liburuetako bat bera ere ez dago konfiguratuta sarrera berriak gehitu ahal "
+"izateko. Hau errore bat dela iruditzen bazaizu, galdetu sistema-"
+"administratzaileari."
+
+#: add.php:124
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Errore bat gertatu da kontaktu berria gehitzean. Laguntza gehiago nahi "
+"izanez gero, galdetu sistema-administratzaileari."
+
+#: browse.php:275
+msgid "There was an error creating a new list."
+msgstr "Errorea gertatu da zerrenda berria sortzean."
+
+#: addressbooks.php:38
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Errorea gertatu da helbide-liburu hau sortzean: %s"
+
+#: browse.php:166
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Errorea gertatu da \"%s\" ezabatzean sorburuko helbide-liburutik."
+
+#: delete.php:37
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Errorea gertatu da kontaktu hau ezabatzean: %s"
+
+#: browse.php:322
+msgid "There was an error displaying the list"
+msgstr "Errorea gertatu da zerrenda bistaratzean"
+
+#: data.php:349
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Errorea gertatu da datuak inportatzean: %s"
+
+#: lib/api.php:562 lib/api.php:825
+msgid "There was an error importing the iCalendar data."
+msgstr "Errorea gertatu da iCalendar datuak inportatzean."
+
+#: addressbooks.php:58 addressbooks.php:63 addressbooks.php:69
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Errorea gertatu da helbide-liburu hau kentzean: %s"
+
+#: addressbooks.php:87
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Errorea gertatu da helbide-liburu hau eguneratzean: %s"
+
+#: edit.php:165
+#, php-format
+msgid "There was an error updating this entry: %s"
+msgstr "Errorea gertatu da sarrera hau eguneratzean: %s"
+
+#: data.php:179
+msgid "There were no addresses to export."
+msgstr "Ez dago helbiderik esportatzeko."
+
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Helbide-liburu hauek ordena honetan bistaratuko dira:"
+
+#: templates/prefs/columnselect.inc:243
+msgid "These columns will display in this order:"
+msgstr "Zutabe hauek ordena honetan bistaratuko dira:"
+
+#: data.php:269
+msgid "This file format is not supported."
+msgstr "Fitxategi-formatu hau ez da onartzen."
+
+#: lib/api.php:1204 lib/api.php:1217
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Pertsona honek badu lehendik %s sarrera bat helbide-liburuan"
+
+#: config/prefs.php.dist:141
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Hau izango da kontaktuak gehitzeko edo inportatzeko helbide-liburu "
+"lehenetsia."
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "Titulua"
+
+#: lib/Driver.php:1112
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Ezin da kargatu %s(r)en definizioa."
+
+#: edit.php:95 edit.php:98 edit.php:101 edit.php:106 edit.php:204
+msgid "Undo Changes"
+msgstr "Desegin aldaketak"
+
+#: lib/api.php:595 lib/api.php:696 lib/api.php:843
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Eduki mota hau ez da onartzen: %s"
+
+#: templates/browse/row.inc:19 templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Ikusi \"%s\""
+
+#: minisearch.php:78
+msgid "View Contact"
+msgstr "Ikusi kontaktua"
+
+#: config/prefs.php.dist:117
+msgid "View to display by default:"
+msgstr "Lehenespenez bistaratzeko ikuspegia"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr "Webgunearen URLa"
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "Helbidea (lantokia)"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "Herria (lantokia)"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "Estatua (lantokia)"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "Telefonoa (lanekoa)"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "Posta-kodea (lantokia)"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "Herrialdea/probintzia (lantokia)"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "Kale-helbidea (lantokia)"
+
+#: add.php:73 browse.php:106 browse.php:231 data.php:237
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Ez duzu baimenik %d kontaktu baino gehiago sortzeko hemen: \"%s\"."
+
+#: view.php:36 display.php:52 edit.php:73
+msgid "You do not have permission to view this contact."
+msgstr "Ez duzu baimenik kontaktu hau ikusteko."
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr "Ez duzu baimenik objektu hau ikusteko."
+
+#: lib/Turba.php:536
+msgid "You do not have permissions to delete this source."
+msgstr "Ez duzu baimenik iturburu hau ezabatzeko."
+
+#: templates/browse/javascript.inc:55
+msgid "You must select a target address book."
+msgstr "Helburuko helbide-liburu bat hautatu behar duzu."
+
+#: templates/browse/javascript.inc:23
+msgid "You must select a target list."
+msgstr "Helburuko zerrenda bat hautatu behar duzu."
+
+#: edit.php:32
+msgid "You must select at least one contact first."
+msgstr "Kontaktu bat hautatu behar duzu gutxienez lehendabizi."
+
+#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:49
+#: templates/browse/javascript.inc:72
+msgid "You must select at least one entry first."
+msgstr "Sarrera bat hautatu behar duzu gutxienez lehendabizi."
+
+#: edit.php:77
+msgid "You only have permission to view this contact."
+msgstr "Kontaktu hau ikusteko baimena bakarrik daukazu."
+
+#: browse.php:329
+msgid "Your default address book is not browseable."
+msgstr "Zure helbide-liburu lehenetsia ez da arakatzeko modukoa."
+
+#: templates/browse/row.inc:6 templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[baliorik ez]"
+
+#: lib/Turba.php:559
+msgid "_Browse"
+msgstr "_Arakatu"
+
+#: templates/browse/actions.inc:48
+msgid "_Contacts"
+msgstr "_Kontaktuak"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "E_zabatu"
+
+#: lib/Turba.php:568
+msgid "_Import/Export"
+msgstr "_Inportatu/esportatu"
+
+#: templates/browse/actions.inc:47
+msgid "_Lists"
+msgstr "Zerren_dak"
+
+#: lib/Turba.php:556
+msgid "_My Address Books"
+msgstr "_Nire helbide-liburuak"
+
+#: lib/Turba.php:562
+msgid "_New Contact"
+msgstr "_Kontaktu berria"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "K_endu zerrenda honetatik"
+
+#: lib/Turba.php:564
+msgid "_Search"
+msgstr "_Bilatu"
+
+#: vcard.php:46
+msgid "contact.vcf"
+msgstr "kontaktua.vcf"
+
+#: data.php:199 data.php:204 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "kontaktuak.csv"
+
+#: data.php:209
+msgid "contacts.tsv"
+msgstr "kontaktuak.tsv"
+
+#: data.php:219
+msgid "contacts.vcf"
+msgstr "kontaktuak.vcf"
+
+#: config/prefs.php.dist:131
+msgid "no formatting"
+msgstr "formaturik ez"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "bat ere ez"
+
+#: templates/browse/actions.inc:31
+msgid "to a Contact List"
+msgstr "kontaktu-zerrenda batera"
+
+#: templates/browse/actions.inc:21
+msgid "to a different Address Book"
+msgstr "beste helbide-liburu batera"
+
+#: data.php:51 templates/browse/column_headers.inc:13
+#: templates/data/export.inc:15 templates/data/import.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/fa_IR.po b/turba/po/fa_IR.po
new file mode 100644 (file)
index 0000000..bfe9655
--- /dev/null
@@ -0,0 +1,1235 @@
+# Persian translations for Turba package.
+# This file is distributed under the same license as the Turba package.
+# 
+# Copyright 2004 High Concil of Informatics (www.shci.ir)
+# Provided by  Amirkabir Metanetworking Ltd, 2004 <persian-horde@metanetworking.com>
+# Mohsen Nader-Badr       <naderi@metanetworking.com>
+# Chakameh Mortezania     <mortezania@metanetworking.com>
+# Salman Niksefat         <niksefat@metanetworking.com>
+# Hamed Gheybi            <gheybi@metanetworking.com>
+# Vahid Ghafarpour        <ghafarpour@metanetworking.com>
+# Zahra Ahmadi Firouzjaee <ahmadi@metanetworking.com>
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2 ALPHA\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2005-06-26 10:07+0430\n"
+"PO-Revision-Date: 2005-07-08 12:45+0430\n"
+"Last-Translator: Amirkabir Metanetworking ltd. <persian-horde@metanetworking."
+"com>\n"
+"Language-Team: Persian <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: templates/prefs/imsp_opt.inc:45
+msgid " Add an IMSP Addressbook"
+msgstr "اضافه کردن یک کتابچهٔ آدرس IMSP"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid " Delete IMSP Addressbook"
+msgstr "حذف کتابچهٔ آدرس IMSP"
+
+# 
+#: data.php:299
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" در حال حاضر موجود می‌باشد و درون‌برد نشده بود."
+
+#: config/prefs.php.dist:135
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"نام  نام خانوادگی\""
+
+#: config/prefs.php.dist:134
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"نام خانوادگی  نام\""
+
+# 
+#: add.php:108
+#, php-format
+msgid "%s added."
+msgstr "%s اضافه شد"
+
+# 
+#: data.php:312
+#, php-format
+msgid "%s file successfully imported"
+msgstr "پرونده %s با موفقیّت درون‌برد شد"
+
+# 
+#: templates/browse/footer.inc:5
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s به %s از %s"
+
+# #-#-#-#-#  compendium.po (Horde 3)  #-#-#-#-#
+# 
+#: browse.php:159
+#, php-format
+msgid "'%s' was not copied because it is a list."
+msgstr "به علّت فهرست بودن '%s' از آن رونوشت تهیّه نشد"
+
+# #-#-#-#-#  compendium.po (Horde 3)  #-#-#-#-#
+# 
+#: browse.php:157
+#, php-format
+msgid "'%s' was not moved because it is a list."
+msgstr "به علّت فهرست بودن '%s' منتقل نشد"
+
+#: lib/Block/minisearch.php:45
+msgid "A browser that supports iFrames is required"
+msgstr "مرورگری که iFrames را پشتیبانی کند لازم است"
+
+#: config/prefs.php.dist:156
+msgid "Above search form"
+msgstr "بالای فرم جستجو"
+
+#: view.php:51
+#, php-format
+msgid "Access denied to %s"
+msgstr "عدم اجازهٔ دسترسی به %s"
+
+#: add.php:59 templates/browse/actions.inc:22
+msgid "Add"
+msgstr "اضافه کردن"
+
+#: templates/prefs/addressbookselect.inc:174
+msgid "Add address book"
+msgstr "اضافه کردن کتابچهٔ آدرس"
+
+#: config/prefs.php.dist:46
+msgid "Add and Delete IMSP addressbooks"
+msgstr "اضافه کردن و یا حذف کتابچه‌های آدرس IMSP"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "اضافه کردن ستون"
+
+#: edit.php:125
+msgid "Add file"
+msgstr "اضافه کردن پرونده"
+
+#: templates/browse/actions.inc:22
+msgid "Add to"
+msgstr "اضافه کردن به"
+
+#: browse.php:30 config/prefs.php.dist:123
+msgid "Address Book Listing"
+msgstr "فهرست کتابچهٔ آدرس"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "کتابچه‌های آدرس "
+
+#: add.php:107
+msgid "Address book entry"
+msgstr "ورودی کتابچهٔ آدرس"
+
+# 
+#: data.php:281
+msgid "Address book successfully purged."
+msgstr "کتابچهٔ آدرس باموفقیّت خالی شد"
+
+#: templates/prefs/addressbookselect.inc:170
+msgid "Address books that will not be displayed:"
+msgstr "کتابچه آدرس‌هایی که نمایش داده نخواهند شد:"
+
+#: search.php:102 templates/browse/search.inc:36
+msgid "Advanced Search"
+msgstr "جستجوی پیشرفته"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "نام مستعار"
+
+#: templates/browse/footerAlpha.inc:7 templates/browse/footerAlpha.inc:10
+#: templates/browse/actions.inc:41
+msgid "All"
+msgstr "همه"
+
+#: lib/api.php:492
+msgid "Already Exists"
+msgstr "از قبل موجود می‌باشد"
+
+# 
+#: templates/browse/javascript.inc:90
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "آیا مطمئنید که می‌خواهید %s را حذف کنید؟"
+
+#: templates/browse/javascript.inc:64
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "آیا مطمئنید که می‌خواهید ورودی‌های انتخاب شده را حذف کنید؟"
+
+#: config/prefs.php.dist:94
+msgid "Ascending"
+msgstr "صعودی"
+
+#: search.php:99 templates/browse/search.inc:35
+msgid "Basic Search"
+msgstr "جستجوی ساده"
+
+#: config/prefs.php.dist:155
+msgid "Below search form"
+msgstr "زیر فرم جستجو"
+
+# 
+#: lib/Driver/ldap.php:77 lib/Driver/ldap.php:80
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "پیوستن ناموفّق بود: (%s) %s"
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "روز تولد"
+
+#: templates/menu.inc:7
+msgid "Browse"
+msgstr "مرور"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr "دسته تجاری"
+
+#: data.php:28
+msgid "CSV"
+msgstr "CSV"
+
+#: templates/browse/actions.inc:45
+msgid "C_lear Search"
+msgstr "پاک کردن جستجو"
+
+#: lib/Object/Group.php:57
+msgid "Can't add a group to itself."
+msgstr "نمی‌توان یک گروه را به خودش اضافه کرد."
+
+#: templates/browse/column_headers.inc:6
+msgid "Check _All/None"
+msgstr "بررسی  همه/هیچ‌کدام"
+
+#: add.php:51
+msgid "Choose an address book"
+msgstr "انتخاب یک کتابچهٔ آدرس "
+
+#: templates/prefs/columnselect.inc:221
+msgid "Choose an address book:"
+msgstr "انتخاب یک کتابچهٔ آدرس: "
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "انتخاب کتابچه‌های آدرس و تعیین ترتیب آنها برای نمایش"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "انتخاب کتابچهٔ آدرس‌های مورد استفاده "
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose which columns to display and in what order:"
+msgstr "انتخاب نام و ترتیب ستونهای نمایش داده شده:"
+
+#: templates/browse/actions.inc:45
+msgid "Clear Search"
+msgstr "پاک کردن جستجو"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "گزینه‌های ستونی"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "ستونهایی که نمایش داده نخواهند شد:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "مقادیر جدا شده توسط ویرگول"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "مقادیر جدا شده توسط ویرگول (Microsoft Outlook)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "شرکت"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "آدرس شرکت"
+
+#: lib/api.php:299 lib/api.php:348 lib/api.php:481 lib/api.php:547
+#: lib/api.php:633 lib/api.php:679 lib/api.php:757 lib/api.php:944
+#: lib/api.php:1036
+#, php-format
+msgid "Connection failed: %s"
+msgstr "اتصال ناموفّق بود: %s"
+
+#: lib/Driver/ldap.php:58
+msgid "Connection failure"
+msgstr "خرابی ارتباط"
+
+#: browse.php:215 browse.php:249
+msgid "Contact added to list."
+msgstr "تماس به فهرست اضافه شد."
+
+#: browse.php:89
+msgid "Contact removed from list."
+msgstr "تماس از فهرست حذف شد."
+
+# 
+#: browse.php:344
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "تماس‌ها در فهرست: %s"
+
+#: templates/browse/actions.inc:12
+msgid "Copy"
+msgstr "رونوشت"
+
+#: browse.php:309
+msgid "Create a new Contact List in:"
+msgstr "ایجاد یک فهرست تماس جدید در:"
+
+#: lib/ObjectView.php:133
+msgid "Created"
+msgstr "ایجاد شده"
+
+#: config/prefs.php.dist:96
+msgid "Default sorting direction:"
+msgstr "جهت مرتب سازی پیش فرض:"
+
+#: lib/Object.php:305 lib/Renderer.php:47 lib/Renderer.php:50
+#: templates/browse/actions.inc:2
+msgid "Delete"
+msgstr "حذف"
+
+#: config/prefs.php.dist:38
+msgid "Delete Confirmation"
+msgstr "تأیید حذف"
+
+#: config/prefs.php.dist:39
+msgid "Delete button behaviour"
+msgstr "رفتار کلید حذف"
+
+# 
+#: lib/Driver/ldap.php:270
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "حذف ناموفّق بود: (%s) %s"
+
+#: delete.php:46
+msgid "Deletion failed"
+msgstr "حذف ناموفّق بود"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "اداره"
+
+#: config/prefs.php.dist:95
+msgid "Descending"
+msgstr "نزولی"
+
+#: templates/browse/search.inc:117
+msgid "Directory"
+msgstr "شاخه"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "نمایش"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "گزینه‌های نمایش"
+
+#: config/prefs.php.dist:173
+msgid "Do you want to confirm deleting entries?"
+msgstr "آیا می‌خواهید حذف ورودی‌ها را تأیید کنید؟"
+
+#: lib/Object.php:274
+msgid "Download"
+msgstr "استقرار"
+
+#: templates/browse/row.inc:17
+msgid "Download vCard"
+msgstr "استقرار vCard"
+
+#: lib/Renderer.php:42 templates/browse/actions.inc:3
+#: templates/browse/row.inc:25 templates/browse/column_headers.inc:9
+msgid "Edit"
+msgstr "ویرایش"
+
+# 
+#: templates/browse/row.inc:25
+#, php-format
+msgid "Edit '%s'"
+msgstr "ویرایش '%s'"
+
+# 
+#: edit.php:75 edit.php:151
+#, php-format
+msgid "Edit entry for %s"
+msgstr "ویرایش ورودی برای %s "
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "پست الکترونیک"
+
+#: edit.php:144
+#, php-format
+msgid "Entry for %s updated, but saving the uploaded file failed: %s"
+msgstr "ورودی برای %s بروزرسانی شد اما حفظ پروندهٔ ارسال شده ناموفّق بود: %s"
+
+# 
+#: edit.php:146 edit.php:149
+#, php-format
+msgid "Entry for %s updated."
+msgstr "ورودی برای %s بروزرسانی شد"
+
+#: browse.php:100
+msgid "Entry successfully deleted."
+msgstr "ورودی با موفقیّت حذف شد"
+
+#: templates/browse/actions.inc:6 templates/data/export.inc:41
+msgid "Export"
+msgstr "برون‌برد"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "برون‌برد کتابچهٔ آدرس"
+
+#: templates/data/export.inc:21
+msgid "Export only the selected contacts."
+msgstr "برون‌برد اطلاعات تماس انتخابی"
+
+#: templates/data/export.inc:27
+msgid "Export the following address book completely."
+msgstr "برون‌برد کتابچهٔ آدرس زیر بطور کامل"
+
+# 
+#: browse.php:67 browse.php:126 browse.php:148 data.php:110 data.php:204
+#: data.php:273 search.php:48 add.php:70
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "دسترسی به کتابچهٔ آدرس ناموفّق بود: %s"
+
+# 
+#: browse.php:167
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "اضافه کردن %s به %s ناموفّق بود: %s"
+
+#: browse.php:350
+msgid "Failed to browse list"
+msgstr "مرور فهرست ناموفّق بود"
+
+#: browse.php:389
+msgid "Failed to browse the directory"
+msgstr "مرور شاخه ناموفّق بود"
+
+# 
+#: lib/Driver/ldap.php:308
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr "تغییر نام ناموفّق بود:  (%s) %s؛ DN قبلی= %s ، DN جدید= %s ، ریشه=  %s"
+
+# 
+#: browse.php:153
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "پیدا کردن شیء اضافه‌ شده ناموفّق بود: %s"
+
+# 
+#: data.php:125 search.php:85
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "جستجوی شاخه ناموفّق بود: %s"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "دورنگار"
+
+#: display.php:100 edit.php:121
+msgid "Files"
+msgstr "پرونده‌ها‌"
+
+#: templates/browse/search.inc:69
+msgid "Find"
+msgstr "پیداکردن"
+
+#: edit.php:94 edit.php:184
+msgid "Finish"
+msgstr "خاتمه"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "نام"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr "URL آزاد/مشغول"
+
+#: templates/browse/search.inc:82
+msgid "From"
+msgstr "از"
+
+#: config/sources.php.dist:563
+msgid "Global Address Book"
+msgstr "کتابچهٔ آدرس سراسری"
+
+#: templates/browse/row.inc:43
+msgid "Group"
+msgstr "گروه"
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "آدرس منزل"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "شهر محل سکونت"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "کشور محل اقامت"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "شماره تلفن منزل"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "کد پستی محل سکونت"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "ایالت/استان محل سکونت"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "آدرس خیابان محل سکونت"
+
+#: config/sources.php.dist:479
+msgid "IMSP"
+msgstr "IMSP"
+
+#: config/prefs.php.dist:45
+msgid "IMSP Addressbook Administration"
+msgstr "سرپرستی کتابچهٔ آدرس IMSP"
+
+# 
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "درون‌برد کتابچهٔ آدرس، گام %d"
+
+#: data.php:330
+msgid "Import/Export Address Books"
+msgstr "درون‌برد/برون‌برد کتابچه‌های آدرس"
+
+#: lib/api.php:536 lib/api.php:622
+msgid "Invalid ID"
+msgstr "ID نامعتبر"
+
+#: lib/api.php:220 lib/api.php:435 lib/api.php:532 lib/api.php:618
+#: lib/api.php:669 lib/api.php:1015
+msgid "Invalid address book"
+msgstr "کتابچهٔ آدرس نامعتبر"
+
+#: lib/api.php:1019 lib/api.php:1091 lib/api.php:1144
+msgid "Invalid email"
+msgstr "پست الکترونیکی نامعتبر"
+
+#: lib/api.php:1027
+msgid "Invalid entry"
+msgstr "ورودی نامعتبر"
+
+#: lib/Driver/ldap.php:266
+msgid "Invalid key specified."
+msgstr "کلید نامعتبر مشخص شد"
+
+#: lib/api.php:1023
+msgid "Invalid name"
+msgstr "نام نامعتبر"
+
+#: lib/api.php:673
+msgid "Invalid objectId"
+msgstr "id شیء نامعتبر"
+
+#: lib/Driver/ldap.php:30
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"پشتیبانی LDAP مورد نیاز است. اما مدول LDAP قابل دسترسی نیست و یا اینکه بار "
+"نشده‌است."
+
+#: lib/ObjectView.php:138
+msgid "Last Modified"
+msgstr "آخرین اصلاح"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "نام خانوادگی"
+
+#: templates/browse/column_headers.inc:15
+msgid "List"
+msgstr "فهرست"
+
+#: templates/browse/search.inc:76
+msgid "Matching"
+msgstr "تطابق"
+
+#: lib/api.php:195
+msgid "Maximum Number of Contacts"
+msgstr "بیشینهٔ تعداد تماسها"
+
+#: config/prefs.php.dist:105
+msgid "Maximum number of pages"
+msgstr "بیشينهٔ تعداد صفحات"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "فهرست گزینگان"
+
+#: lib/Block/minisearch.php:3
+msgid "Mini Search"
+msgstr "جستجوی محدود"
+
+#: lib/Driver/ldap.php:302
+msgid "Missing DN in LDAP source configuration."
+msgstr "عدم وجود DN در پیکربندی LDAP"
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "تلفن همراه"
+
+# 
+#: lib/Driver/ldap.php:331 lib/Driver/ldap.php:343
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "تغییر ناموفّق بود: (%s) %s"
+
+#: lib/api.php:1130
+msgid "More than 1 entry found"
+msgstr "بیش از یک ورودی پیدا شد"
+
+#: templates/browse/actions.inc:11
+msgid "Move"
+msgstr "انتقال"
+
+#: templates/prefs/addressbookselect.inc:184
+#: templates/prefs/columnselect.inc:247
+msgid "Move left"
+msgstr "انتقال به چپ"
+
+#: templates/prefs/addressbookselect.inc:186
+#: templates/prefs/columnselect.inc:249
+msgid "Move right"
+msgstr "انتقال به راست"
+
+#: data.php:31 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "کتابچهٔ آدرس Mulberry "
+
+# 
+#: lib/api.php:1050
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"چند نفر با آدرس [%s], اما هیچ‌کدام با نام [%s] در کتابچهٔ آدرس از قبل موجود "
+"نیست."
+
+#: config/sources.php.dist:86 config/sources.php.dist:220
+msgid "My Addressbook"
+msgstr "کتابچهٔ آدرس من"
+
+#: config/attributes.php.dist:42
+msgid "Name"
+msgstr "نام"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "قالب نام"
+
+#: config/sources.php.dist:292
+msgid "Netcenter Member Directory"
+msgstr "شاخهٔ اعضای Netcenter"
+
+#: add.php:39 add.php:124 lib/Block/minisearch.php:27
+#: lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "تماس جدید"
+
+#: edit.php:85 edit.php:92 edit.php:199 templates/data/import.inc:45
+msgid "Next"
+msgstr "گام بعد"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "نام مستعار"
+
+# 
+#: lib/api.php:1132 lib/api.php:1181
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "هیچ ورودی %s برای %s پیدا نشد"
+
+#: lib/api.php:1100
+msgid "No address books found."
+msgstr "کتابچهٔ آدرسی پیدا نشد"
+
+#: minisearch.php:83
+msgid "No contacts found"
+msgstr "هیچ تماسی پیدا نشد"
+
+#: lib/api.php:455 lib/api.php:704
+msgid "No vCard data was found."
+msgstr "هیچ دادهٔ vCard پیدا نشد"
+
+#: templates/browse/footer.inc:7
+msgid "None"
+msgstr "هیچ"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "یادداشتها"
+
+#: config/prefs.php.dist:113
+msgid "Number of items per page"
+msgstr "تعداد موارد در هر صفحه"
+
+#: lib/api.php:553 lib/api.php:685
+msgid "Object not found"
+msgstr "شیء پیدا نشد"
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr "دفتر کار"
+
+#: lib/api.php:712
+msgid "Only one vcard supported."
+msgstr "تنها یک vcard پشتیبانی می‌شود"
+
+#: config/prefs.php.dist:37 config/prefs.php.dist:44
+msgid "Other Options"
+msgstr "گزینه‌های دیگر"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr "کلید عمومی PGP"
+
+#: lib/api.php:439 lib/api.php:540 lib/api.php:626 lib/api.php:872
+#: lib/api.php:1031
+msgid "Permission Denied"
+msgstr "عدم وجود مجوز"
+
+#: lib/Driver.php:519
+msgid "Permission denied"
+msgstr "عدم وجود مجوز"
+
+#: data.php:32 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "کتابچهٔ آدرس Pine"
+
+#: templates/browse/javascript.inc:28
+msgid "Please name the new contact list:"
+msgstr "لطفاً به فهرست تماس جدید نامی دهید:"
+
+#: edit.php:88 edit.php:91 edit.php:191
+msgid "Previous"
+msgstr "قبلی"
+
+#: config/sources.php.dist:393
+msgid "Private Address Book"
+msgstr "کتابچهٔ آدرس خصوصی"
+
+# 
+#: lib/Driver/ldap.php:147
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "پرس‌وجو ناموفّق بود: (%s) %s"
+
+#: templates/block/minisearch.inc:18
+msgid "Quick Search"
+msgstr "جستجوی سریع"
+
+# 
+#: lib/Driver/ldap.php:191 lib/Driver/ldap.php:199 lib/Driver/ldap.php:424
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "خواندن ناموفّق بود: (%s) %s"
+
+#: lib/Renderer.php:49
+msgid "Really delete this contact?"
+msgstr "آیا واقعاْ این تماس حذف شود؟"
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr "رکوردهای نمایش داده شده:"
+
+#: templates/prefs/addressbookselect.inc:176
+msgid "Remove address book"
+msgstr "حذف کتابچهٔ آدرس "
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "حذف ستون"
+
+#: templates/browse/actions.inc:2
+msgid "Remove from this list"
+msgstr "حذف از این فهرست"
+
+#: templates/data/import.inc:21
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"آیا کتابچه آدرس موجود با کتابچهٔ آدرس درون‌برد شده جابجا شود؟ <strong>اخطار: "
+"این عمل تمامی ورودی‌های کتابچهٔ آدرس کنونی شما را حذف می‌کند.</strong>"
+
+#: lib/Driver.php:421
+msgid "Requested object not found."
+msgstr "شیء خواسته شده پیدا نشد"
+
+#: add.php:40 templates/browse/search.inc:112
+msgid "Reset to Defaults"
+msgstr "بازنشانی پیش فرض‌ها"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr "گواهی عمومی S/MIME"
+
+# 
+#: lib/Driver/ldap.php:69
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS ناموفّق بود (%s) %s"
+
+#: edit.php:96 add.php:40
+msgid "Save"
+msgstr "حفظ"
+
+#: lib/Block/tree_menu.php:49 templates/block/minisearch.inc:23
+#: templates/browse/search.inc:95 templates/browse/search.inc:111
+#: config/prefs.php.dist:124
+msgid "Search"
+msgstr "جستجو"
+
+#: browse.php:329
+msgid "Search Results"
+msgstr "نتایج جستجو"
+
+#: minisearch.php:63
+msgid "Search Results:"
+msgstr "نتایج جستجو:"
+
+#: lib/api.php:949
+msgid "Search failed"
+msgstr "جستجو ناموفّق بود"
+
+#: lib/api.php:1040 lib/api.php:1046 lib/api.php:1055 lib/api.php:1068
+#, php-format
+msgid "Search failed: %s"
+msgstr "جستجو ناموفّق بود: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Searching..."
+msgstr "جستجو..."
+
+#: templates/data/export.inc:32
+msgid "Select the address book to export from:"
+msgstr "انتخاب کتابچهٔ آدرس برای برون‌برد از:"
+
+#: templates/data/import.inc:26
+msgid "Select the address book to import to:"
+msgstr "انتخاب کتابچهٔ آدرس برای درون‌برد به:"
+
+#: templates/data/import.inc:35
+msgid "Select the charset of the source file:"
+msgstr "انتخاب مجموعهٔ نویسه پروندهٔ سرچشمه:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "انتخاب قالب برون‌برد:"
+
+#: templates/data/import.inc:43
+msgid "Select the file to import:"
+msgstr "انتخاب  پرونده برای درون‌برد:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "انتخاب قالب پروندهٔ سرچشمه:"
+
+#: config/prefs.php.dist:133
+msgid "Select the format used to display names:"
+msgstr "انتخاب قالب نمایش اسامی:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "انتخاب نحوهٔ نمایش پیش فرض، گزینه‌های مرتب‌ سازی و گزینه‌های صفحه‌بندی"
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "انتخاب فیلدهایی که در فهرست آدرسها نمایش داده می‌شوند"
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "انتخاب قالب نمایش اسامی"
+
+# 
+#: add.php:57
+#, php-format
+msgid "Selected address book '%s'."
+msgstr "کتابچهٔ آدرس '%s' انتخاب شده."
+
+#: config/sources.php.dist:152
+msgid "Shared Directory"
+msgstr "شاخهٔ مشترک"
+
+#: templates/browse/actions.inc:39
+#, php-format
+msgid "Show %s"
+msgstr "نمایش %s"
+
+#: templates/browse/actions.inc:41
+msgid "Show All"
+msgstr "نمایش همه"
+
+#: templates/browse/actions.inc:40
+msgid "Show Contacts"
+msgstr "نمایش تماسها"
+
+#: templates/browse/actions.inc:39
+msgid "Show Lists"
+msgstr "نمایش فهرست‌ها"
+
+#: templates/browse/column_headers.inc:19
+#: templates/browse/column_headers.inc:30
+msgid "Sort Direction"
+msgstr "جهت مرتب سازی"
+
+#: lib/api.php:188
+msgid "Sources"
+msgstr "سرچشمه‌ها"
+
+#: config/prefs.php.dist:154
+msgid "Specify where you want advanced search results to appear."
+msgstr "مشخص کردن محل نمایش نتایج جستجوی پیشرفته"
+
+# 
+#: browse.php:169
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s با موفقیّت به %s اضافه شد"
+
+# #-#-#-#-#  compendium.po (Horde 3)  #-#-#-#-#
+# 
+#: browse.php:242
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "فهرست تماس \"%s\" با موفقیّت ایجاد شد"
+
+#: data.php:29
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "مقادیر جدا شده با فاصلهٔ چندتایی"
+
+#: view.php:15
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "پشتیبان VFS باید پیکربندی شود تا پیوستها بتوانند دریافت شوند."
+
+#: lib/Driver.php:991
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "کتابچهٔ آدرس  \"%s\"موجود نیست"
+
+#: data.php:279
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "نمی‌توان کتابچهٔ آدرس را خالی کرد: %s"
+
+#: display.php:23 view.php:26 edit.php:47 vcard.php:22
+msgid "The contact you requested does not exist."
+msgstr "تماس درخواستی شما موجود نیست"
+
+#: edit.php:113
+#, php-format
+msgid "The file \"%s\" has successfully been deleted."
+msgstr "پروندهٔ \"%s\" با موفقیّت حذف شد"
+
+#: data.php:260
+msgid "The import can be finished despite the warnings."
+msgstr "درون‌برد علی‌رغم وجود اخطار می‌تواند خاتمه یابد"
+
+#: browse.php:63
+msgid "There are no browseable address books."
+msgstr "کتابچهٔ آدرس‌ قابل مروری موجود نمی‌باشند"
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"کتابچهٔ آدرس قابل نوشتن موجود نیست. هیچ یک از کتابچه‌های آدرس قابل دسترسی، "
+"برای اضافه کردن ورودی جدید به آنها، پیکربندی نشده‌اند. اگر فکر می‌کنید این "
+"حالت یک خطاست، لطفاً با سرپرست سامانه خود تماس بگیرید."
+
+#: add.php:120
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"خطایی در اضافه کردن تماس جدید رخ داده است. برای راهنمایی بیشتر با سرپرست "
+"سامانهٔ خود تماس بگیرید."
+
+#: browse.php:213 browse.php:247
+msgid "There was an error adding this object."
+msgstr "خطایی در اضافه کردن این شیء رخ داده است."
+
+#: browse.php:255
+msgid "There was an error creating a new list."
+msgstr "خطایی در ایجاد یک لیست جدید رخ داده است."
+
+# 
+#: browse.php:175
+#, php-format
+msgid "There was an error deleting %s from the source address book."
+msgstr "خطایی در حذف %s از کتابچهٔ آدرس سرچشمه رخ داده است."
+
+# 
+#: delete.php:45
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "خطایی در حذف تماس رخ داده است: %s."
+
+#: browse.php:98
+msgid "There was an error deleting this object."
+msgstr "خطایی در حذف این شیء رخ داده است."
+
+#: browse.php:357
+msgid "There was an error displaying the list"
+msgstr "خطایی در نمایش فهرست رخ داده است."
+
+# 
+#: data.php:304
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "خطایی در درون‌برد داده رخ داده است: %s"
+
+#: lib/api.php:451 lib/api.php:699
+msgid "There was an error importing the iCalendar data."
+msgstr "خطایی در درون‌برد دادهٔ iCalendar رخ داده است."
+
+#: browse.php:87
+msgid "There was an error removing a contact from the list."
+msgstr "خطایی در حذف یک تماس از فهرست رخ داده است."
+
+# 
+#: edit.php:155
+#, php-format
+msgid "There was an error updating this entry: %s"
+msgstr "خطایی در بروزرسانی این ورودی رخ داده است: %s"
+
+#: data.php:155
+msgid "There were no addresses to export."
+msgstr "آدرسی برای برون‌برد نمودن موجود نیست."
+
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "این کتابچه‌های آدرس با این ترتیب نمایش داده خواهند شد:"
+
+#: templates/prefs/columnselect.inc:243
+msgid "These columns will display in this order:"
+msgstr "این ستونها با این ترتیب نمایش داده خواهند شد:"
+
+#: data.php:245
+msgid "This file format is not supported."
+msgstr "قالب این پرونده پشتیبانی نمی‌شود."
+
+# 
+#: lib/api.php:1059 lib/api.php:1072
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "این فرد هم اکنون یک ورودی %s در کتابچهٔ آدرس دارد."
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "عنوان"
+
+#: lib/Driver.php:933
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "نمی‌توان تعریف %s را بارکرد."
+
+#: edit.php:85 edit.php:88 edit.php:91 edit.php:96 edit.php:193
+msgid "Undo Changes"
+msgstr "واگرداندن تغییرات"
+
+#: lib/api.php:475 lib/api.php:582 lib/api.php:717
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "نوع متن بدون پشتیبانی: %s"
+
+#: config/sources.php.dist:353
+msgid "Verisign Directory"
+msgstr "شاخهٔ Verisign"
+
+# 
+#: templates/browse/row.inc:19
+#, php-format
+msgid "View '%s'"
+msgstr "نمایش '%s'"
+
+#: minisearch.php:78
+msgid "View Contact"
+msgstr "نمایش تماس"
+
+#: config/prefs.php.dist:122
+msgid "View to display by default:"
+msgstr "نمایش پیش فرض"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr "URL وب‌گاه"
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "آدرس محل کار"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "شهر محل کار"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "کشور محل کار"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "تلفن محل کار"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "کدپستی محل کار"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "ایالت/استان محل کار"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "آدرس خیابان محل کار"
+
+#: browse.php:129 browse.php:225 data.php:213 add.php:76
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "شما مجوز ایجاد بیش از %d تماس را در \"%s\" ندارید"
+
+#: display.php:58 view.php:36 edit.php:66
+msgid "You do not have permission to view this contact."
+msgstr "شما مجوز مشاهدهٔ این تماس را ندارید."
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr "شما مجوز مشاهدهٔ این شیء را ندارید."
+
+#: templates/browse/javascript.inc:52
+msgid "You must select a target address book."
+msgstr "شما باید یک کتابچهٔ آدرس مقصد انتخاب کنید."
+
+#: templates/browse/javascript.inc:23
+msgid "You must select a target list."
+msgstr "شما باید یک فهرست مقصد مشخص کنید."
+
+#: edit.php:32
+msgid "You must select at least one contact first."
+msgstr "شما در ابتدا باید حداقل یک تماس انتخاب کنید."
+
+#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:46
+#: templates/browse/javascript.inc:69
+msgid "You must select at least one entry first."
+msgstr "شما در ابتدا باید حداقل یک ورودی انتخاب کنید."
+
+#: edit.php:70
+msgid "You only have permission to view this contact."
+msgstr "شما فقط مجاز به دیدن این تماس هستید."
+
+#: browse.php:387
+msgid "Your default addressbook is not browseable."
+msgstr "کتابچهٔ آدرس پیش فرض شما قابل مرور نیست"
+
+#: templates/browse/row.inc:6
+msgid "[no value]"
+msgstr "[بدون مقدار]"
+
+#: lib/Turba.php:352
+msgid "_Browse"
+msgstr "مرور"
+
+#: templates/browse/actions.inc:40
+msgid "_Contacts"
+msgstr "نماسها"
+
+#: templates/browse/actions.inc:2
+msgid "_Delete"
+msgstr "حذف"
+
+#: lib/Turba.php:358
+msgid "_Import/Export"
+msgstr "درون‌برد/برون‌برد"
+
+#: templates/browse/actions.inc:39
+msgid "_Lists"
+msgstr "فهرست‌ها"
+
+#: lib/Turba.php:353
+msgid "_New Contact"
+msgstr "تماس جدید"
+
+#: templates/browse/actions.inc:2
+msgid "_Remove from this list"
+msgstr "حذف از این فهرست"
+
+#: lib/Turba.php:354
+msgid "_Search"
+msgstr "جستجو"
+
+#: vcard.php:46
+msgid "contact.vcf"
+msgstr "contact.vcf"
+
+#: data.php:175 data.php:180 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:185
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:195
+msgid "contacts.vcf"
+msgstr "contact.vcf"
+
+#: templates/browse/actions.inc:24
+msgid "to a Contact List"
+msgstr "به یک فهرست تماس"
+
+#: templates/browse/actions.inc:14
+msgid "to a different Address Book"
+msgstr "به کتابچهٔ آدرس متفاوت"
+
+#: data.php:30 templates/browse/column_headers.inc:12
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
+
+msgid ""
+"Default directory for your personal addressbook, contact lists, and searches."
+msgstr "شاخهٔ پیش فرض برای کتابچهٔ آدرس شخصی، فهرست تماسها و جستجوهای شما"
+
+msgid "Searching Options"
+msgstr "گزینه‌های جستجو"
diff --git a/turba/po/fi_FI.po b/turba/po/fi_FI.po
new file mode 100644 (file)
index 0000000..2e7cfdc
--- /dev/null
@@ -0,0 +1,1746 @@
+# Finnish translation for Turba.
+# Copyright
+# Leena Heino <liinu@uta.fi>, 2001-2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 3.0-cvs\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-05-20 15:42+0300\n"
+"PO-Revision-Date: 2008-05-20 12:59+0200\n"
+"Last-Translator: Leena Heino <liinu@uta.fi>\n"
+"Language-Team: Finnish <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Lisää IMSP-osoitekirja"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Poista IMSP-osoitekirja"
+
+#: data.php:350
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" on jo olemassa ja ei tuotu."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" päivitettiin, mutta tuodun tiedoston talletus epäonnistui: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" päivitetty."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" ei kopioitu koska se on lista."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" ei siirretty koska se on lista."
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Etunimi Sukunimi\"  (esim. Matti Meikäläinen)"
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Sukunimi, Etunimi\" (esim. Meikäläinen, Matti)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s lisätty."
+
+#: data.php:369
+#, php-format
+msgid "%s file successfully imported."
+msgstr "%s tiedosto tuotiin onnistuneesti."
+
+#: lib/Driver.php:559
+#, php-format
+msgid "%s of %s"
+msgstr "%s / %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s - %s / %s"
+
+#: lib/Turba.php:563
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s:n osoitekirja"
+
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr "Tarvitaan selain, jossa on tuki iframes-toiminnolle"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "%s käyttö kielletty"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Lisää"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Lisää yhteystieto"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Lisää osoitekirja"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Lisää tiedosto"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Lisää kohteeseen"
+
+#: lib/Driver.php:1895
+msgid "Adding contacts is not available."
+msgstr "Yhteystietojen lisääminen ei ole käytettävissä."
+
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr "Osoitekirja"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Osoitekirjalista"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Osoitekirjan selaus"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Osoitekirjat"
+
+#: data.php:330
+msgid "Address book successfully purged."
+msgstr "Osoitekirja tyhjennettiin."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Osoitekirjaa ei voitu näyttää: %s"
+
+#: search.php:199 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Tarkempi haku"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Kaikki"
+
+#: lib/api.php:908
+msgid "Already Exists"
+msgstr "On jo olemassa"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Vuosipäivät"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Vuosipäivä"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Oletko varma, että haluat poistaa %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Oletko varma, että haluat poistaa valitut?"
+
+#: config/attributes.php.dist:378
+msgid "Assistant"
+msgstr "Apulainen"
+
+#: search.php:196 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Yksinkertainen haku"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Yhdistäminen epäonnistui (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Syntymäpäivä"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Syntymäpäivät"
+
+#: contact.php:106 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Tyhjä nimi"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Molemmat"
+
+#: templates/menu.inc:8 templates/addressbook_list.php:29
+#: addressbooks/index.php:39
+msgid "Browse"
+msgstr "Selaa"
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr "Liiketoiminnan luokitus"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Ei voi lisätä ryhmää itseensä."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Peru"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Ei voida poistaa kaikkia osoitekirjan %s tietueita"
+
+#: config/attributes.php.dist:350
+msgid "Category"
+msgstr "Kategoria"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Muuta %s:n järjestys %s:ksi"
+
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
+msgid "Change Permissions"
+msgstr "Muuta oikeuksia"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Valitse kaikki/ei mitään"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Valitse _kaikki/ei mitään"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Lapset"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Valitse osoitekirja"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Valitse mitkä osoitekirjat näytetään ja missä järjestyksessä:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Valitse mitä osoitekirjoja käytetään."
+
+#: templates/prefs/columnselect.inc:41
+msgid "Click an address book to sort its columns:"
+msgstr "Valitse osoitekirja, jonka sarakkeita haluat järjestää:"
+
+#: templates/block/minisearch.inc:26
+msgid "Close"
+msgstr "Sulje"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Sulje haku"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Sarakkeiden asetukset"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Pilkuilla erotetut arvot"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Pilkuilla erotetut arvot (Microsoft Outlook)"
+
+#: config/attributes.php.dist:476
+msgid "Common Address Extended"
+msgstr "Laajennettu osoite (julkinen)"
+
+#: config/attributes.php.dist:494
+msgid "Common City"
+msgstr "Kaupunki (julkinen)"
+
+#: config/attributes.php.dist:512
+msgid "Common Country"
+msgstr "Maa (julkinen)"
+
+#: config/attributes.php.dist:420
+msgid "Common Phone"
+msgstr "Puhelin (julkinen)"
+
+#: config/attributes.php.dist:488
+msgid "Common Post Office Box"
+msgstr "Postilokero (julkinen)"
+
+#: config/attributes.php.dist:506
+msgid "Common Postal Code"
+msgstr "Postinumero (julkinen)"
+
+#: config/attributes.php.dist:500
+msgid "Common State/Province"
+msgstr "lääni tai alue (julkinen)"
+
+#: config/attributes.php.dist:482
+msgid "Common Street"
+msgstr "Katuosoite (julkinen)"
+
+#: config/attributes.php.dist:445
+msgid "Common Video Call"
+msgstr "Videopuhelu (julkinen)"
+
+#: config/sources.php.dist:243 config/sources.php.dist:922
+msgid "Communications"
+msgstr "Kommunikaatiot"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "Yritys"
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr "Yrityksen osoite"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:523 lib/api.php:577
+#: lib/api.php:627 lib/api.php:670 lib/api.php:725 lib/api.php:784
+#: lib/api.php:834 lib/api.php:970 lib/api.php:1062 lib/api.php:1128
+#: lib/api.php:1234 lib/api.php:1467 lib/api.php:1544 lib/api.php:1693
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Yhteys epäonnistui: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Yhteys epäonnistui"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Yhteystietojen haku"
+
+#: config/sources.php.dist:851
+msgid "Contacts"
+msgstr "Yhteystiedot"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Näytettävät yhteystiedot:"
+
+#: lib/Views/Browse.php:339
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Yhteystiedot listassa: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopioi"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Luo"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Luo osoitekirja"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Luo uusi osoitekirja"
+
+#: lib/ListView.php:447
+msgid "Create a new Contact List in:"
+msgstr "Luo uusi yhteystietolista osoitekirjaan:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "Luotu"
+
+#: contact.php:89
+msgid "De_lete"
+msgstr "Po_ista"
+
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: lib/Views/DeleteContact.php:58 lib/Forms/DeleteAddressBook.php:45
+#: addressbooks/index.php:42
+msgid "Delete"
+msgstr "Poista"
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "Poista %s"
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Poistaminen epäonnistui: (%s) %s"
+
+#: lib/Driver.php:1903
+msgid "Deleting contacts is not available."
+msgstr "Yhteystietojen poisto ei ole käytettävissä."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Poistaminen epäonnistui"
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr "Osasto"
+
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr "Kuvaus"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Hakemisto"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Näkymä"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Näkymän asetukset"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Tallenna"
+
+#: templates/browse/row.inc:15 templates/browse/row.inc:16
+msgid "Download vCard"
+msgstr "Tallenna VCard"
+
+#: templates/prefs/columnselect.inc:41
+msgid "Drag columns to re-arrange them. Check a column to enable it."
+msgstr ""
+"Raahaa sarake muuttaaksesi järjestystä. Merkitse sarake ottaaksesi sen "
+"käyttöön."
+
+#: templates/addressbook_list.php:31 templates/browse/actions.inc:6
+#: templates/browse/column_headers.inc:10 templates/browse/row.inc:28
+#: templates/browse/row.inc:29 addressbooks/index.php:40
+msgid "Edit"
+msgstr "Muokkaa"
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Muokkaa \"%s\""
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "Muokkaa %s"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "Sähköposti"
+
+#: config/attributes.php.dist:243
+msgid "Emails"
+msgstr "Sähköpostit"
+
+#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Tapahtui virhe lisättäessä %d yhteystietoa listalle."
+
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Tapahtui virhe lisättäessä %d / %d yhteystietoa listalle."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Tapahtui virhe poistettaessa %d yhteystietoa."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Tapahtui virhe poistettaessa %d / %d osoitetietoa."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Tapahtui virhe poistettaessa %d osoitetietoa listalta."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Tapahtui virhe poistettaessa %d / %d osoitetietoa listalta."
+
+#: lib/api.php:676
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Tapahtui virhe haettaessa osoitekirjasta: %s"
+
+#: templates/data/export.inc:42 templates/browse/actions.inc:10
+msgid "Export"
+msgstr "Vie"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Vie osoitekirja"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Vie vain valitut yhteystiedot."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Vie seuraavat osoitekirjat kokonaan."
+
+#: add.php:42 data.php:142 data.php:241 data.php:319 search.php:121
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Osoitekirjaan ei saatu yhteyttä: %s"
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "%s:n lisäys epäonnistui %s:ään: %s"
+
+#: lib/Views/Browse.php:345
+msgid "Failed to browse list"
+msgstr "Listan selaus epäonnistui."
+
+#: lib/Views/Browse.php:376
+msgid "Failed to browse the directory"
+msgstr "Hakemiston selaus epäonnistui"
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Nimen muuttaminen epäonnistui: (%s) %s; Uusi DN = %s, Vanha DN = %s, Juuri = "
+"%s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Lisättävän objektin haku epäonnistui: %s"
+
+#: search.php:190
+msgid "Failed to search the address book"
+msgstr "Haku osoitekirjasta epäonnistui"
+
+#: data.php:157
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Haku epäonnistui hakemistosta: %s"
+
+#: config/sources.php.dist:550
+msgid "Favourite Recipients"
+msgstr "Suositut vastaanottajat"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "Faksi"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Tiedostot"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Haku"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+msgid "Finish"
+msgstr "Päätä"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "Etunimi"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "Freebusy URL"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Lähde"
+
+#: config/attributes.php.dist:384
+msgid "Gender"
+msgstr "Sukupuoli"
+
+#: config/sources.php.dist:776
+msgid "Global Address Book"
+msgstr "Yleinen osoitekirja"
+
+#: templates/browse/row.inc:49
+msgid "Group"
+msgstr "Ryhmä"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Kotiosoite"
+
+#: config/attributes.php.dist:546
+msgid "Home Address Extended"
+msgstr "Laajennettu kotiosoite"
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr "Kotikaupunki"
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr "Kotimaa"
+
+#: config/attributes.php.dist:414
+msgid "Home Email"
+msgstr "Sähköposti (koti)"
+
+#: config/attributes.php.dist:430
+msgid "Home Fax"
+msgstr "Faksi (koti)"
+
+#: config/attributes.php.dist:552
+msgid "Home Latitude"
+msgstr "Korkeuspiiri (koti)"
+
+#: config/attributes.php.dist:557
+msgid "Home Longitude"
+msgstr "Pituuspiiri (koti)"
+
+#: config/attributes.php.dist:440
+msgid "Home Mobile Phone"
+msgstr "Matkapuhelin (koti)"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Puhelin (koti)"
+
+#: config/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr "Postilokero (koti)"
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "Postinumero (koti)"
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "Kotilääni tai alue"
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "Katuosoite (Koti)"
+
+#: config/attributes.php.dist:455
+msgid "Home Video Call"
+msgstr "Videopuhelu (koti)"
+
+#: config/attributes.php.dist:540
+msgid "Home Website URL"
+msgstr "www-sivuston URL (koti)"
+
+#: config/sources.php.dist:667
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Osoitekirjan tuonti, askel %d"
+
+#: data.php:387
+msgid "Import/Export Address Books"
+msgstr "Tuo/Vie osoitekirjoja"
+
+#: config/attributes.php.dist:360
+msgid "Initials"
+msgstr "Nimikirjaimet"
+
+#: config/attributes.php.dist:366
+msgid "Instant Messenger"
+msgstr "Pikaviestin"
+
+#: lib/api.php:965 lib/api.php:1057
+msgid "Invalid ID"
+msgstr "Virheellinen ID"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:345 lib/api.php:665
+#: lib/api.php:720 lib/api.php:779 lib/api.php:827 lib/api.php:961
+#: lib/api.php:1053 lib/api.php:1118 lib/api.php:1676
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Epäkelpo osoitekirja: %s"
+
+#: lib/api.php:1122
+msgid "Invalid contact unique ID"
+msgstr "Epäkelpo yhteistietojen yksikäsitteinen ID"
+
+#: lib/api.php:1680 lib/api.php:1766 lib/api.php:1827
+msgid "Invalid email"
+msgstr "Virheellinen sähköpostiosoite"
+
+#: lib/api.php:1688
+msgid "Invalid entry"
+msgstr "Virheellinen merkintä"
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr "Määritelty avain on virheellinen"
+
+#: lib/api.php:1684
+msgid "Invalid name"
+msgstr "Virheellinen nimi"
+
+#: config/attributes.php.dist:276
+msgid "Job Title"
+msgstr "Titteli"
+
+#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Tallennusavain pitää olla UID ei %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"LDAP-tuki on pakollinen, mutta LDAP-moduuli ei ole käytettävissä tai ladattu."
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF-Osoitekirja"
+
+#: config/attributes.php.dist:390
+msgid "Language"
+msgstr "Kieli"
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr "Muokattu viimeksi"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Sukunimi"
+
+#: config/attributes.php.dist:396
+msgid "Latitude"
+msgstr "Korkeuspiiri"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Lista"
+
+#: config/sources.php.dist:238 config/sources.php.dist:918
+msgid "Location"
+msgstr "Paikka"
+
+#: config/attributes.php.dist:401
+msgid "Longitude"
+msgstr "Pituuspiiri"
+
+#: lib/api.php:593
+msgid "Malformed request."
+msgstr "Epäkelpo pyyntö"
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
+msgid "Manage Address Books"
+msgstr "Hallinnoin osoitekirjoja"
+
+#: config/attributes.php.dist:372
+msgid "Manager"
+msgstr "Johtaja"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "On"
+
+#: lib/api.php:306
+msgid "Maximum Number of Contacts"
+msgstr "Yhteystietojen enimmäismäärä"
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "Suurin sallittu määrä sivuja."
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Valikkolista"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Muut etunimet"
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr "DN puuttuu LDAP lähdemäärittelyistä."
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Matkapuhelin"
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Muokkaus epäonnistui: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Muut asetukset..."
+
+#: lib/api.php:1804
+msgid "More than 1 entry found"
+msgstr "Löytyi useampi kuin 1 merkintää"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Siirrä"
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Siirrä vasemmalle"
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Siirrä oikealle"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry-osoitekirja"
+
+#: lib/api.php:1712
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Osoitekirjassa oli monta henkilöä osoitteella [%s], mutta ei ketään nimellä "
+"[%s]."
+
+#: config/sources.php.dist:162
+msgid "My Address Book"
+msgstr "Oma osoitekirja"
+
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "Nimi"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Nimen muoto"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Nimen etuliitteet"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Nimen päätteet"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nimi:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Uusi yhteystieto"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Seuraava"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "Lempinimi"
+
+#: lib/api.php:1807 lib/api.php:1867
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Merkintää %s ei löytynyt %s:lle"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "Ainuttakaan osoitekirjaa ei ole saatavilla. Tuonti/Vienti on estetty."
+
+#: search.php:107
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Ainuttakaan osoitekirjaa ei ole saatavilla. Haku on estetty."
+
+#: lib/api.php:659 lib/api.php:714 lib/api.php:774 lib/api.php:956
+#: lib/api.php:1048 lib/api.php:1113
+msgid "No address book specified"
+msgstr "Ei määriteltyä osoitekirjaa"
+
+#: minisearch.php:80
+msgid "No contacts found"
+msgstr "Ei löytynyt yhteystietoja"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Ei nykyiseen filtteriin täsmääviä yhteystietoja"
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "Ei täsmääviä yhteystietoja"
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr "Lähdettä suosituille vastaanottajille ei ole olemassa."
+
+#: lib/api.php:860 lib/api.php:1158
+msgid "No vCard data was found."
+msgstr "vCard tietoja ei löytynyt."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Ei mitään"
+
+#: lib/Views/Contact.php:49 lib/Views/DeleteContact.php:26
+#: lib/Views/EditContact.php:33
+msgid "Not Found"
+msgstr "Ei löytynyt"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Ei löytynyt"
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "Muistiinpanot"
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "Tietoja lukumäärä sivulla"
+
+#: lib/api.php:1007 lib/api.php:1183
+msgid "Object not found"
+msgstr "Objektia ei löytynyt"
+
+#: lib/Driver/kolab.php:1184
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Objektia UID:lla %s ei ole olemassa!"
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr "Ammatti"
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr "Toimisto"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Kun talletat tämän asetussivun, niin osoitekirjasi poistuu lopullisesti. Jos "
+"et halua poistaa osoitekirjaasi, niin sinun pitää muuttaa valinnaksi \"Ei "
+"mitään\"."
+
+#: lib/api.php:1166
+msgid "Only one vcard supported."
+msgstr "Tuettuna vain yksi vcard."
+
+#: config/sources.php.dist:245 config/sources.php.dist:924
+msgid "Organization"
+msgstr "Järjestö"
+
+#: config/sources.php.dist:246 config/sources.php.dist:926
+msgid "Other"
+msgstr "Muut"
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "Julkinen PGP-avain"
+
+#: config/attributes.php.dist:471
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr "Hakulaite"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Haluatko lopullisesti poistaa tämän yhteystiedon?"
+
+#: deletefile.php:36 lib/Driver.php:740 lib/api.php:838 lib/api.php:1697
+#: lib/Driver/sql.php:486
+msgid "Permission denied"
+msgstr "Käyttö kielletty"
+
+#: config/sources.php.dist:235 config/sources.php.dist:914
+msgid "Personal"
+msgstr "Yksityinen"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine-osoitekirja"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Anna nimi uudelle yhteystietolistalle:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:167
+msgid "Previous"
+msgstr "Edellinen"
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Kysely epäonnistui: (%s) %s"
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Luku epäonnistui: (%s) %s"
+
+#: lib/Driver.php:1887
+msgid "Reading contacts is not available."
+msgstr "Yhteystietojen luku ei ole käytettävissä."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Poistataanko osoitekirja \"%s\"? Tämä toiminto on peruuttamaton ja kaikki "
+"tämän osoitekirjan osoitteet poistuvat lopullisesti."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Poista osoitekirja"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Poista tältä listalta"
+
+#: lib/Driver.php:1925
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Käyttäjätietojen poistaminen ei ole tuettu nykyisessä osoitekirja-ajurissa."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Korvaa olemassaoleva osoitekirja tuodulla osoitekirjalla. <strong>Varoitus: "
+"Tämä poistaa kaikki merkinnät nykyisestä osoitekirjastasi.</strong>"
+
+#: lib/Driver.php:634
+msgid "Requested object not found."
+msgstr "Pyydettyä objektia ei löytynyt."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Palauta oletukset"
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "Julkinen S/MIME-varmenne"
+
+#: config/attributes.php.dist:465
+msgid "SIP"
+msgstr "SIP"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS epäonnistui: (%s) %s"
+
+#: lib/Forms/EditAddressBook.php:46 lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "Talleta"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Talleta haku virtuaaliseen osoitekirjaan?"
+
+#: lib/Driver.php:1913
+msgid "Saving contacts is not available."
+msgstr "Yhteystietojen talletus ei ole käytettävissä."
+
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+msgid "Search"
+msgstr "Haku"
+
+#: lib/api.php:1472
+msgid "Search failed"
+msgstr "Haku epäonnistui"
+
+#: lib/api.php:1702 lib/api.php:1708 lib/api.php:1717 lib/api.php:1730
+#, php-format
+msgid "Search failed: %s"
+msgstr "Haku epäonnistui: %s"
+
+#: templates/block/minisearch.inc:23
+msgid "Search for: "
+msgstr "Haetaan kohdetta: "
+
+#: lib/Driver.php:1872
+msgid "Searching is not available."
+msgstr "Haku ei ole käytettävissä."
+
+#: templates/browse/row.inc:40
+msgid "Select contact"
+msgstr "Valitse yhteystieto"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Valitse osoitekirja, josta viedään tietoja:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Valitse osoitekirja, johon tuodaan tietoja:"
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Valitse ne osoitekirjat, jotka tulisi synkronoida erillisten laitteiden "
+"kanssa:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Valitse lähdetiedoston merkistö:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Valitse viennissä käytettävä muoto:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Valitse tiedosto, josta tuodaan tietoja:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Valitse lähdetiedoston muoto:"
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "Valitse nimien esitysmuoto:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr "Valitse oletusnäkymä ja sivutusasetukset."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Valitse osoitelistassa näytettävät kentät."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Voit valita nimien esitysmuodon."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Valittu osoitekirja \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Näytä %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Näytä molemmat"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Näytä yhteystiedot"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Näytä listat"
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "Järjestyksen suunta"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Järjestä %s mukaan"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Järjestä vain %s mukaan"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Järjestä %s mukaan, ja sitten %s mukaan"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Lähteet:"
+
+#: lib/api.php:299
+msgid "Sources"
+msgstr "Lähteet"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Puoliso"
+
+#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Onnistuttiin lisäämään %d yhteytietoa listalle."
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Onnistuttiin lisäämään %s %s:ään"
+
+#: lib/Views/Browse.php:291
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Yhteystietolistan \"%s\" luonti onnistui."
+
+#: search.php:165
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Virtuaalisen osoitekirjan \"%s\" luonti onnistui."
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Onnistuttiin poistamaan %d yhteystietoa."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Onnistuttiin poistamaan %d yhteystietoa listalta."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Tabulaattorein(TAB) erotetut arvot"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Kohde osoitekirja"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Kohde yhteystietolista"
+
+#: data.php:321
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Tiedostossa %s ei ollut ainuttakaan yhteystietoa."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"VFS-taustajärjestelmä pitää olla käytettävissä ennenkuin liitteitä voi tuoda."
+
+#: lib/Driver.php:1843
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Osoitekirjaa \"%s\" ei ole olemassa."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Osoitekirjan \"%s\" luonti onnistui."
+
+#: data.php:328
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Osoitekirjaa ei voitu tyhjentää: %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Osoitekirja \"%s\" on poistettu."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "Osoitekirjan \"%s\" uudeelleen nimeys nimelle \"%s\" onnistui."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Osoitekirja \"%s\" on tallennettu."
+
+#: contact.php:23 vcard.php:19 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "Pyytämääsi ohjektia ei ole olemassa."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Poistettiin tiedosto \"%s\"."
+
+#: data.php:301
+msgid "The import can be finished despite the warnings."
+msgstr "Tuonnin voi suorittaa loppuun vaikka tulisi varoituksia."
+
+#: lib/Views/Contact.php:59 lib/Views/DeleteContact.php:36
+#: lib/Views/EditContact.php:43
+msgid "The requested contact was not found."
+msgstr "Pyydettyä yhteystietoa ei löytynyt."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Selattavia Osoitekirjoja ei ole saatavilla."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Osoitekirjoihin ei voi kirjoittaa. Käytettävissä olevat osoitekirjat eivät "
+"salli sinun lisätä niihin uusia osoitteita. Jos epäilet virhetilannetta, "
+"niin ota yhteys järjestelmän ylläpitäjään."
+
+#: lib/Views/Browse.php:349
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] ""
+"Tällä listalla on %d yhteystieto, jonka näyttäminen ei ole sallittu."
+msgstr[1] ""
+"Tällä listalla on %d yhteystietoa, joiden näyttäminen ei ole sallittu."
+
+#: search.php:161
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Tapahtui virhe luotaessa virtuaalista osoitekirjaa: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Tapahtui virhe uusien yhteystietojen lisäämisessä. Ota yhteyttä järjestelmän "
+"ylläpitäjään."
+
+#: lib/Views/Browse.php:311
+msgid "There was an error creating a new list."
+msgstr "Tapahtui virhe tehtäessä uutta listaa."
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr ""
+"Tapahtui virhe poistettaessa \"%s\" lähteenä käytetystä osoitekirjasta."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Tapahtui virhe poistettaessa tätä yhteystietoa: %s"
+
+#: lib/Views/Browse.php:355
+msgid "There was an error displaying the list"
+msgstr "Tapahtui virhe näytettäessä listaa"
+
+#: data.php:355
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Tapahtui virhe tuotaessa tietoa: %s"
+
+#: lib/api.php:856 lib/api.php:1153
+msgid "There was an error importing the iCalendar data."
+msgstr "iCalendar-tietojen tuonnissa tapahtui virhe."
+
+#: lib/api.php:235
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Tapahtui virhe poistettaessa osoitekirjaa: %s."
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Tapahtui taletettaessa yhteystietoja. Ota yhteyttä järjestelmän ylläpitäjään."
+
+#: data.php:187
+msgid "There were no addresses to export."
+msgstr "Ei ole yhtään vietävää osoitetta."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Nämä osoitekirjat näytetään tässä järjestyksessä:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Osoitekirjaa ei voitu poistaa"
+
+#: data.php:286
+msgid "This file format is not supported."
+msgstr "Tämä tiedostomuoto ei ole tuettu."
+
+#: lib/api.php:1721 lib/api.php:1734
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Tällä henkilöllä on jo %s merkintä osoitekirjassa"
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Tämä on oletusosoitekirja kun lisätään tai tuodaan yhteystietoja."
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "Aikavyöhyke"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Yhteystiedon omistajaa ei löytynyt."
+
+#: lib/Driver.php:1765 lib/Turba.php:675
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Määrityksen %s lukeminen epäonnistui."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Osoitekirjaa \"%s\" ei voitu tallentaa: %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "Ei voi hakea."
+
+#: config/attributes.php.dist:353
+msgid "Unfiled"
+msgstr "Luokittelematon"
+
+#: lib/api.php:894 lib/api.php:1004 lib/api.php:1171
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Ei tuettu Content-Type: %s"
+
+#: minisearch.php:72 minisearch.php:73
+msgid "View Contact"
+msgstr "Näytä yhteystiedot"
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "Oletuksena käytettävä näkymä:"
+
+#: config/attributes.php.dist:460
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr "Website URL"
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Osoite (Työ)"
+
+#: config/attributes.php.dist:524
+msgid "Work Address Extended"
+msgstr "Laajennettu osoite (Työ)"
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr "Kapunki (Työ)"
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr "Maa (Työ)"
+
+#: config/attributes.php.dist:408
+msgid "Work Email"
+msgstr "Sähköposti (Työ)"
+
+#: config/attributes.php.dist:425
+msgid "Work Fax"
+msgstr "Faksi (Työ)"
+
+#: config/attributes.php.dist:530
+msgid "Work Latitude"
+msgstr "Korkeuspiiri (Työ)"
+
+#: config/attributes.php.dist:535
+msgid "Work Longitude"
+msgstr "Pituuspiiri (Työ)"
+
+#: config/attributes.php.dist:435
+msgid "Work Mobile Phone"
+msgstr "Matkapuhelin (Työ)"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Puhelin (Työ)"
+
+#: config/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr "Postilokero (Työ)"
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "Postinumero (Työ)"
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "Lääni tai alue (Työ)"
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "Katuosoite (Työ)"
+
+#: config/attributes.php.dist:450
+msgid "Work Video Call"
+msgstr "Videopuhelu (Työ)"
+
+#: config/attributes.php.dist:518
+msgid "Work Website URL"
+msgstr "Www-sivusto URL (Työ)"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Sinulla ei ole oikeutta muuttaa tätä osoitekirjaa."
+
+#: add.php:48 data.php:250 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Ei voi luoda kuin enintään %d yhteystietoa \"%s\":een."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Sinulla ei ole oikeuksia poistaa tätä osoitekirjaa."
+
+#: lib/api.php:198
+msgid "You are not allowed to remove user data."
+msgstr "Sinulla ei ole oikeuksia poistaa käyttäjätietoja."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Sinun pitää ensin valita virtuaalinen osoitekirja."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Et voi lisätä yhteystietoja virtuaaliseen osoitekirjaan"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Et voi poistaa yhteystietoja virtuaalisesti osoitekirjasta"
+
+#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
+#: lib/Views/EditContact.php:49
+msgid "You do not have permission to view this contact."
+msgstr "Sinulla ei ole oikeuksia nähdä tätä yhteystietoa."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Sinulla ei ole oikeuksia nähdä tämän objektin tietoja."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Sinulla ei ole oikeuksia poistaa tätä osoitekirjaa."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Sinulla pitää olla asennettua Net_LDAP PEAR-kirjasto, jotta voit käyttää "
+"skeematarkistus funktiota."
+
+#: search.php:148
+msgid "You must provide a name for virtual address books."
+msgstr "Sinun pitää antaa nimi virtuaaliselle osoitekirjalle."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Sinun pitää ensin valita kohdeosoitekirja."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Sinun pitää ensin kohde yhteystietolista."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Sinun pitää ensin valita ainakin yksi yhteystieto."
+
+#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+msgid "You only have permission to view this contact."
+msgstr "Sinulla on oikeudet vain katsoa tätä yhteystietoa."
+
+#: lib/Views/Browse.php:362
+msgid "Your default address book is not browseable."
+msgstr "Oletusosoitekirjasi ei ole selattavissa."
+
+#: lib/Turba.php:617
+msgid "_Browse"
+msgstr "_Selaa"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Yhteystiedot"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_Poista"
+
+#: contact.php:85
+msgid "_Edit"
+msgstr "_Muokkaa"
+
+#: lib/Turba.php:626
+msgid "_Import/Export"
+msgstr "_Tuo/Vie"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Listat"
+
+#: lib/Turba.php:614
+msgid "_My Address Books"
+msgstr "O_mat osoitekirjat"
+
+#: lib/Turba.php:620
+msgid "_New Contact"
+msgstr "_Uusi yhteystieto"
+
+#: lib/Turba.php:631
+msgid "_Print"
+msgstr "_Tulosta"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Poista tältä listalta"
+
+#: lib/Turba.php:622
+msgid "_Search"
+msgstr "_Haku"
+
+#: contact.php:82
+msgid "_View"
+msgstr "_Näytä"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "nouseva"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "%s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "itse"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "contact"
+
+#: data.php:207 data.php:212 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:232
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:217
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:227
+msgid "contacts.vcf"
+msgstr "contacts.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "laskeva"
+
+#: config/attributes.php.dist:387
+msgid "female"
+msgstr "nainen"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "%s:ssä"
+
+#: config/attributes.php.dist:387
+msgid "male"
+msgstr "mies"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "ei muotoilua"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "Ei mitään"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "yhteystietolistaan"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "eri osoitekirjaan"
+
+#: data.php:62 templates/data/import.inc:15 templates/data/export.inc:15
+#: templates/browse/column_headers.inc:13
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/fr_FR.po b/turba/po/fr_FR.po
new file mode 100644 (file)
index 0000000..8731670
--- /dev/null
@@ -0,0 +1,1665 @@
+# translation of fr_FR.po to french
+# French translation of Turba 2.2-cvs
+# Turba french translation.
+# Copyright 2001-2002.
+#
+# First author: <samp@arial-concept.com>, 2001.
+# Updates and fixes: Ronnie Garcia <ronnie@mk2.net>, 2002.
+# Pierre Lachance <pl@pierrelachance.net> et Benoit St-André <ben@benoitst-andre.net>, 2003, 2004.
+# Benoit St-André <ben@benoitst-andre.net>, 2004.
+# Thierry Thomas <thierry@pompo.net>, 2002, 2003, 2005, 2006, 2007.
+# Yannick Sebastia <yannick.sebastia@ecole-navale.fr>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: fr_FR\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-03-18 09:02+0100\n"
+"PO-Revision-Date: 2008-03-18 09:00+0100\n"
+"Last-Translator: Yannick Sebastia <yannick.sebastia@ecole-navale.fr>\n"
+"Language-Team: Français <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"<ben@benoitst-andre.net>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"X-Generator: KBabel 1.11.4\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Ajouter un carnet d'adresses IMSP"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Supprimer un carnet d'adresses IMSP"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "« %s » existait déjà et n'a pas été importé."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"%s a été mis à jour, mais la sauvegarde du fichier téléchargé a échoué : %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "Mise à jour de « %s » effectuée."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "« %s » n'a pas été copié parce que c'est une liste."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "« %s » n'a pas été déplacé parce que c'est une liste."
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "« Prénom Nom »  (c. à d.. Michel Tremblay)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "« Nom, Prénom »  (c. à d.. Tremblay, Michel)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s ajouté."
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "fichier %s importé avec succès."
+
+#: lib/Driver.php:529
+#, php-format
+msgid "%s of %s"
+msgstr "%s de %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s à %s sur %s"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "Carnet d'adresses de %s"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Un navigateur supportant les cadres (iFrames) est requis"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Accès à %s refusé"
+
+#: lib/Forms/AddContact.php:25 templates/browse/actions.inc:30
+msgid "Add"
+msgstr "Ajouter"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Ajouter un contact"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Ajouter un carnet d'adresses"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Ajouter une colonne"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Ajouter un fichier"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Ajouter à"
+
+#: lib/Driver.php:1561 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "L'ajout de contacts n'est pas disponible."
+
+#: templates/addressbook_list.php:15
+msgid "Address Book"
+msgstr "Carnet d'adresses"
+
+#: templates/addressbook_list.php:12
+#, fuzzy
+msgid "Address Book List"
+msgstr "Liste des annuaires"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Liste des annuaires"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Carnets d'adresses"
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "Carnet d'adresses nettoyé avec succès."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Carnet d'adresses qui ne seront pas affichés :"
+
+#: search.php:160 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Recherche avancée"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Tout"
+
+#: lib/api.php:729
+msgid "Already Exists"
+msgstr "Existe déjà"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Anniversaires"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Anniversaire"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Êtes-vous certain de vouloir supprimer %s ?"
+
+#: templates/browse/javascript.inc:66
+#, fuzzy
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Êtes-vous certain de vouloir supprimer les entrées sélectionnées ?"
+
+#: config/attributes.php.dist:377
+msgid "Assistant"
+msgstr "Assistant"
+
+#: search.php:157 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Recherche simple"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Échec du lien (%s): %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Anniversaire"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Anniversaires"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Nom à blanc"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Les deux"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Parcourir"
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr "Catégorie affaire"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Impossible d'ajouter un groupe à lui-même."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Annuler"
+
+#: lib/Driver/kolab.php:620
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Ne peut supprimer toutes entrées de l'annuaire pour %s"
+
+#: config/attributes.php.dist:349
+msgid "Category"
+msgstr "Catégorie"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Permuter le tri %s en %s"
+
+#: templates/addressbook_list.php:31 addressbooks/index.php:40
+msgid "Change Permissions"
+msgstr "Changer les permissions"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Vérifier Tout/Rien"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Vérifier _Tout/Rien"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Enfants"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Choisir un carnet d'adresses"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "Choisir un carnet d'adresses :"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Choisir quels carnets d'adresses afficher, et dans quel ordre :"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Choisir quel carnet d'adresses utiliser."
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Choisissez quelles colonnes afficher et dans quel ordre :"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Fermer"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Fermer la recherche"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Options des colonnes"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Colonnes qui ne seront pas affichées :"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Valeurs séparées par des virgules"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Valeurs séparées par des virgules (Microsoft Outlook)"
+
+#: config/sources.php.dist:229 config/sources.php.dist:905
+msgid "Communications"
+msgstr "Communications"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "Société"
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr "Adresse professionnelle"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:398 lib/api.php:443
+#: lib/api.php:494 lib/api.php:529 lib/api.php:578 lib/api.php:624
+#: lib/api.php:665 lib/api.php:782 lib/api.php:869 lib/api.php:928
+#: lib/api.php:1020 lib/api.php:1229 lib/api.php:1301 lib/api.php:1386
+#, php-format
+msgid "Connection failed: %s"
+msgstr "La connexion a échoué : %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Échec de la connexion"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Recherche de contacts"
+
+#: config/sources.php.dist:837
+msgid "Contacts"
+msgstr "Contacts"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Contacts affichés :"
+
+#: lib/Views/Browse.php:338
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Contacts dans la liste : %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Copier"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Créer"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Créer un carnet d'adresses"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Créer un carnet d'adresses"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Créer une nouvelle liste de contacts dans :"
+
+#: lib/Views/Contact.php:74
+msgid "Created"
+msgstr "Créé"
+
+#: contact.php:86
+msgid "De_lete"
+msgstr "_Supprimer"
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Views/DeleteContact.php:58
+#: templates/addressbook_list.php:33 templates/browse/actions.inc:3
+#: addressbooks/index.php:41
+msgid "Delete"
+msgstr "Effacer"
+
+#: lib/Forms/DeleteAddressBook.php:40 lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Supprimer %s"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Échec de la suppression : (%s) %s"
+
+#: lib/Driver.php:1569 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "La suppression des contacts n'est pas disponible."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Échec de la suppression"
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr "Département"
+
+#: lib/Forms/CreateAddressBook.php:37 lib/Forms/EditAddressBook.php:44
+msgid "Description"
+msgstr "Description"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Répertoire"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Affichage"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Options d'affichage"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Télécharger"
+
+#: templates/browse/row.inc:13 templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Télécharger vCard"
+
+#: templates/addressbook_list.php:29 templates/browse/row.inc:21
+#: templates/browse/contactrow.inc:33 templates/browse/column_headers.inc:10
+#: templates/browse/actions.inc:6 addressbooks/index.php:39
+msgid "Edit"
+msgstr "Éditer"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Éditer « %s »"
+
+#: lib/Forms/EditAddressBook.php:40 lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Éditer %s"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "Courriel"
+
+#: config/attributes.php.dist:243
+#, fuzzy
+msgid "Emails"
+msgstr "Courriel"
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Erreur lors de l'ajout de %d contact(s) à la liste."
+
+#: lib/Views/Browse.php:264 lib/Views/Browse.php:304
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Erreur lors de l'ajout à la liste de %d sur %d contact(s) demandé(s)."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Erreur lors de la suppression de %d contact(s)."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Erreur lors de la suppression de %d contact(s) sur %d."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Erreur lors du retrait de %d contact(s) de la liste."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Erreur lors du retrait de la liste de %d contact(s) sur %d."
+
+#: lib/api.php:535
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Erreur lors de la recherche dans le carnet d'adresse : %s"
+
+#: templates/data/export.inc:42 templates/browse/actions.inc:10
+msgid "Export"
+msgstr "Exporter"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Exporter l'annuaire"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "N'exporter que les contacts sélectionnés."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Exporter en totalité le carnet d'adresses suivant."
+
+#: search.php:85 add.php:42 data.php:143 data.php:242 data.php:320
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Impossible d'accéder au carnet d'adresses : %s"
+
+#: lib/Views/Browse.php:210
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Impossible d'ajouter %s à %s : %s"
+
+#: lib/Views/Browse.php:344
+msgid "Failed to browse list"
+msgstr "Impossible d'accéder à cette liste"
+
+#: lib/Views/Browse.php:371
+msgid "Failed to browse the directory"
+msgstr "Impossible d'accéder à ce répertoire"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Impossible de modifier le nom : (%s) %s ; ancien DN = %s, nouveau DN = %s, "
+"racine = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Impossible de trouver l'objet à ajouter : %s"
+
+#: search.php:151
+msgid "Failed to search the address book"
+msgstr "Impossible d'effectuer une recherche dans ce carnet d'adresses : %s"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Impossible d'effectuer une recherche dans ce répertoire : %s"
+
+#: config/sources.php.dist:536
+msgid "Favourite Recipients"
+msgstr "Destinataires préférés"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "Télécopie"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Fichiers"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Rechercher"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+msgid "Finish"
+msgstr "Terminer"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "Prénom"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "URL des disponibilités"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Dans"
+
+#: config/attributes.php.dist:383
+msgid "Gender"
+msgstr "Genre"
+
+#: config/sources.php.dist:762
+msgid "Global Address Book"
+msgstr "Carnet d'adresses global"
+
+#: templates/browse/row.inc:39 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Groupe"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Adresse domicile"
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr "Ville"
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr "Pays"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Tél. domicile"
+
+#: config/attributes.php.dist:135
+#, fuzzy
+msgid "Home Post Office Box"
+msgstr "Code postal"
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "Code postal"
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "État/Province"
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "Rue"
+
+#: config/sources.php.dist:653
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importer un carnet d'adresses, étape %d"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Importer/Exporter carnet d'adresses"
+
+#: config/attributes.php.dist:359
+msgid "Initials"
+msgstr "Initiales"
+
+#: config/attributes.php.dist:365
+msgid "Instant Messenger"
+msgstr "Messagerie instantanée"
+
+#: lib/api.php:777 lib/api.php:864
+msgid "Invalid ID"
+msgstr "Identifiant invalide"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:310 lib/api.php:524
+#: lib/api.php:573 lib/api.php:619 lib/api.php:660 lib/api.php:773
+#: lib/api.php:860 lib/api.php:918 lib/api.php:1369
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Carnet d'adresses invalide : %s"
+
+#: lib/api.php:1373 lib/api.php:1447 lib/api.php:1503
+msgid "Invalid email"
+msgstr "Courriel invalide"
+
+#: lib/api.php:1381
+msgid "Invalid entry"
+msgstr "Entrée invalide"
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "Clef spécifiée invalide."
+
+#: lib/api.php:1377
+msgid "Invalid name"
+msgstr "Nom invalide"
+
+#: lib/api.php:922
+msgid "Invalid objectId"
+msgstr "ObjectId invalide"
+
+#: config/attributes.php.dist:276
+#, fuzzy
+msgid "Job Title"
+msgstr "Fonction"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "La clé de sauvegarde doit être un UID pas %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"Le support LDAP est requis mais le module LDAP est inaccessible ou non "
+"chargé."
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "Carnet d'adresses au format LDIF"
+
+#: config/attributes.php.dist:389
+msgid "Language"
+msgstr "Langue"
+
+#: lib/Views/Contact.php:80
+msgid "Last Modified"
+msgstr "Dernière modification"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Nom"
+
+#: config/attributes.php.dist:395
+msgid "Latitude"
+msgstr "Latitude"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Liste"
+
+#: config/sources.php.dist:224 config/sources.php.dist:901
+msgid "Location"
+msgstr "Lieu"
+
+#: config/attributes.php.dist:400
+msgid "Longitude"
+msgstr "Longitude"
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:45
+#, fuzzy
+msgid "Manage Address Books"
+msgstr "Mes annuaires"
+
+#: config/attributes.php.dist:371
+msgid "Manager"
+msgstr "Supérieur"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Contenant"
+
+#: lib/api.php:285
+msgid "Maximum Number of Contacts"
+msgstr "Nombre maximal de contacts"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Nombre maximal de pages"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menu"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Deuxièmes prénoms"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "DN manquant dans la configuration de la source LDAP."
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Tél. mobile"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Échec de la modification : (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Plus d'options..."
+
+#: lib/api.php:1489
+msgid "More than 1 entry found"
+msgstr "Plus d'une entrée trouvée"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Déplacer"
+
+#: templates/prefs/columnselect.inc:248
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Déplacer à gauche"
+
+#: templates/prefs/columnselect.inc:250
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Déplacer à droite"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Annuaire Mulberry"
+
+#: lib/api.php:1405
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Plusieurs personnes avec l'adresse [%s], mais aucune avec le nom [%s] "
+"existent déjà"
+
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "Mon annuaire"
+
+#: lib/Forms/CreateAddressBook.php:36 lib/Forms/EditAddressBook.php:43
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "Nom"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Format de nom"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Préfixes de nom"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Suffixes de nom"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nom :"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Nouveau contact"
+
+#: lib/Forms/EditContact.php:112 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:174 templates/data/import.inc:46
+msgid "Next"
+msgstr "Suivant"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "Surnom"
+
+#: lib/api.php:1492 lib/api.php:1543
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Aucune entrée %s trouvée pour %s. "
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Aucun carnet d'adresses disponible actuellement. L'importation et "
+"l'exportation sont désactivés."
+
+#: search.php:71
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr ""
+"Aucun carnet d'adresses disponible actuellement. La recherche est désactivée."
+
+#: lib/api.php:1456
+msgid "No address books found."
+msgstr "Aucun carnet d'adresses trouvé."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Aucun contact trouvé"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Aucun contact ne correspond au filtre courant."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Aucun contact ne correspond"
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Il n'existe pas de source pour les destinataires préférés."
+
+#: lib/api.php:686 lib/api.php:957
+msgid "No vCard data was found."
+msgstr "Aucune donnée vCard trouvée."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Aucun"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "Non trouvé"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Non trouvé"
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "Notes"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Nombre d'items par page"
+
+#: lib/api.php:793 lib/api.php:937
+msgid "Object not found"
+msgstr "Sujet non trouvé"
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr "Emploi"
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr "Bureau"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Après avoir sauvé cette page d'options, le carnet d'adresses sera supprimé "
+"définitivement. Si ce n'est pas ce que vous voulez, vous devez changer votre "
+"sélection en « Aucun »."
+
+#: lib/api.php:965
+msgid "Only one vcard supported."
+msgstr "Une seule vCard est supportée."
+
+#: config/sources.php.dist:231 config/sources.php.dist:907
+msgid "Organization"
+msgstr "Organisation"
+
+#: config/sources.php.dist:232 config/sources.php.dist:909
+msgid "Other"
+msgstr "Autre"
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "Clé publique PGP"
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr "Récepteur d'appel"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Effacer ce contact définitivement ?"
+
+#: deletefile.php:36 lib/api.php:669 lib/api.php:786 lib/api.php:873
+#: lib/api.php:931 lib/api.php:1390 lib/Driver.php:701 lib/Driver/sql.php:481
+msgid "Permission denied"
+msgstr "Permission refusée"
+
+#: config/sources.php.dist:221 config/sources.php.dist:897
+msgid "Personal"
+msgstr "Petite annonce personnelle"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Annuaire Pine"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Veuillez nommer la nouvelle liste de contacts :"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+msgid "Previous"
+msgstr "Précédent"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Échec de la requête : (%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Échec de lecture : (%s) %s"
+
+#: lib/Driver.php:1553 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "La lecture des contacts n'est pas disponible."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Supprimer réellement le carnet d'adresses \"%s\". Cela ne peut être annulé "
+"et tous les contacts de cet annuaire seront définitivement supprimés."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Supprimer un carnet d'adresses"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Retirer la colonne"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Retirer de la liste"
+
+#: lib/Driver.php:1591
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"La suppression de données utilisateur n'est pas supportée par le pilote "
+"actuellement utilisé pour enregistrer le carnet d'adresses."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Remplacer le carnet d'adresses existant par celui importé ? "
+"<strong>Attention : cela supprimera toutes vos entrées du présent carnet "
+"d'adresses.</strong>"
+
+#: lib/Driver.php:595
+msgid "Requested object not found."
+msgstr "Sujet non trouvé."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Remettre à la configuration par défaut"
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "Certificat public S/MIME"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "Échec de STARTTLS : (%s) %s"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr "Enregistrer"
+
+#: templates/browse/search_vbook.inc:4
+#, fuzzy
+msgid "Save search as a virtual address book?"
+msgstr "Enregistrer la recherche en tant que carnet d'adresses virtuel ?"
+
+#: lib/Driver.php:1579 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "L'enregistrement des contacts n'est pas disponible."
+
+#: lib/Block/tree_menu.php:58 templates/block/minisearch.inc:26
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Rechercher"
+
+#: lib/api.php:1234
+msgid "Search failed"
+msgstr "La recherche a échoué"
+
+#: lib/api.php:1395 lib/api.php:1401 lib/api.php:1410 lib/api.php:1423
+#, php-format
+msgid "Search failed: %s"
+msgstr "Échec de la recherche : %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Recherche de :"
+
+#: lib/Driver.php:1538 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "La recherche n'est pas disponible."
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Sélectionnez un contact"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Sélectionnez le carnet d'adresses pour l'exportation :"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Sélectionnez le carnet d'adresses pour l'importation :"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Sélectionnez le jeu de caractères du fichier source :"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Choisissez le format d'exportation :"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Sélectionnez le fichier à importer :"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Choisissez le format du fichier source :"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Sélectionnez le format à utiliser pour afficher les noms :"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr ""
+"Sélectionnez la vue à afficher par défaut, ainsi que les options de tri et "
+"de pagination."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Sélectionnez les champs à afficher dans la liste des adresses."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Sélectionnez le format utilisé pour afficher les noms."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Carnet d'adresses sélectionné : %s."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Afficher %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Afficher les deux"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Afficher contacts"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Afficher listes"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "Sens du tri"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Tri selon %s"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Tri selon %s seulement"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Tri par %s, puis par %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Sources :"
+
+#: lib/api.php:278
+msgid "Sources"
+msgstr "Sources"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Époux"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d contact(s) ajouté(s) à la liste."
+
+#: lib/Views/Browse.php:214
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "« %s » a bien été ajouté(e) à %s."
+
+#: lib/Views/Browse.php:290
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "La liste « %s » a bien été créée."
+
+#: search.php:126
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Création du carnet d'adresses virtuel « %s » effectuée"
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Suppression de %d contact(s) effectuée."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d contact(s) retiré(s) de la liste."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Valeurs séparées par tabulation"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Carnet d'adresses cible"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Liste de contacts cible"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Le fichier %s ne contenait aucuns contacts."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"Le module VFS doit être configuré pour permettre le téléchargement des "
+"pièces jointes."
+
+#: lib/Driver.php:1509
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Le carnet d'adresses « %s » n'existe pas."
+
+#: addressbooks/create.php:32
+#, fuzzy, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Le carnet d'adresses « %s » a été créé."
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Le carnet d'adresses n'a pas pu être purgé : %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Le carnet d'adresses « %s » a été supprimé."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "Le carnet d'adresses \"%s\" a été renommé en \"%s\"."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Le carnet d'adresses \"%s\" a été sauvegardé."
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "Le contact demandé n'existe pas."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Le fichier « %s » a été supprimé."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "L'importation s'est terminée malgré les avertissements."
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "Le contact demandé n'a pas été trouvé."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Aucun carnet d'adresses disponible en lecture."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Aucun des annuaires disponibles n'est configuré pour vous permettre "
+"d'ajouter un nouveau contact. Si vous pensez que ceci est une erreur, "
+"contactez votre administrateur système."
+
+#: search.php:122
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr ""
+"Une erreur est survenue lors de la création du carnet d'adresses virtuel : %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Une erreur est survenue lors de l'ajout de ce contact. Contactez votre "
+"administrateur système pour plus d'informations."
+
+#: lib/Views/Browse.php:310
+msgid "There was an error creating a new list."
+msgstr "Une erreur est survenue lors de la création de cette liste."
+
+#: lib/Views/Browse.php:220
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr ""
+"Une erreur est survenue lors de l'effacement de « %s » du carnet d'adresses "
+"d'origine."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Une erreur est survenue lors de la suppression de ce contact : %s"
+
+#: lib/Views/Browse.php:350
+msgid "There was an error displaying the list"
+msgstr "Une erreur est survenue lors de l'affichage de la liste"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Une erreur est survenue lors de l'importation des données : %s"
+
+#: lib/api.php:682 lib/api.php:952
+msgid "There was an error importing the iCalendar data."
+msgstr "Une erreur est survenue lors de l'importation des données iCalendar."
+
+#: lib/api.php:231
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr ""
+"Une erreur est survenue lors de la suppression d'un carnet d'adresses pour %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Une erreur est survenue lors de l'enregistrement de ce contact. Contactez "
+"votre administrateur système pour plus d'informations."
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Il n'y a pas de carnet d'adresses à exporter."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Ces carnets d'adresses seront affichés dans cet ordre :"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Ces colonnes seront affichées dans cet ordre :"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Ce carnet d'adresses ne peut être supprimé"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "Ce format de fichier n'est pas supporté."
+
+#: lib/api.php:1414 lib/api.php:1427
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Cette personne a déjà une entrée %s dans le carnet d'adresses."
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Ce sera le carnet d'adresses par défaut pour l'ajout ou l'importation de "
+"contacts."
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "Fuseau horaire"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Impossible de trouver le propriétaire du contact."
+
+#: lib/Driver.php:1431 lib/Turba.php:643
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Impossible de charger la définition de %s."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Impossible de sauvegarder le carnet d'adresses \"%s\": %s"
+
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "Impossible de rechercher."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "Défaire les modifications"
+
+#: config/attributes.php.dist:352
+msgid "Unfiled"
+msgstr "Hors catégorie"
+
+#: lib/api.php:715 lib/api.php:818 lib/api.php:970
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Type de contenu non-supporté : %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Visualiser \"%s\""
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Afficher le contact"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Affichage par défaut :"
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr "URL du site web"
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Adresse bureau"
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr "Ville du bureau"
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr "Pays du bureau"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Tél. bureau"
+
+#: config/attributes.php.dist:185
+#, fuzzy
+msgid "Work Post Office Box"
+msgstr "Code postal du bureau"
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "Code postal du bureau"
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "État/Province du bureau"
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "Rue du bureau"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Vous n'êtes pas autorisé à changer ce carnet d'adresses."
+
+#: add.php:48 data.php:251 lib/Views/Browse.php:159 lib/Views/Browse.php:273
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Vous n'êtes pas autorisé à créer plus de %d contacts dans « %s »."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Vous n'êtes pas autorisé à supprimer ce carnet d'adresses."
+
+#: lib/api.php:194
+msgid "You are not allowed to remove user data."
+msgstr "Vous n'êtes pas autorisé à supprimer des données d'utilisateur."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Vous ne pouvez pas ajouter d'éléments à un carnet d'adresses virtuel."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr ""
+"Vous ne pouvez pas ajouter de nouveaux contacts à un carnet d'adresses "
+"virtuel"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr ""
+"Vous ne pouvez pas supprimer de contacts d'un carnet d'adresses virtuel"
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Vous n'êtes pas autorisé à consulter ce contact."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Vous n'êtes pas autorisé à consulter cet objet."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Vous n'êtes pas autorisé à supprimer ce carnet d'adresses."
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Le module PEAR Net_LDAP doit être installé pour pouvoir utiliser la fonction "
+"de vérification du schéma."
+
+#: search.php:109
+msgid "You must provide a name for virtual address books."
+msgstr "Vous devez donner un nom aux carnets d'adresses virtuels."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Il faut d'abord sélectionner un carnet d'adresse cible."
+
+#: templates/browse/javascript.inc:22
+#, fuzzy
+msgid "You must select a target contact list."
+msgstr "Vous devez d'abord sélectionner une liste cible."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Vous devez d'abord sélectionner au moins un contact."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Vous êtes seulement autorisé à consulter ce contact."
+
+#: lib/Views/Browse.php:357
+msgid "Your default address book is not browseable."
+msgstr "Impossible de parcourir votre carnet d'adresses par défaut."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[pas de valeur]"
+
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "_Lister"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Contacts"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "S_upprimer"
+
+#: contact.php:82
+msgid "_Edit"
+msgstr "Édit_er"
+
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "_Importer/Exporter"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Listes"
+
+#: lib/Turba.php:582
+msgid "_My Address Books"
+msgstr "_Mes annuaires"
+
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "_Nouveau contact"
+
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "_Imprimer"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Retirer de la liste"
+
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "_Recherche"
+
+#: contact.php:79
+msgid "_View"
+msgstr "_Voir"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "ascendant"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "contact"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "contacts.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "descendant"
+
+#: config/attributes.php.dist:386
+msgid "female"
+msgstr "Féminin"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "dans %s"
+
+#: config/attributes.php.dist:386
+msgid "male"
+msgstr "Masculin"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "Aucun formatage"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "aucun"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "vers une liste de contacts"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "vers un autre carnet d'adresses"
+
+#: data.php:62 templates/data/import.inc:15 templates/data/export.inc:15
+#: templates/browse/column_headers.inc:13
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/gl_ES.po b/turba/po/gl_ES.po
new file mode 100644 (file)
index 0000000..4bba44c
--- /dev/null
@@ -0,0 +1,426 @@
+# Turba 1.2 Galician transation
+#
+# Version inicial de:
+#
+# Rafael Varela <rafael.varela@usc.es>
+# Guillermo Mendez <guille@usc.es>
+# Servicio de atencion a usuarios e sistemas
+# Universidade de Santiago de Compostela
+#
+# Revisada y corregida por:
+# 
+# Servicio de normalizacion linguistica <snlusc@usc.es>
+# Universidade de Santiago de Compostela
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 1.1\n"
+"POT-Creation-Date: 2003-04-04 12:00+0100\n"
+"PO-Revision-Date: 2003-08-19 12:13GMT+1\n"
+"Last-Translator: guille <guille@usc.es>\n"
+"Language-Team: Galego\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 0.9.5\n"
+
+#, c-format
+msgid "%s file successfully imported"
+msgstr "O arquivo %s importouse correctamente"
+
+msgid "Add Contact ..."
+msgstr "Engadir un contacto ..."
+
+msgid "Add a new contact"
+msgstr "Engadir un novo contacto"
+
+msgid "Add failed"
+msgstr "Fallou ó engadir"
+
+msgid "Add"
+msgstr "Engadir"
+
+msgid "Addressbook is read-only."
+msgstr "A axenda de enderezos soamente é de lectura."
+
+msgid "Advanced Directory Search"
+msgstr "Busca avanzada no directorio"
+
+msgid "Advanced Search"
+msgstr "Busca avanzada"
+
+msgid "Alias"
+msgstr "Alcume"
+
+msgid "An illegal value was specified."
+msgstr "O valor especificado non é válido"
+
+msgid "Available Columns:"
+msgstr "Columnas dispoñibles:"
+
+msgid "Browse"
+msgstr "Examinar"
+
+msgid "Cancel"
+msgstr "Cancelar"
+
+msgid "Cell Phone"
+msgstr "Teléfono móbil"
+
+msgid "Choose the order of the columns to display in the address list."
+msgstr "Escolla a orde das columnas que se verán na lista de enderezos."
+
+msgid "Clear Search"
+msgstr "Borrar a busca"
+
+msgid "Column Options"
+msgstr "Opcións da columna"
+
+msgid "Company"
+msgstr "Compañía"
+
+#, c-format
+msgid "Contents of %s"
+msgstr "Contido de %s"
+
+msgid "Delete"
+msgstr "Borrar"
+
+msgid "Deletion failed"
+msgstr "Fallou ó borrar"
+
+msgid "Default Display"
+msgstr "Vista a amosar por defecto"
+
+msgid "Directory Listing"
+msgstr "Lista do directorio"
+
+msgid "Directory Search"
+msgstr "Busca no directorio"
+
+msgid "Directory"
+msgstr "Directorio"
+
+msgid "Display Options"
+msgstr "Opcións de visualización"
+
+#, c-format
+msgid "Edit '%s'"
+msgstr "Editar '%s'"
+
+msgid "Edit"
+msgstr "Editar"
+
+msgid "Email"
+msgstr "Correo Electrónico"
+
+msgid "Error"
+msgstr "Erro"
+
+msgid "Export Address Book"
+msgstr "Exportar a axenda de enderezos"
+
+msgid "Export"
+msgstr "Exportar"
+
+#, c-format
+msgid "Failed to browse the directory: %s"
+msgstr "Fallou ó buscar no directorio: %s"
+
+msgid "Failed to connect to the specified directory."
+msgstr "Fallou ó conectar co directorio especificado."
+
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "Fallou o buscar no directorio: %s"
+
+msgid "Fax"
+msgstr "Fax"
+
+msgid "Find"
+msgstr "Atopar"
+
+msgid "From"
+msgstr "De"
+
+msgid "Help"
+msgstr "Axuda"
+
+msgid "Home Address"
+msgstr "Enderezo persoal"
+
+msgid "Home Phone"
+msgstr "Teléfono persoal"
+
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr "Se importa datos CSV: A primeira fila, ¿contén os nomes dos campos?"
+
+msgid "Illegal or malformed form data."
+msgstr "O datos do formulario non son válidos ou están mal formados."
+
+msgid "Import Address Book"
+msgstr "Importar a axenda de enderezos"
+
+msgid "Import"
+msgstr "Importar"
+
+msgid "Import/Export Addressbooks"
+msgstr "Importar/exportar a axenda de enderezos"
+
+msgid "Import/Export"
+msgstr "Importar/exportar"
+
+msgid "Invalid addressbook."
+msgstr "A axenda de enderezos non é válida."
+
+msgid "Invalid e-mail address."
+msgstr "O enderezo de correo non é válido."
+
+msgid "Invalid name."
+msgstr "O nome non é válido."
+
+msgid "Language"
+msgstr "Lingua"
+
+msgid "List"
+msgstr "Listar"
+
+msgid "Matching"
+msgstr "que coincida con"
+
+msgid "Message"
+msgstr "Mensaxe"
+
+msgid "Name"
+msgstr "Nome"
+
+msgid ""
+"None of the available address books are configured to allow you to add new "
+"entries to them. If you believe this is an error, please contact your system "
+"administrator."
+msgstr ""
+"Ningunha das axendas de enderezos dispoñibles está configurada para "
+"permitirlle engadir novas entradas. Para amañalo, contacte co administrador "
+"do sistema."
+
+msgid "Notes"
+msgstr "Notas"
+
+msgid "Options"
+msgstr "Opcións"
+
+msgid "Please choose an address book to add a contact to."
+msgstr "Escolla unha axenda de enderezos para engadir o contacto."
+
+msgid "Please select a directory:"
+msgstr "Escolla un directorio:"
+
+msgid "Problem?"
+msgstr "¿Problemas?"
+
+msgid "Reset"
+msgstr "Limpar"
+
+msgid "Save Changes"
+msgstr "Gardar os cambios"
+
+msgid "Save"
+msgstr "Gardar"
+
+msgid "Search Results"
+msgstr "Resultados da busca"
+
+msgid "Search"
+msgstr "Buscar"
+
+msgid "Search&nbsp;Results"
+msgstr "Resultados&nbsp;da busca"
+
+msgid "Select the destination to import to:"
+msgstr "Escolla o destino da importación:"
+
+msgid "Select the file to import:"
+msgstr "Escolla o arquivo que quere importar:"
+
+msgid "Select the format to export to:"
+msgstr "Escolla o formato en que o quere exportar:"
+
+msgid "Select the format to import from:"
+msgstr "Escolla o formato en que o quere importar:"
+
+msgid "Select the source to export from:"
+msgstr "Escolla a fonte en que o quere exportar:"
+
+msgid "Select which fields to display in the address lists."
+msgstr "Escolla os campos que se verán nas listas de enderezos."
+
+msgid "Select your preferred language:"
+msgstr "Escolla a lingua:"
+
+msgid "Selected Columns:"
+msgstr "Columnas escollidas:"
+
+#, c-format
+msgid "Send mail to %s"
+msgstr "Enviar un correo a %s"
+
+msgid "Set your preferred display language."
+msgstr "Establece a lingua de visualización."
+
+msgid "Some of Turba's configuration files are missing:"
+msgstr "Algúns dos arquivos de configuración de Turba non se dan atopados:"
+
+msgid "Success"
+msgstr "Correctamente"
+
+msgid "The data got lost"
+msgstr "Perdéronse os datos "
+
+msgid "The data got lost."
+msgstr "Perdéronse.os datos"
+
+msgid "The file contained no data."
+msgstr "O arquivo non contén datos."
+
+msgid "There are no writeable address books."
+msgstr "Non hai ningunha axenda de enderezos onde se poida escribir."
+
+msgid ""
+"There was a problem with the file upload. The file may have been larger than "
+"the maximum allowed size."
+msgstr ""
+"Houbo un problema ó enviar o arquivo, que non pode ser maior có tamaño "
+"máximo permitido."
+
+msgid ""
+"There was an error adding this object. Contact your system administrator for "
+"further help."
+msgstr ""
+"Houbo un problema o engadir este obxecto. Contacte co administrador do "
+"sistema para obter axuda."
+
+msgid ""
+"There was an error deleting this object. Contact your system administrator "
+"for further help."
+msgstr ""
+"Houbo un problema ó eliminar este obxecto. Contacte co administrador do "
+"sistema para obter axuda."
+
+msgid "There was an error importing the data."
+msgstr "Houbo un problema ó importar os datos."
+
+msgid "There was an error importing the uploaded file"
+msgstr "Houbo un problema ó importar o arquivo enviado"
+
+msgid ""
+"This file controls the default preferences for Turba, and also controls "
+"which preferences users can alter."
+msgstr ""
+"Este arquivo controla as preferencias predeterminadas de Turba, así como as "
+"que poden mudar os usuarios."
+
+msgid ""
+"This file controls the stylesheet that is used to set colors and fonts in "
+"addition to or overriding Horde defaults."
+msgstr ""
+"Este arquivo controla as follas de estilo empregadas para fixar as cores e "
+"os tipos de letra, e pode complementar ou substituír as predeterminadas de "
+"Horde."
+
+msgid ""
+"This file defines the Turba global attribute names and types - names, email "
+"addresses, etc."
+msgstr ""
+"Este arquivo define os nomes e tipos de atributos globais - nomes, enderezos "
+"de correo, etc."
+
+msgid "This file defines the list of available sources for Turba."
+msgstr "Este arquivo define a lista de fontes de datos dispoñibles para Turba."
+
+msgid ""
+"This is the main Turba configuration file. It contains paths and options for "
+"the Turba scripts."
+msgstr ""
+"Este é o arquivo principal de configuración de Turba. Contén as rutas e "
+"opcións de tódolos programas de Turba."
+
+msgid "This number must be at least one."
+msgstr "O número debe ser polo menos un 1."
+
+msgid "This person is already in your addressbook."
+msgstr "Xa está rexistrada na súa axenda de enderezos."
+
+msgid "This value must be a number."
+msgstr "O valor debe ser un número."
+
+msgid "Title"
+msgstr "Título"
+
+msgid "Turba is not properly configured"
+msgstr "O Turba non está correctamente configurado"
+
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "Non é posible cargar a definición de %s."
+
+msgid "User Options"
+msgstr "Opcións do usuario"
+
+msgid "Warning"
+msgstr "Aviso"
+
+msgid "Work Address"
+msgstr "Enderezo do traballo"
+
+msgid "Work Phone"
+msgstr "Teléfono do traballo"
+
+msgid ""
+"You didn't map any fields from the imported file to the corresponding fields "
+"in Turba."
+msgstr ""
+"Non asociou ningún campo do arquivo importado ós campos correspondentes no "
+"Turba."
+
+msgid "Your Information"
+msgstr "A súa información"
+
+msgid "Your options have been updated."
+msgstr "Actualizáronse as súas opcións"
+
+msgid "[Edit]"
+msgstr "[Editar]"
+
+msgid "add column"
+msgstr "engadir unha columna"
+
+msgid "move left"
+msgstr "mover á esquerda"
+
+msgid "move right"
+msgstr "mover á dereita"
+
+msgid "remove column"
+msgstr "eliminar a columna"
+
+msgid "View to display by default:"
+msgstr "Vista a amosar por defecto:"
+
+msgid "Select view to display by default."
+msgstr "Seleccionar vista para amosar por defecto."
+
+msgid "Name Format"
+msgstr "Formato do nome"
+
+msgid "Select which format to display names."
+msgstr "Seleccionar o formato para amosar os nomes."
+
+msgid "Select the format used to display names:"
+msgstr "Seleccionar o formato usado para amosar os nomes:"
+
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "Nome, Apelidos (p.e. Xoan Gómez)"
+
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "Apelidos, Nome (p.e. Gómez, Xoan)"
diff --git a/turba/po/hu_HU.po b/turba/po/hu_HU.po
new file mode 100644 (file)
index 0000000..9dd31a8
--- /dev/null
@@ -0,0 +1,1640 @@
+# Turba Hungarian translation file.
+# Copyright 2002-2008 Laszlo L. Tornoci
+# This file is distributed under the same license as the Turba package.
+# Latest versions: ftp://xenia.sote.hu/pub/linux/horde/
+#
+# Laszlo L. Tornoci <torlasz@xenia.sote.hu>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba-h3-2.2\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-01-22 17:27+0100\n"
+"PO-Revision-Date: 2008-01-27 10:57+0100\n"
+"Last-Translator: Laszlo L. Tornoci <torlasz@xenia.sote.hu>\n"
+"Language-Team: Hungarian <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Új IMSP címjegyzék létrehozása"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " IMSP címjegyzék törlése"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" már létezik, nem importáltuk."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"\"%s\" adatait módosítottuk, de nem sikerült elmenteni a feltöltött "
+"állományt: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" új adatait elmentettük."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "Mivel \"%s\" egy lista, ezért nem másoltuk át."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "Mivel \"%s\" egy lista, ezért nem helyeztük át."
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Keresztnév Vezetéknév\"  (pl. János Kovács)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Vezetéknév, Keresztnév\"  (pl. Kovács, János)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s bevitele megtörtént."
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "%s fájl importálása sikeresen megtörtént."
+
+#: lib/Driver.php:529
+#, php-format
+msgid "%s of %s"
+msgstr "%s / %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s - %s (összesen %s)"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s címjegyzéke"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Ehhez iFrame funkcionalitással rendelkezõ böngészõprogram szükséges."
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "%s eléréséhez nem rendelkezik megfelelõ jogosultsággal."
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Bevitel"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Partner hozzáadása"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Címjegyzék hozzáadása"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "új oszlop"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Fájl hozzáadása"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Adjuk hozzá"
+
+#: lib/Driver.php:1561 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Partnerek hozzáadása nem lehetséges."
+
+#: templates/addressbook_list.php:15
+msgid "Address Book"
+msgstr "Címjegyzék"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Címjegyzék lista"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Címjegyzék lista"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Címjegyzékek"
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "A címjegyzéket sikeresen töröltük."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Nem megjelenítendõ címjegyzékek:"
+
+#: search.php:160 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Részletes keresés"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "az összeset"
+
+#: lib/api.php:729
+msgid "Already Exists"
+msgstr "Már létezik"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Évfordulók"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Évforduló"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Biztos, hogy törölni kívánja %s-t?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Biztos abban, hogy törölni kívánja a kijelült személyeket?"
+
+#: config/attributes.php.dist:377
+msgid "Assistant"
+msgstr "Titkár(nõ)"
+
+#: search.php:157 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Keresés"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "A kapcsolat felvétele nem sikerült: (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Születésnap"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Születésnapok"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Üres név"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Mindkettõ"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Böngészés"
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr "Üzleti kategória"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV (vesszõvel elválasztott értékek)"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Csoport nem adható tagként önmagához."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Mégse"
+
+#: lib/Driver/kolab.php:620
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Nem volt törölhetõ \"%s\" összes adata"
+
+#: config/attributes.php.dist:349
+msgid "Category"
+msgstr "Kategória"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "A %s sorrend megváltoztatása %s-re"
+
+#: templates/addressbook_list.php:31 addressbooks/index.php:40
+msgid "Change Permissions"
+msgstr "Jogosultságok megváltoztatása"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Jelöljük ki mind/egyiket sem"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Jelöljük ki mind/egyiket sem"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Gyerekek"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Válasszon egy címjegyzéket"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "Válasszon egy címjegyzéket:"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr ""
+"Válassza ki, hogy mely címjegyzékeket kívánja megjeleníteni és milyen "
+"sorrendben:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Válassza ki, hogy melyik címjegyzéket kívánja használni."
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Válassza ki, hogy mely oszlopok jelenjenek meg és milyen sorrendben:"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Bezárás"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "A keresés bezárása"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Az oszlopok beállítása"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Nem megjelenítendõ oszlopok:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Vesszõvel elválasztott értékek"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Vesszõvel elválasztott értékek (Microsoft Outlook)"
+
+#: config/sources.php.dist:229 config/sources.php.dist:905
+msgid "Communications"
+msgstr "Elérhetõségek"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "Munkahely"
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr "Munkahelyi cím"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:398 lib/api.php:443
+#: lib/api.php:494 lib/api.php:529 lib/api.php:578 lib/api.php:624
+#: lib/api.php:665 lib/api.php:782 lib/api.php:869 lib/api.php:928
+#: lib/api.php:1020 lib/api.php:1229 lib/api.php:1301 lib/api.php:1386
+#, php-format
+msgid "Connection failed: %s"
+msgstr "A kapcsolat nem sikerült: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "A kapcsolat nem sikerült"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Partnerkeresés"
+
+#: config/sources.php.dist:837
+msgid "Contacts"
+msgstr "Partnerek"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "A megjelenített partnerek:"
+
+#: lib/Views/Browse.php:338
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "A %s lista tagjai"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Másoljuk át"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Létrehozás"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Címjegyzék létrehozása"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Új címjegyzék létrehozása"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Új partnerlista létrehozása itt:"
+
+#: lib/Views/Contact.php:74
+msgid "Created"
+msgstr "Létrehozva"
+
+#: contact.php:86
+msgid "De_lete"
+msgstr "Törlés"
+
+#: templates/addressbook_list.php:33 templates/browse/actions.inc:3
+#: addressbooks/index.php:41 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
+msgid "Delete"
+msgstr "Törlés"
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "%s törlése"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "A törlés nem sikerült: (%s) %s"
+
+#: lib/Driver.php:1569 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Partnerek törlése nem lehetséges."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "A törlés nem sikerült"
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr "Részleg"
+
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr "Leírás"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Címtár"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Megjelenítés"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Megjelenítési beállítások"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Letöltés"
+
+#: templates/browse/row.inc:13 templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "vCard letöltés"
+
+#: templates/addressbook_list.php:29 templates/browse/row.inc:21
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+#: templates/browse/contactrow.inc:33 addressbooks/index.php:39
+msgid "Edit"
+msgstr "Módosítás"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "\"%s\" módosítása"
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "%s módosítása"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "Email"
+
+#: config/attributes.php.dist:243
+msgid "Emails"
+msgstr "Email címek"
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Nem sikerült %d partner hozzáadása a listához."
+
+#: lib/Views/Browse.php:264 lib/Views/Browse.php:304
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "%d partner listához történõ hozzáadása nem sikerült a kívánt %d-bõl."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Nem sikerült %d partner törlése."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "%d partner törlése nem sikerült a kívánt %d-bõl."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "%d partner törlése nem sikerült a listából."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "A listából nem sikerült %d partnert törölni a kívánt %d-bõl."
+
+#: lib/api.php:535
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "A(z) %s címjegyzékben nem sikerült keresni."
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Exportálás"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Címjegyzék exportálása"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Csak a kijelölt levelezõpartnereket exportáljuk."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "A teljes címjegyzéket exportáljuk."
+
+#: data.php:143 data.php:242 data.php:320 add.php:42 search.php:85
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "A(z) %s címjegyzék nem érhetõ el."
+
+#: lib/Views/Browse.php:210
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Nem sikerült %s hozzáadása %s-hez: %s"
+
+#: lib/Views/Browse.php:344
+msgid "Failed to browse list"
+msgstr "Nem sikerült a lista böngészése"
+
+#: lib/Views/Browse.php:371
+msgid "Failed to browse the directory"
+msgstr "A címtár böngészése nem lehetséges"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"A következõ nevet nem sikerült megváltoztatni: (%s) %s; A régi DN=%s, az új "
+"DN=%s, gyökér = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Nem sikerült megtalálni a beviendõ objektumot: %s"
+
+#: search.php:151
+msgid "Failed to search the address book"
+msgstr "A címjegyzékben nem sikerült a keresés"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Nem sikerült a %s címtárban való keresés"
+
+#: config/sources.php.dist:536
+msgid "Favourite Recipients"
+msgstr "Kedvenc címzettek"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Fájlok"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Mezõ"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+msgid "Finish"
+msgstr "Befejezés"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "Keresztnév"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "Idõbeosztási web cím"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "honnan"
+
+#: config/attributes.php.dist:383
+msgid "Gender"
+msgstr "Nem"
+
+#: config/sources.php.dist:762
+msgid "Global Address Book"
+msgstr "Globális címjegyzék"
+
+#: templates/browse/row.inc:39 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Csoport"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Otthoni cím: utca"
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr "Otthoni cím: város"
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr "Otthoni cím: ország"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Otthoni telefon"
+
+#: config/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr "Otthoni cím: postafiók"
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "Otthoni cím: irányítószám"
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "Otthoni cím: állam/tartomány"
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "Otthoni cím: utca, házszám"
+
+#: config/sources.php.dist:653
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Címjegyzék importálása, %d. lépés"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Címjegyzékek import/exportja"
+
+#: config/attributes.php.dist:359
+msgid "Initials"
+msgstr "Kezdõbetûk"
+
+#: config/attributes.php.dist:365
+msgid "Instant Messenger"
+msgstr "Azonnali üzenetküldõ"
+
+#: lib/api.php:777 lib/api.php:864
+msgid "Invalid ID"
+msgstr "Hibás/elfogadhatatlan ID."
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:310 lib/api.php:524
+#: lib/api.php:573 lib/api.php:619 lib/api.php:660 lib/api.php:773
+#: lib/api.php:860 lib/api.php:918 lib/api.php:1369
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Hibás címjegyzék: %s"
+
+#: lib/api.php:1373 lib/api.php:1447 lib/api.php:1503
+msgid "Invalid email"
+msgstr "Hibás email cím."
+
+#: lib/api.php:1381
+msgid "Invalid entry"
+msgstr "Hibás/elfogadhatatlan adat."
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "Hibás/elfogadhatatlan kulcs."
+
+#: lib/api.php:1377
+msgid "Invalid name"
+msgstr "Hibás/elfogadhatatlan név."
+
+#: lib/api.php:922
+msgid "Invalid objectId"
+msgstr "Hibás/elfogadhatatlan objectId."
+
+#: config/attributes.php.dist:276
+msgid "Job Title"
+msgstr "Munkakör"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "A mentéshez szükséges kulcs UID kell legyen, nem pedig %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"LDAP támogatásra lenne szükség, de az LDAP modul nem áll rendelkezésre, vagy "
+"nem töltõdött be."
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF címjegyzék"
+
+#: config/attributes.php.dist:389
+msgid "Language"
+msgstr "Nyelv"
+
+#: lib/Views/Contact.php:80
+msgid "Last Modified"
+msgstr "Utolsó módosítás"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Családnév"
+
+#: config/attributes.php.dist:395
+msgid "Latitude"
+msgstr "Földrajzi szélesség"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Lista"
+
+#: config/sources.php.dist:224 config/sources.php.dist:901
+msgid "Location"
+msgstr "Hely"
+
+#: config/attributes.php.dist:400
+msgid "Longitude"
+msgstr "Földrajzi hosszúság"
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:45
+msgid "Manage Address Books"
+msgstr "Címjegyzékek rendezése"
+
+#: config/attributes.php.dist:371
+msgid "Manager"
+msgstr "Fõnök"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "mit"
+
+#: lib/api.php:285
+msgid "Maximum Number of Contacts"
+msgstr "A partnerek maximális száma"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Az oldalak maximális száma"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menülista"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "További keresztnevek"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "Az LDAP szerver konfigurációjában nincs megadva a DN."
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Mobiltelefon"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "A módosítás nem sikerült: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "További beállítások..."
+
+#: lib/api.php:1489
+msgid "More than 1 entry found"
+msgstr "Több, mint 1 találat van"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Tegyük át"
+
+#: templates/prefs/columnselect.inc:248
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "balra"
+
+#: templates/prefs/columnselect.inc:250
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "jobbra"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry címjegyzék"
+
+#: lib/api.php:1405
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Több személy is van már, akinek a címe [%s], de egyiknek sem [%s] a neve"
+
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "Saját címjegyzék"
+
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "Név"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Név formátum"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Név elõttiek"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Név utániak"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Név:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Új levelezõpartner"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Következõ"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "Becenév"
+
+#: lib/api.php:1492 lib/api.php:1543
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Nincs %s adat a(z) %s címhez"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Jelenleg egy címjegyzék sem érhetõ el. Az import ill. export funkció nem "
+"mûködik."
+
+#: search.php:71
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Jelenleg egy címjegyzék sem érhetõ el. Keresés nem lehetséges."
+
+#: lib/api.php:1456
+msgid "No address books found."
+msgstr "Egy címjegyzék sem található."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Nem találtunk egy partnert sem"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Nincs a feltételeknek megfelelõ partner."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Nincs ilyen partner"
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Nincsenek kedvenc címzettek."
+
+#: lib/api.php:686 lib/api.php:957
+msgid "No vCard data was found."
+msgstr "Nem sikerült vCard adatot találni."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "nincs"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "nem található"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "nem található"
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "Megjegyzés"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Az oldalon megjelenítendõ elemek száma"
+
+#: lib/api.php:793 lib/api.php:937
+msgid "Object not found"
+msgstr "Az objektum nem található meg"
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr "Foglalkozás"
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr "Hivatal/munkahely"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Ha elmenti ezeket az opciókat, a címjegyzék véglegesen törlõdik. Ha ezt nem "
+"szeretné, ne válasszon ki egy címjegyzéket sem."
+
+#: lib/api.php:965
+msgid "Only one vcard supported."
+msgstr "Csak egy vcard megengedett."
+
+#: config/sources.php.dist:231 config/sources.php.dist:907
+msgid "Organization"
+msgstr "Szervezet"
+
+#: config/sources.php.dist:232 config/sources.php.dist:909
+msgid "Other"
+msgstr "Egyéb"
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "PGP nyilvános kulcs"
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr "Személyhívó"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Véglegesen töröljük ezt a partnert?"
+
+#: deletefile.php:36 lib/Driver.php:701 lib/api.php:669 lib/api.php:786
+#: lib/api.php:873 lib/api.php:931 lib/api.php:1390 lib/Driver/sql.php:481
+msgid "Permission denied"
+msgstr "Ehhez nincs megfelelõ jogosultsága"
+
+#: config/sources.php.dist:221 config/sources.php.dist:897
+msgid "Personal"
+msgstr "személyes"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine címjegyzék"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Kérem adja meg az új lista nevét:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+msgid "Previous"
+msgstr "Elõzõ"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "A keresés sikertelen: (%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Olvasási hiba: (%s) %s"
+
+#: lib/Driver.php:1553 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "A partnerek nem olvashatók."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Valóban törölni szeretné \"%s\" címjegyzéket? Ez nem visszafordítható lépés, "
+"és törli az összes a címjegyzékben levõ adatot."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "A címjegyzék törlése"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "oszlop törlése"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Töröljük a listáról"
+
+#: lib/Driver.php:1591
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Felhasználóai adatok törlése nem támogatott a címjegyzék alrendszer "
+"meghajtójában."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Írjuk felül a kiválasztott címjegyzéket az importálttal? "
+"<strong>Figyelmeztetés: ez kitörli az összes adatot a jelenlegi "
+"címjegyzékbõl!</strong>"
+
+#: lib/Driver.php:595
+msgid "Requested object not found."
+msgstr "A keresett objektum nem található."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Kezdjük újra a kitöltést"
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME nyilvános tanúsítvány"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "A STARTTLS nem sikerült: (%s) %s"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr "Mentés"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Mentsük el a keresést virtuális címjegyzékként?"
+
+#: lib/Driver.php:1579 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Partnerek mentése nem lehetséges."
+
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:58 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Keresés"
+
+#: lib/api.php:1234
+msgid "Search failed"
+msgstr "A keresés nem sikerült"
+
+#: lib/api.php:1395 lib/api.php:1401 lib/api.php:1410 lib/api.php:1423
+#, php-format
+msgid "Search failed: %s"
+msgstr "A keresés nem sikerült: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Keresés: "
+
+#: lib/Driver.php:1538 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Keresés nem lehetséges."
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Válassza ki a partnert"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Válassza ki, melyik címjegyzékbõl kíván exportálni:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Válassza ki, melyik címjegyzékbe kíván importálni:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Válassza ki az importálandó fájl karakterkészletét:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Válassza ki az exportálás formátumát:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Válassza ki az importálandó fájlt:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Válassza ki az importálandó fájl formátumát:"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Válassza ki a nevek megjelenítési formáját:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr ""
+"Beállítható az alapértelmezett megjelenítés, sorbarendezés ill. lapozás."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Kiválasztható, hogy a címlistában milyen mezõk jelenjenek meg."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Kiválasztható a nevek megjelenítési módja."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "A kiválasztott címjegyzék \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "%s megjelenítése"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Mutassunk mindkettõt"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Mutassuk a partnereket"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Mutassuk a listákat"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "A sorbarendezés iránya"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "%s szerinti sorrend"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "csak %s szerinti sorrend"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "%s, majd %s szerinti sorrend"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Forrás:"
+
+#: lib/api.php:278
+msgid "Sources"
+msgstr "Címjegyzék források"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Házastárs"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "A listához sikerült %d partnert hozzáadni."
+
+#: lib/Views/Browse.php:214
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s hozzáadása %s-hez sikeres volt"
+
+#: lib/Views/Browse.php:290
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "\"%s\" listát sikeresen létrehoztuk."
+
+#: search.php:126
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "\"%s\" virtuális címjegyzéket sikeresen létrehoztuk."
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Sikeresen töröltünk %d partnert."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Sikeresen eltávolítottuk %d partnert a listáról."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV (TAB karakterrel elválasztott értékek)"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "TAB karakterrel elválasztott értékek"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "ebbe a címjegyzékbe"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "ebbe a partnerlistába"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "A(z) %s állományban nem volt partneradat."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "A VFS alrendszert be kell állítani a mellékletek feltöltéséhez."
+
+#: lib/Driver.php:1509
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "A(z) \"%s\" címjegyzék nem létezik."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "A(z) \"%s\" címjegyzéket létrehoztuk."
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "A címjegyzék nem törölhetõ: %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "A(z) \"%s\" címjegyzéket töröltük."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "A(z) \"%s\" címjegyzéket átnevezzük \"%s\"-re."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "A(z) \"%s\" címjegyzéket elmentettük."
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "A keresett levelezõpartner nem létezik."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "A(z) \"%s\" állományt töröltük."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "Az importálás a figyelmeztetések ellenére befejezhetõ."
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "A kívánt partner nem található."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Nincsen olyan címjegyzék, amiben böngészni tud."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Nincs írható címjegyzék. Egyetlen rendelkezésre álló címjegyzékhez sem "
+"jogosult újabb bejegyzéseket hozzátenni. Ha úgy gondolja, hogy ez "
+"rendellenes, akkor forduljon a helyi rendszergazdához."
+
+#: search.php:122
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "A virtuális címjegyzék létrehozása során hiba lépett fel: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"A partner adatainak hozzáadása nem sikerült. További segítségért forduljon a "
+"rendszergazdához."
+
+#: lib/Views/Browse.php:310
+msgid "There was an error creating a new list."
+msgstr "Hiba történt az új lista létrehozása során."
+
+#: lib/Views/Browse.php:220
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "\"%s\"-t nem sikerült kitörölni az eredeti címjegyzékbõl."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "A partner adatainak törlése során hiba történt: %s"
+
+#: lib/Views/Browse.php:350
+msgid "There was an error displaying the list"
+msgstr "A lista megjelenítésekor hiba történt"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Az importálás során hiba történt: %s"
+
+#: lib/api.php:682 lib/api.php:952
+msgid "There was an error importing the iCalendar data."
+msgstr "Az iCalendar adatok importálása során hiba történt."
+
+#: lib/api.php:231
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Hiba történt %s címjegyzékének törlése során"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"A partner adatait nem sikerült elmenteni. További segítségért forduljon a "
+"rendszergazdához."
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Nem volt exportálható cím."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "A címjegyzékek ebben a sorrendben jelennek meg:"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Ezek az oszlopok ebben a sorrendben jelennek meg:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Ez a címjegyzék nem törölhetõ"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "Az a fájlformátum nem támogatott."
+
+#: lib/api.php:1414 lib/api.php:1427
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Ez a személy már szerepel a címjegyzékében, mint %s"
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Új partnerek beírásakor ill. importáláskor ez lesz az alapértelmezett "
+"címjegyzék."
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "Idõzóna"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "A partneradatok tulajdonosa nem található."
+
+#: lib/Driver.php:1431 lib/Turba.php:643
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Nem sikerült beolvasni %s definícióját."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "\"%s\" címjegyzék mentése nem sikerült: %s"
+
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "A keresés nem lehetséges."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "Mégse mentsük el"
+
+#: config/attributes.php.dist:352
+msgid "Unfiled"
+msgstr "Besorolatlan"
+
+#: lib/api.php:715 lib/api.php:818 lib/api.php:970
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Nem támogatott tartalomtípus: %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "\"%s\" megtekintése"
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Új bejegyzés rögzítése"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Az alapértelmezés szerinti megjelenítés:"
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr "Web cím"
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Munkahelyi cím: utca"
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr "Munkahelyi cím: város"
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr "Munkahelyi cím: ország"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Munkahelyi telefon"
+
+#: config/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr "Munkahelyi cím: postafiók"
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "Munkahelyi cím: irányítószám"
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "Munkahelyi cím: állam/tartomány"
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "Munkahelyi cím: utca, házszám"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Ön nem jogosult módosítani ezt a címjegyzéket."
+
+#: data.php:251 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:273
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Ön legfeljebb %d partnert hozhat létre \"%s\"-ben."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Ön nem jogosult törölni ezt a címjegyzéket."
+
+#: lib/api.php:194
+msgid "You are not allowed to remove user data."
+msgstr "Ön nem jogosult felhasználóai adatokat törölni."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Virtuális címjegyzékhez nem lehet adatokat hozzátenni."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Virtuális címjegyzékhez nem lehet új adatokat hozzátenni."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Virtuális címjegyzékbõl nem lehet adatokat törölni."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Ennek a személynek az adtait nem jogosult megtekinteni."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Ezt az objektumot nem jogosult megtekinteni."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Önnek nincs jogosultsága törölni ezt a címjegyzéket."
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"A schema ellenõrzési funkció használatához telepíteni kell a Net_LDAP PEAR "
+"libraryt."
+
+#: search.php:109
+msgid "You must provide a name for virtual address books."
+msgstr "A virtuális címjegyzéket el kell neveznie."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Elõször célként ki kell választania egy címjegyzéket."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Elõször célként ki kell választania egy listát."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Elõbb ki kell választania legalább egy adatot."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "E személy adatait csak megtekinteni van jogosultsága."
+
+#: lib/Views/Browse.php:357
+msgid "Your default address book is not browseable."
+msgstr "Az alapértelmezett címjegyzék nem böngészhetõ."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[nincs adat]"
+
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "_Böngészés"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "Partnerek"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Törlés"
+
+#: contact.php:82
+msgid "_Edit"
+msgstr "Módosítás"
+
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "Import/_Export"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "Listák"
+
+#: lib/Turba.php:582
+msgid "_My Address Books"
+msgstr "Címjegyzékeim"
+
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "Új levelezõpartner"
+
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "_Nyomtatás"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Töröljük a listáról"
+
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "Kere_sés"
+
+#: contact.php:79
+msgid "_View"
+msgstr "Megtekintés"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "növekvõ"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "partner"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "partnerek.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "partnerek.ldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "partnerek.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "partnerek.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "csökkenõ"
+
+#: config/attributes.php.dist:386
+msgid "female"
+msgstr "nõ"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "%s jegyzettömbben"
+
+#: config/attributes.php.dist:386
+msgid "male"
+msgstr "férfi"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "formattálás nélkül"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "egy sem"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "egy partnerlistához"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "egy másik címjegyzékbe"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/is_IS.po b/turba/po/is_IS.po
new file mode 100644 (file)
index 0000000..fcb95f5
--- /dev/null
@@ -0,0 +1,1120 @@
+# Icelandic translations for disk package.
+# Copyright 2005-2009 The Horde Project
+# This file is distributed under the same license as the disk package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: disk 1\n"
+"Report-Msgid-Bugs-To: bjossi@snerpa.is\n"
+"POT-Creation-Date: 2005-11-19 20:33+0000\n"
+"PO-Revision-Date: 2005-11-19 20:33+0000\n"
+"Last-Translator: Bjorn Davidsson <bjossi@snerpa.is>\n"
+"Language-Team: support@snerpa.is\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: browse.php:120
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr ""
+
+#: browse.php:118
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr ""
+
+#: config/prefs.php.dist:111
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr ""
+
+#: config/prefs.php.dist:110
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr ""
+
+#: add.php:87
+#, php-format
+msgid "%s added."
+msgstr ""
+
+#: data.php:256
+#, fuzzy, php-format
+msgid "%s file successfully imported"
+msgstr "Mappan \"%s\" var búin til."
+
+#: templates/browse/footer.inc:5
+#, fuzzy, php-format
+msgid "%s to %s of %s"
+msgstr "%d til %d af %d skeytum"
+
+#: lib/Block/minisearch.php:45
+msgid "A browser that supports iFrames is required"
+msgstr ""
+
+#: config/prefs.php.dist:132
+msgid "Above search form"
+msgstr ""
+
+#: templates/browse/search.inc:65
+msgid "Ad_vanced Search"
+msgstr "Ítarleg leit"
+
+#: add.php:52
+msgid "Add"
+msgstr "Bæta við"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr ""
+
+#: templates/browse/actions.inc:22
+msgid "Add to"
+msgstr "Bæta við"
+
+#: browse.php:30 config/prefs.php.dist:99
+#, fuzzy
+msgid "Address Book Listing"
+msgstr "Netfangabók"
+
+#: add.php:86
+#, fuzzy
+msgid "Address book entry"
+msgstr "Netfangabækur"
+
+#: lib/Driver.php:478
+#, fuzzy
+msgid "Address book is read-only."
+msgstr "Netfangabækur"
+
+#: data.php:236
+msgid "Address book successfully purged."
+msgstr ""
+
+#: search.php:97 templates/browse/search.inc:65
+#: templates/browse/search.inc:113
+msgid "Advanced Search"
+msgstr "Ítarleg leit"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "Stuttnefni"
+
+#: templates/browse/footerAlpha.inc:6 templates/browse/footerAlpha.inc:9
+msgid "All"
+msgstr "Allar skráningar"
+
+#: lib/api.php:395
+msgid "Already Exists"
+msgstr ""
+
+#: templates/browse/javascript.inc:89
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Ert þú viss um að þú viljir eyða %s?"
+
+#: templates/browse/javascript.inc:63
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "Ert þú viss um að þú viljir eyða völdum línum?"
+
+#: config/prefs.php.dist:70
+msgid "Ascending"
+msgstr "Hækkandi"
+
+#: templates/prefs/columnselect.inc:233
+#, fuzzy
+msgid "Available Columns:"
+msgstr "Tiltækar netfangabækur:"
+
+#: templates/browse/actions.inc:44
+#, php-format
+msgid "Ba_ck to %s"
+msgstr "Til baka í %s"
+
+#: templates/browse/actions.inc:44
+msgid "Back to %s"
+msgstr "Til baka í %s"
+
+#: templates/browse/search.inc:116
+msgid "Basi_c Search"
+msgstr "Einföld leit"
+
+#: search.php:94 templates/browse/search.inc:62
+#: templates/browse/search.inc:116
+msgid "Basic Search"
+msgstr "Einföld leit"
+
+#: config/prefs.php.dist:131
+msgid "Below search form"
+msgstr ""
+
+#: lib/Driver/ldap.php:85 lib/Driver/ldap.php:88
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr ""
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr ""
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr ""
+
+#: data.php:28
+msgid "CSV"
+msgstr ""
+
+#: templates/browse/actions.inc:48
+#, fuzzy
+msgid "C_lear Search"
+msgstr "Leita í skeytum"
+
+#: templates/browse/column_headers.inc:5
+msgid "Check _All/None"
+msgstr "Velja alla/engan"
+
+#: config/prefs.php.dist:29
+msgid ""
+"Choose a default directory for your personal addressbook, contact lists, and "
+"searches."
+msgstr ""
+
+#: add.php:44
+msgid "Choose an address book"
+msgstr "Veldu netfangabók"
+
+#: templates/prefs/columnselect.inc:228
+#, fuzzy
+msgid "Choose the order of the columns to display in the address list."
+msgstr ""
+"Veldu uppröðun netfangabóka sem á að leita í, þegar leitað er að netföngum."
+
+#: templates/browse/actions.inc:48
+#, fuzzy
+msgid "Clear Search"
+msgstr "Leita í skeytum"
+
+#: config/prefs.php.dist:10
+#, fuzzy
+msgid "Column Options"
+msgstr "Valstillingar"
+
+#: templates/data/export.inc:16 templates/data/import.inc:18
+msgid "Comma separated values"
+msgstr ""
+
+#: templates/data/export.inc:17
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr ""
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "Fyrirtæki"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr ""
+
+#: lib/api.php:247 lib/api.php:268 lib/api.php:384 lib/api.php:454
+#: lib/api.php:544 lib/api.php:590 lib/api.php:638 lib/api.php:825
+#: lib/api.php:918
+#, fuzzy, php-format
+msgid "Connection failed: %s"
+msgstr "Endurvísun misheppaðist."
+
+#: lib/Driver/ldap.php:66
+msgid "Connection failure"
+msgstr ""
+
+#: browse.php:60
+msgid "Contact removed from list."
+msgstr ""
+
+#: browse.php:257
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Tengiliðir í lista: %s"
+
+#: browse.php:281
+#, php-format
+msgid "Contents of %s"
+msgstr "Innihald í %s"
+
+#: templates/browse/actions.inc:12
+msgid "Copy"
+msgstr "Afrit"
+
+#: lib/ObjectView.php:134
+#, fuzzy
+msgid "Created"
+msgstr "Búa til"
+
+#: config/prefs.php.dist:16
+#, fuzzy
+msgid "Default Display"
+msgstr "Sjálfgefið kennimark"
+
+#: config/prefs.php.dist:121
+msgid ""
+"Default directory for your personal addressbook, contact lists, and searches."
+msgstr ""
+
+#: config/prefs.php.dist:72
+msgid "Default sorting direction:"
+msgstr "Sjálfgefin uppröðun:"
+
+#: templates/browse/actions.inc:3 lib/Renderer.php:48
+msgid "Delete"
+msgstr "Eyða"
+
+#: config/prefs.php.dist:35
+#, fuzzy
+msgid "Delete Confirmation"
+msgstr "Upplýsingar netþjóns"
+
+#: config/prefs.php.dist:36
+msgid "Delete button behaviour"
+msgstr ""
+
+#: lib/Driver/ldap.php:283
+#, fuzzy, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Eyða möppu(m)"
+
+#: delete.php:32
+#, fuzzy
+msgid "Deletion failed"
+msgstr "Endurvísun misheppaðist."
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr ""
+
+#: config/prefs.php.dist:71
+msgid "Descending"
+msgstr "Lækkandi"
+
+#: templates/browse/search.inc:132
+msgid "Directory"
+msgstr "Netfangabók"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:15 config/prefs.php.dist:21
+#: config/prefs.php.dist:27
+msgid "Display Options"
+msgstr "Útlitsstillingar"
+
+#: config/prefs.php.dist:149
+#, fuzzy
+msgid "Do you want to confirm deleting entries?"
+msgstr "Viltu opna þessa möppu?"
+
+#: templates/browse/contactrow.inc:25
+#, fuzzy
+msgid "Download vCard"
+msgstr "Sækja yfir á vinnustöð"
+
+#: templates/browse/column_headers.inc:6 templates/browse/contactrow.inc:33
+#: lib/Renderer.php:46
+msgid "Edit"
+msgstr "Breyta"
+
+#: templates/browse/contactrow.inc:33
+#, fuzzy, php-format
+msgid "Edit \"%s\""
+msgstr "Breyta"
+
+#: edit.php:53 edit.php:80
+#, php-format
+msgid "Edit entry for %s"
+msgstr ""
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "Netfang"
+
+#: edit.php:79
+#, php-format
+msgid "Entry for %s updated."
+msgstr ""
+
+#: templates/browse/actions.inc:6 templates/data/export.inc:46
+msgid "Export"
+msgstr "Flytja út"
+
+#: templates/data/export.inc:7
+msgid "Export Address Book"
+msgstr "Flytja út netfangabók"
+
+#: templates/data/export.inc:26
+msgid "Export only the selected contacts."
+msgstr ""
+
+#: templates/data/export.inc:32
+msgid "Export the following address book completely."
+msgstr ""
+
+#: search.php:52 data.php:110 data.php:228 add.php:63 browse.php:37
+#: browse.php:94 browse.php:109
+#, fuzzy, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Bæta í netfangabók (%s)"
+
+#: browse.php:128
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr ""
+
+#: browse.php:263
+msgid "Failed to browse list"
+msgstr ""
+
+#: browse.php:297
+msgid "Failed to browse the directory"
+msgstr ""
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+
+#: browse.php:114
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr ""
+
+#: search.php:88 data.php:124
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr ""
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr ""
+
+#: templates/browse/search.inc:72
+msgid "Find"
+msgstr "Finna"
+
+#: config/attributes.php.dist:48
+#, fuzzy
+msgid "First Name"
+msgstr "Fyrsta síða"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr ""
+
+#: templates/browse/search.inc:85
+msgid "From"
+msgstr "í"
+
+#: config/sources.php.dist:562
+#, fuzzy
+msgid "Global Address Book"
+msgstr "Netfangabók"
+
+#: templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr ""
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "Heimilisfang"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr ""
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr ""
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "Heimasími"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr ""
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr ""
+
+#: config/attributes.php.dist:88
+#, fuzzy
+msgid "Home Street Address"
+msgstr "Sendandanetfang"
+
+#: config/sources.php.dist:487
+msgid "IMSP"
+msgstr ""
+
+#: templates/data/import.inc:9
+#, fuzzy, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Netfangabók"
+
+#: data.php:274
+#, fuzzy
+msgid "Import/Export Address Books"
+msgstr "Netfangabók"
+
+#: lib/api.php:378 lib/api.php:604
+msgid "Invalid Content-Type"
+msgstr ""
+
+#: lib/api.php:441 lib/api.php:531
+msgid "Invalid ID"
+msgstr ""
+
+#: lib/api.php:191 lib/api.php:334 lib/api.php:437 lib/api.php:527
+#: lib/api.php:580 lib/api.php:895
+#, fuzzy
+msgid "Invalid address book"
+msgstr "Tiltækar netfangabækur:"
+
+#: lib/api.php:899 lib/api.php:973 lib/api.php:1026
+msgid "Invalid email"
+msgstr ""
+
+#: lib/api.php:907
+msgid "Invalid entry"
+msgstr ""
+
+#: lib/Driver/ldap.php:279
+#, fuzzy
+msgid "Invalid key specified."
+msgstr "enginn texti tilgreindur"
+
+#: lib/api.php:903
+msgid "Invalid name"
+msgstr ""
+
+#: lib/api.php:584
+msgid "Invalid objectId"
+msgstr ""
+
+#: lib/Driver/ldap.php:38
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+
+#: lib/ObjectView.php:139
+msgid "Last Modified"
+msgstr ""
+
+#: config/attributes.php.dist:53
+#, fuzzy
+msgid "Last Name"
+msgstr "síðasta bls."
+
+#: templates/browse/column_headers.inc:8
+msgid "List"
+msgstr ""
+
+#: templates/browse/search.inc:79
+msgid "Matching"
+msgstr "sem passar við"
+
+#: config/prefs.php.dist:81
+msgid "Maximum number of pages"
+msgstr ""
+
+#: lib/Block/minisearch.php:3
+#, fuzzy
+msgid "Mini Search"
+msgstr "Leita"
+
+#: lib/Driver/ldap.php:315
+msgid "Missing DN in LDAP source configuration."
+msgstr ""
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "Farsími"
+
+#: lib/Driver/ldap.php:344 lib/Driver/ldap.php:361
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr ""
+
+#: lib/api.php:1012
+msgid "More than 1 entry found"
+msgstr ""
+
+#: templates/browse/actions.inc:11
+msgid "Move"
+msgstr "Flytja"
+
+#: templates/prefs/columnselect.inc:247
+#, fuzzy
+msgid "Move left"
+msgstr "Flytja upp"
+
+#: templates/prefs/columnselect.inc:249
+msgid "Move right"
+msgstr ""
+
+#: data.php:31 templates/data/import.inc:21
+#, fuzzy
+msgid "Mulberry Address Book"
+msgstr "Netfangabók"
+
+#: lib/api.php:932
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+
+#: config/sources.php.dist:87 config/sources.php.dist:221
+#, fuzzy
+msgid "My Address Book"
+msgstr "Netfangabók"
+
+#: config/attributes.php.dist:42
+msgid "Name"
+msgstr "Nafn"
+
+#: config/prefs.php.dist:22
+msgid "Name Format"
+msgstr ""
+
+#: config/sources.php.dist:295
+msgid "Netcenter Member Directory"
+msgstr ""
+
+#: add.php:36 add.php:102 lib/Block/minisearch.php:27
+msgid "New Contact"
+msgstr "Nýr tengiliður"
+
+#: templates/browse/actions.inc:26
+#, fuzzy
+msgid "New List"
+msgstr "Nýr póstur"
+
+#: templates/data/import.inc:42
+msgid "Next"
+msgstr "Næsta"
+
+#: config/attributes.php.dist:218
+#, fuzzy
+msgid "Nickname"
+msgstr "Nafn"
+
+#: lib/api.php:1014 lib/api.php:1063
+#, php-format
+msgid "No %s entry found for %s"
+msgstr ""
+
+#: lib/api.php:982
+#, fuzzy
+msgid "No address books found."
+msgstr "Netfangabækur"
+
+#: minisearch.php:87
+msgid "No contacts found"
+msgstr ""
+
+#: lib/api.php:356
+msgid "No vCard data was found."
+msgstr ""
+
+#: templates/browse/footer.inc:7
+msgid "None"
+msgstr "Engin"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "Glósur"
+
+#: config/prefs.php.dist:89
+msgid "Number of items per page"
+msgstr ""
+
+#: lib/api.php:460
+msgid "Object not found"
+msgstr ""
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr ""
+
+#: config/prefs.php.dist:34
+msgid "Other Options"
+msgstr "Aðrar stillingar"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr ""
+
+#: lib/api.php:340 lib/api.php:447 lib/api.php:537 lib/api.php:596
+#: lib/api.php:753 lib/api.php:913
+msgid "Permission Denied"
+msgstr ""
+
+#: lib/Driver.php:436
+msgid "Permission denied"
+msgstr ""
+
+#: data.php:32 templates/data/import.inc:22
+#, fuzzy
+msgid "Pine Address Book"
+msgstr "Netfangabók"
+
+#: templates/browse/javascript.inc:30
+#, fuzzy
+msgid "Please enter the name of the new list:"
+msgstr "Sláðu inn nýtt möppunafn:"
+
+#: templates/prefs/columnselect.inc:221
+#, fuzzy
+msgid "Please select a directory:"
+msgstr "Veldu eða breyttu til hægri, næst:"
+
+#: config/sources.php.dist:399
+#, fuzzy
+msgid "Private Address Book"
+msgstr "Netfangabók"
+
+#: lib/Driver/ldap.php:155
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr ""
+
+#: templates/block/minisearch.inc:18
+#, fuzzy
+msgid "Quick Search"
+msgstr "Leita"
+
+#: lib/Driver/ldap.php:199 lib/Driver/ldap.php:207 lib/Driver/ldap.php:442
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr ""
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr ""
+
+#: templates/prefs/columnselect.inc:239
+#, fuzzy
+msgid "Remove column"
+msgstr "færa niður"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Fjarlægja úr listanum"
+
+#: templates/data/import.inc:26
+msgid ""
+"Replace existing address book with the imported one? <b>Warning: This "
+"deletes all entries in your current address book.</b>"
+msgstr ""
+
+#: lib/Driver.php:330
+msgid "Requested object not found."
+msgstr ""
+
+#: add.php:37 templates/browse/search.inc:126
+msgid "Reset to Defaults"
+msgstr "Endursetja leitarreiti"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr ""
+
+#: lib/Driver/ldap.php:77
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr ""
+
+#: edit.php:57 add.php:37
+msgid "Save"
+msgstr "Vista"
+
+#: templates/browse/search.inc:98 templates/browse/search.inc:125
+#: templates/block/minisearch.inc:23 config/prefs.php.dist:100
+msgid "Search"
+msgstr "Leita"
+
+#: minisearch.php:66 browse.php:241
+msgid "Search Results"
+msgstr "Niðurstaða leitar"
+
+#: lib/api.php:829
+#, fuzzy
+msgid "Search failed"
+msgstr "Leita"
+
+#: lib/api.php:922 lib/api.php:928 lib/api.php:937 lib/api.php:950
+#, php-format
+msgid "Search failed: %s"
+msgstr ""
+
+#: config/prefs.php.dist:28
+msgid "Searching Options"
+msgstr "Leitarvalkostir"
+
+#: templates/block/minisearch.inc:24
+msgid "Searching..."
+msgstr "Leita..."
+
+#: templates/browse/select.inc:9
+msgid "Select Address Book"
+msgstr "Veljið netfangabók:"
+
+#: templates/browse/actions.inc:24
+msgid "Select List"
+msgstr "Valinn lista"
+
+#: templates/data/export.inc:37
+#, fuzzy
+msgid "Select the address book to export from:"
+msgstr "Valdar netfangabækur:"
+
+#: templates/data/import.inc:31
+#, fuzzy
+msgid "Select the address book to import to:"
+msgstr "Valdar netfangabækur:"
+
+#: templates/data/export.inc:14
+msgid "Select the export format:"
+msgstr ""
+
+#: templates/data/import.inc:40
+msgid "Select the file to import:"
+msgstr ""
+
+#: templates/data/import.inc:16
+msgid "Select the format of the source file:"
+msgstr ""
+
+#: config/prefs.php.dist:109
+msgid "Select the format used to display names:"
+msgstr ""
+
+#: config/prefs.php.dist:17
+msgid "Select view to display by default."
+msgstr ""
+
+#: config/prefs.php.dist:11
+msgid "Select which fields to display in the address lists."
+msgstr ""
+
+#: config/prefs.php.dist:23
+msgid "Select which format to display names."
+msgstr ""
+
+#: templates/prefs/columnselect.inc:243
+#, fuzzy
+msgid "Selected Columns:"
+msgstr "Velja ekkert"
+
+#: add.php:50
+#, fuzzy, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Valdar netfangabækur:"
+
+#: config/sources.php.dist:154
+#, fuzzy
+msgid "Shared Directory"
+msgstr "Röðunarátt"
+
+#: templates/browse/actions.inc:42
+msgid "Sho_w All"
+msgstr "Sýna allt"
+
+#: templates/browse/select.inc:11
+msgid "Show"
+msgstr "Sýna"
+
+#: templates/browse/actions.inc:42
+msgid "Show All"
+msgstr "Sýna allt"
+
+#: templates/browse/actions.inc:41
+msgid "Show Contacts"
+msgstr "Sýna tengiliði"
+
+#: templates/browse/actions.inc:40
+msgid "Show Lists"
+msgstr "Sýna lista"
+
+#: templates/browse/actions.inc:41
+msgid "Show _Contacts"
+msgstr "Sýna tengiliði"
+
+#: templates/browse/actions.inc:40
+msgid "Show _Lists"
+msgstr "Sýna lista"
+
+#: templates/browse/column_headers.inc:10
+#: templates/browse/column_headers.inc:15
+msgid "Sort Direction"
+msgstr "Röðunarátt"
+
+#: lib/api.php:154
+#, fuzzy
+msgid "Sources"
+msgstr "Framkvæmt"
+
+#: config/prefs.php.dist:130
+msgid "Specify where you want advanced search results to appear."
+msgstr ""
+
+#: browse.php:130
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr ""
+
+#: data.php:29
+msgid "TSV"
+msgstr ""
+
+#: templates/data/export.inc:18 templates/data/import.inc:19
+msgid "Tab separated values"
+msgstr ""
+
+#: data.php:234
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr ""
+
+#: edit.php:24 vcard.php:22 display.php:23
+msgid "The contact you requested does not exist."
+msgstr ""
+
+#: browse.php:33
+msgid "There are no browseable address books."
+msgstr ""
+
+#: add.php:29
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+
+#: add.php:99
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+
+#: browse.php:185
+#, fuzzy
+msgid "There was an error creating a new list."
+msgstr "Villa kom upp þegar átti að vista uppkastið."
+
+#: browse.php:136
+#, fuzzy, php-format
+msgid "There was an error deleting %s from the source address book."
+msgstr ""
+"Villa kom upp þegar átti að eyða skeytum. Villutilkynning netþjónsins fylgir "
+"hér á eftir"
+
+#: delete.php:31
+#, fuzzy, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Villa kom upp við birtingu þessa hluta skeytisins"
+
+#: browse.php:68
+#, fuzzy
+msgid "There was an error deleting this object."
+msgstr "Villa kom upp við birtingu þessa hluta skeytisins"
+
+#: browse.php:273
+#, fuzzy
+msgid "There was an error displaying the select List"
+msgstr "Villa kom upp við birtingu þessa hluta skeytisins"
+
+#: data.php:249
+#, fuzzy, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Villa kom upp þegar átti að vista uppkastið."
+
+#: lib/api.php:352
+#, fuzzy
+msgid "There was an error importing the iCalendar data."
+msgstr "Villa kom upp þegar átti að vista uppkastið."
+
+#: browse.php:58
+#, fuzzy
+msgid "There was an error removing this object."
+msgstr "Villa kom upp þegar átti að vista uppkastið."
+
+#: edit.php:84
+#, fuzzy, php-format
+msgid "There was an error updating this entry: %s"
+msgstr "Villa kom upp við birtingu þessa hluta skeytisins"
+
+#: data.php:151
+#, fuzzy
+msgid "There were no addresses to export."
+msgstr "Það eru engin skeyti í þessu pósthólfi."
+
+#: lib/Driver.php:390 lib/Driver.php:427
+msgid "This address book is read-only"
+msgstr ""
+
+#: data.php:211
+msgid "This file format is not supported."
+msgstr ""
+
+#: lib/api.php:941 lib/api.php:954
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr ""
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "Titill"
+
+#: lib/Driver.php:835
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr ""
+
+#: edit.php:57
+msgid "Undo Changes"
+msgstr "Fjarlægja breytingar"
+
+#: lib/api.php:489
+msgid "Unsupported Content-Type."
+msgstr ""
+
+#: config/sources.php.dist:358
+msgid "Verisign Directory"
+msgstr ""
+
+#: templates/browse/contactrow.inc:27
+#, fuzzy, php-format
+msgid "View \"%s\""
+msgstr "Sýna %s"
+
+#: minisearch.php:82
+msgid "View Contact"
+msgstr ""
+
+#: config/prefs.php.dist:98
+msgid "View to display by default:"
+msgstr ""
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr ""
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "Heimilisf. vinnu"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr ""
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr ""
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "Vinnusími"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr ""
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr ""
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr ""
+
+#: templates/browse/javascript.inc:30
+#, fuzzy
+msgid "You are creating a distribution list."
+msgstr "Þú ert um það bil að búa til undirmöppu í "
+
+#: edit.php:44 display.php:59
+msgid "You do not have permission to view this contact."
+msgstr ""
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr ""
+
+#: templates/browse/javascript.inc:51
+#, fuzzy
+msgid "You must select a target address book."
+msgstr "Þú þarft að velja netfang fyrst."
+
+#: templates/browse/javascript.inc:23
+#, fuzzy
+msgid "You must select a target list."
+msgstr "Þú þarft að velja í hvaða möppu pósturinn á að fara fyrst."
+
+#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:45
+#: templates/browse/javascript.inc:68
+#, fuzzy
+msgid "You must select at least one entry first."
+msgstr "Veldu a.m.k. eitt skeyti fyrst."
+
+#: edit.php:48
+msgid "You only have permission to view this contact."
+msgstr ""
+
+#: browse.php:284
+msgid "Your default addressbook is not browseable."
+msgstr ""
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr ""
+
+#: lib/Turba.php:286
+msgid "_Add"
+msgstr "Bæta við"
+
+#: lib/Turba.php:283
+msgid "_Browse"
+msgstr "Skoða"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Eyða"
+
+#: lib/Turba.php:292
+msgid "_Import/Export"
+msgstr "Flytja inn/út"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Fjarlægja úr listanum"
+
+#: lib/Turba.php:288
+msgid "_Search"
+msgstr "Leita"
+
+#: vcard.php:46
+msgid "contact.vcf"
+msgstr ""
+
+#: data.php:172 data.php:177 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr ""
+
+#: data.php:182
+#, fuzzy
+msgid "contacts.tsv"
+msgstr "Tengiliðalisti"
+
+#: templates/browse/actions.inc:14
+msgid "to Selected Address Book"
+msgstr "í valinni netfangabók"
+
+#: data.php:30 templates/browse/column_headers.inc:7
+#: templates/data/export.inc:20 templates/data/import.inc:20
+msgid "vCard"
+msgstr ""
diff --git a/turba/po/it_IT.po b/turba/po/it_IT.po
new file mode 100644 (file)
index 0000000..3576bc1
--- /dev/null
@@ -0,0 +1,1762 @@
+# Turba 0.0.3 Italian translation.
+# Copyright 2001 Paola Carpenter.
+# Paola Carpenter <pcarpenter@infvic.it>; Giovanni Meneghetti <gmeneghetti@infvic.it>, 2001.
+# Copyright 2003 Sergio G. Caredda.
+# Sergio G. Caredda <scaredda@tiscali.it>, 2003.
+# Copyright 2007 nethesis srl.
+# Cristian Manoni, Alessio Fattorini, Davide marini 2007
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 0.0.3\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-05-17 11:04+0200\n"
+"PO-Revision-Date: 2005-02-23 17:40+0100\n"
+"Last-Translator: Nethesis srl <info@nethesis.it>\n"
+"Language-Team: Italian <dev@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Aggiungi una Rubrica IMSP"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Elimina la rubrica IMSP"
+
+#: data.php:350
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" esistente, non è stato importato."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" aggiornato, ma il salvataggio del file uplodato è fallito: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" aggiornato."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" non è stato copiato, già in lista."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" non è stato spostato, già in lista."
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Nome Cognome\" (es. Mario Rossi)"
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Cognome, Nome\" (es. Rossi, Mario)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s aggiunto."
+
+#: data.php:369
+#, php-format
+msgid "%s file successfully imported."
+msgstr "File %s importato con successo"
+
+#: lib/Driver.php:555
+#, php-format
+msgid "%s of %s"
+msgstr "%s di %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s a %s di %s"
+
+#: lib/Turba.php:560
+#, php-format
+msgid "%s's Address Book"
+msgstr "Rubrica di %s"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "E' necessario un browser che supporti iFrames"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Accesso negato a %s"
+
+#: lib/Forms/AddContact.php:25 templates/browse/actions.inc:30
+msgid "Add"
+msgstr "Aggiungi"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Nuovo Contatto"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Nuova Rubrica"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Aggiugi File"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Aggiungi a"
+
+#: lib/Driver.php:1876 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Impossibile aggiungere contatti."
+
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr "Rubrica"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Elenco Rubrica."
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Elenco Rubrica."
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Rubriche"
+
+#: data.php:330
+msgid "Address book successfully purged."
+msgstr "Rubrica svuotata con successo."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Rubriche non visualizzate:"
+
+#: search.php:199 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Ricerca Avanzata"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Tutti"
+
+#: lib/api.php:810
+msgid "Already Exists"
+msgstr "Già esistente"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Anniversari"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Anniversario"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Sei sicuro di voler cancellare %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Sei sicuro di voler eliminare il contatto selezionato?"
+
+#: config/attributes.php.dist:378
+msgid "Assistant"
+msgstr "Assistente"
+
+#: search.php:196 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Ricerca Semplice"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Collegamento fallito. (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Compleanno"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Compleanni"
+
+#: contact.php:106 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Nome vuoto"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Entrambi"
+
+#: templates/menu.inc:8 templates/addressbook_list.php:29
+#: addressbooks/index.php:39
+msgid "Browse"
+msgstr "Sfoglia"
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr "Categoria Affari"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Impossibile inserire un gruppo dentro se stesso."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Annulla"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Impossibile eliminare tutti i contatti di %s"
+
+#: config/attributes.php.dist:350
+msgid "Category"
+msgstr "Categoria"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Cambia ordinamento %s in %s"
+
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
+msgid "Change Permissions"
+msgstr "Cambia Permessi"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Seleziona Tutti/Nessuno"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Seleziona Tutti/Nessuno"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Figlio"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Scegli una rubrica"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Scegli quali rubriche visualizzare, e in che ordine:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Scegli quali rubriche usare."
+
+#: templates/prefs/columnselect.inc:43
+msgid "Click an address book to sort its columns:"
+msgstr "Cliccare su una rubrica per ordinare le sue colonne:"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Chiudi"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Chiudi Ricerca"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Opzioni Colonne"
+
+#: templates/data/export.inc:12 templates/data/import.inc:13
+msgid "Comma separated values"
+msgstr "Valori separati da virgole"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Valori separati da virgole (Microsoft Outlook)"
+
+#: config/attributes.php.dist:476
+msgid "Common Address Extended"
+msgstr "Indirizzo Comune Esteso"
+
+#: config/attributes.php.dist:494
+msgid "Common City"
+msgstr "Città Comune"
+
+#: config/attributes.php.dist:512
+msgid "Common Country"
+msgstr "Paese Comune"
+
+#: config/attributes.php.dist:420
+msgid "Common Phone"
+msgstr "Telefono Comune"
+
+#: config/attributes.php.dist:488
+msgid "Common Post Office Box"
+msgstr "Casella Postale Comune"
+
+#: config/attributes.php.dist:506
+msgid "Common Postal Code"
+msgstr "CAP Comune"
+
+#: config/attributes.php.dist:500
+msgid "Common State/Province"
+msgstr "Provincia o Stato Comune"
+
+#: config/attributes.php.dist:482
+msgid "Common Street"
+msgstr "Strada Comune"
+
+#: config/attributes.php.dist:445
+msgid "Common Video Call"
+msgstr "Video Chiamata Comune"
+
+#: config/sources.php.dist:243 config/sources.php.dist:922
+msgid "Communications"
+msgstr "Comunicazioni"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "Azienda"
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr "Indirizzo Lavoro"
+
+#: lib/api.php:433 lib/api.php:478 lib/api.php:529 lib/api.php:572
+#: lib/api.php:627 lib/api.php:686 lib/api.php:736 lib/api.php:872
+#: lib/api.php:964 lib/api.php:1030 lib/api.php:1136 lib/api.php:1369
+#: lib/api.php:1446 lib/api.php:1595 scripts/import_squirrelmail_abook.php:112
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Connessione fallita: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Connessione fallita"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Ricerca Contatti"
+
+#: config/sources.php.dist:851
+msgid "Contacts"
+msgstr "Contatti"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Contatti visualizzati:"
+
+#: lib/Views/Browse.php:339
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Contatti nella lista: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Copia"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Crea"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Crea Rubrica"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Crea una nuuova Rubrica"
+
+#: lib/ListView.php:447
+msgid "Create a new Contact List in:"
+msgstr "Crea una nuova Lista Contatti in:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "Creato"
+
+#: contact.php:89
+msgid "De_lete"
+msgstr "Cance_lla"
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Views/DeleteContact.php:58
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: addressbooks/index.php:42
+msgid "Delete"
+msgstr "Cancella"
+
+#: lib/Forms/DeleteAddressBook.php:40 lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Cancella %s"
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Eliminazione fallita: (%s) %s"
+
+#: lib/Driver.php:1884 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Eliminazione dei contatti non possibile."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Eliminazione Fallita"
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr "Dipartimento"
+
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr "descrizione"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Cartella"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Visualizza"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Opzioni di Visualizzazione"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Scarica"
+
+#: templates/browse/contactrow.inc:25 templates/browse/row.inc:15
+#: templates/browse/row.inc:16
+msgid "Download vCard"
+msgstr "Scarica vCard"
+
+#: templates/prefs/columnselect.inc:52
+msgid "Drag columns to re-arrange them. Check a column to enable it."
+msgstr ""
+"Trascina le colonne per sistemarle. Selezionare la colonna per abilitarla."
+
+#: templates/addressbook_list.php:31 templates/browse/contactrow.inc:33
+#: templates/browse/actions.inc:6 templates/browse/column_headers.inc:10
+#: templates/browse/row.inc:28 templates/browse/row.inc:29
+#: addressbooks/index.php:40
+msgid "Edit"
+msgstr "Modifica"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Modifica '%s'"
+
+#: lib/Forms/EditAddressBook.php:40 lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Modifica '%s'"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "Email"
+
+#: config/attributes.php.dist:243
+msgid "Emails"
+msgstr "Email"
+
+#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Errore nell'inserimento di %d cotatti nella lista."
+
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Errore nell'inserimento di %d cotatti su %d nella lista."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Errore nella cancellazione di %d contatti."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Errore nella cancellazione di %d contatti su %d."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Errore nella cancellazione di %d cotatti dalla lista."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Errore nella cancellazione di %d cotatti su %d dalla lista."
+
+#: lib/api.php:578
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Errore nella ricerca nella rubrica: %s"
+
+#: templates/data/export.inc:42 templates/browse/actions.inc:10
+msgid "Export"
+msgstr "Esporta"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Esporta Rubrica"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Esporta solo i contatti selezionati"
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Esporta la seguente rubrica completamente."
+
+#: add.php:42 data.php:142 data.php:241 data.php:319 search.php:121
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Impossibile accedere alla rubrica indicata: %s"
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Aggiungimento del %s a %s falita: %s"
+
+#: lib/Views/Browse.php:345
+msgid "Failed to browse list"
+msgstr "Impossibile esaminare la lista"
+
+#: lib/Views/Browse.php:376
+msgid "Failed to browse the directory"
+msgstr "Impossibile passare in rassegna la directory"
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Modifica fallita del nome: (%s) %s; vecchio DN = %s, Nuovo DN = %s, Root %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Ricerca di oggetti da aggiungere falita: %s"
+
+#: search.php:190
+msgid "Failed to search the address book"
+msgstr "Ricerca nella rubrica fallita"
+
+#: data.php:157
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Ricerca nella directory falita: %s"
+
+#: config/sources.php.dist:550
+msgid "Favourite Recipients"
+msgstr "Cartelle Preferite"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "File"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Trova"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+msgid "Finish"
+msgstr "Fine"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "Nome"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "URL libero/occupato"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Da"
+
+#: config/attributes.php.dist:384
+msgid "Gender"
+msgstr "Sesso"
+
+#: config/sources.php.dist:776
+msgid "Global Address Book"
+msgstr "Rubrica globale"
+
+#: templates/browse/contactrow.inc:44 templates/browse/row.inc:49
+msgid "Group"
+msgstr "Gruppo"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Indirizzo Abitazione"
+
+#: config/attributes.php.dist:546
+msgid "Home Address Extended"
+msgstr "Indirizzo Abitazione"
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr "Città Abitazione"
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr "Paese Abitazione"
+
+#: config/attributes.php.dist:414
+msgid "Home Email"
+msgstr "Email Personale"
+
+#: config/attributes.php.dist:430
+msgid "Home Fax"
+msgstr "Fax Abitazione"
+
+#: config/attributes.php.dist:552
+msgid "Home Latitude"
+msgstr "Latitudine Abitazione"
+
+#: config/attributes.php.dist:557
+msgid "Home Longitude"
+msgstr "Longitudine Abitazione"
+
+#: config/attributes.php.dist:440
+msgid "Home Mobile Phone"
+msgstr "Cellulare Personale"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Telefono Abitazione"
+
+#: config/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr "Casella Postale Abitazione"
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "CAP Abitazione"
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "Provincia o Stato Abitazione"
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "Indirizzo Abitazione"
+
+#: config/attributes.php.dist:455
+msgid "Home Video Call"
+msgstr "Video Chiamata Abitazione"
+
+#: config/attributes.php.dist:540
+msgid "Home Website URL"
+msgstr "Sito web personale"
+
+#: config/sources.php.dist:667
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importazione Rubrica, step %d"
+
+#: data.php:387
+msgid "Import/Export Address Books"
+msgstr "Importa/Esporta Rubriche"
+
+#: config/attributes.php.dist:360
+msgid "Initials"
+msgstr "Iniziali"
+
+#: config/attributes.php.dist:366
+msgid "Instant Messenger"
+msgstr "Messaggistica Istantanea"
+
+#: lib/api.php:867 lib/api.php:959
+msgid "Invalid ID"
+msgstr "ID invalido"
+
+#: lib/api.php:345 lib/api.php:567 lib/api.php:622 lib/api.php:681
+#: lib/api.php:729 lib/api.php:863 lib/api.php:955 lib/api.php:1020
+#: lib/api.php:1578 scripts/import_squirrelmail_abook.php:105
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Rubrica non valida: %s"
+
+#: lib/api.php:1024
+msgid "Invalid contact unique ID"
+msgstr "ID univoco contatto invalido"
+
+#: lib/api.php:1582 lib/api.php:1668 lib/api.php:1729
+msgid "Invalid email"
+msgstr "Indirizzo e-mail non valido."
+
+#: lib/api.php:1590
+msgid "Invalid entry"
+msgstr "Dato non valido."
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr "Chiave invalida specificata."
+
+#: lib/api.php:1586
+msgid "Invalid name"
+msgstr "Nome non valido."
+
+#: config/attributes.php.dist:276
+msgid "Job Title"
+msgstr "Titolo Lavoro"
+
+#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "La chiave per il salvataggio deve essere un UID, non %s"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"Il supporto LDAP è richiesto ma il modulo LDAP non è disponibile o caricato."
+
+#: data.php:65 templates/data/export.inc:16 templates/data/import.inc:18
+msgid "LDIF Address Book"
+msgstr "Rubrica LDIF"
+
+#: config/attributes.php.dist:390
+msgid "Language"
+msgstr "Lingua"
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr "Ultima Modifica"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Cognome"
+
+#: config/attributes.php.dist:396
+msgid "Latitude"
+msgstr "Latitudine"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Lista"
+
+#: config/sources.php.dist:238 config/sources.php.dist:918
+msgid "Location"
+msgstr "Luogo"
+
+#: config/attributes.php.dist:401
+msgid "Longitude"
+msgstr "Longitudine"
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
+msgid "Manage Address Books"
+msgstr "Gestisci Rubriche"
+
+#: config/attributes.php.dist:372
+msgid "Manager"
+msgstr "Manager"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Corrispondente"
+
+#: lib/api.php:306
+msgid "Maximum Number of Contacts"
+msgstr "Numero massimo di Contatti."
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "Numero massimo di pagine"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menu Liste"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Nomi Centrali"
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr "Manca il DN nella configurazione LDAP."
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Cellulare"
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Modifica fallita: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Altre Opzioni..."
+
+#: lib/api.php:1706
+msgid "More than 1 entry found"
+msgstr "Risulta più di un dato."
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Sposta"
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Sposta a sinistra"
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Sposta a destra"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Rubrica Mulberry"
+
+#: lib/api.php:1614
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Diverse persone con indirizzo [%s], ma nessuna con nome [%s] nella rubrica."
+
+#: config/sources.php.dist:162
+msgid "My Address Book"
+msgstr "Rubrica Personale"
+
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "Nome"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Formato Nome"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Prefissi Nome"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Suffissi Nome"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nome:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Nuovo Contatto"
+
+#: lib/Forms/EditContact.php:112 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:174 templates/data/import.inc:46
+msgid "Next"
+msgstr "Successivo"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "nome"
+
+#: lib/api.php:1709 lib/api.php:1769
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Nessun dato %s trovato per %s."
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Nessuna rubrica è al momento disponibile. Impostazione/Esportazione è "
+"disattivato."
+
+#: search.php:107
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Nessuna rubrica è al momento disponibile. La ricerca è disattivata."
+
+#: lib/api.php:561 lib/api.php:616 lib/api.php:676 lib/api.php:858
+#: lib/api.php:950 lib/api.php:1015
+msgid "No address book specified"
+msgstr "Nessuna rubrica specificata."
+
+#: minisearch.php:77
+msgid "No contacts found"
+msgstr "Nessun contatto trovato"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Nessun contatto corrisponde al filtro corrente."
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "Nessun contatto corrispondente"
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr "Non esiste nessun archivio per contatti favoriti."
+
+#: lib/api.php:762 lib/api.php:1060
+msgid "No vCard data was found."
+msgstr "Nessun vCard trovato."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Nessuno"
+
+#: lib/Views/EditContact.php:33 lib/Views/DeleteContact.php:26
+#: lib/Views/Contact.php:49
+msgid "Not Found"
+msgstr "Non Trovato"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Non Trovato"
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "Note"
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "Numero di elementi per pagina"
+
+#: lib/api.php:909 lib/api.php:1085
+msgid "Object not found"
+msgstr "Oggetto non trovato"
+
+#: lib/Driver/kolab.php:1184
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Oggetto con UID %s non esiste!"
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr "Occupazione"
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr "Ufficio"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Una volta confermate queste opzioni, la rubrica verrà eliminata "
+"definitivamente. Se non è questo che si desidera modificare la selezione su "
+"\"Nessuna\""
+
+#: lib/api.php:1068
+msgid "Only one vcard supported."
+msgstr "Solo un vCard è supportato."
+
+#: config/sources.php.dist:245 config/sources.php.dist:924
+msgid "Organization"
+msgstr "Azienda"
+
+#: config/sources.php.dist:246 config/sources.php.dist:926
+msgid "Other"
+msgstr "Altro"
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "Chiave PGP pubblica"
+
+#: config/attributes.php.dist:471
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr "Cercapersone"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Eliminare definitivamente questo contatto?"
+
+#: deletefile.php:36 lib/Driver.php:721 lib/api.php:740 lib/api.php:1599
+#: lib/Driver/sql.php:486
+msgid "Permission denied"
+msgstr "Permesso Negato"
+
+#: config/sources.php.dist:235 config/sources.php.dist:914
+msgid "Personal"
+msgstr "Personale"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Rubrica Pine"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Inserisci il nome della nuova lista:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:167
+msgid "Previous"
+msgstr "Precedente"
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Query fallita: (%s) %s"
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Lettura fallita: (%s) %s"
+
+#: lib/Driver.php:1868 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "La visualizzazione dei contatti non è disponibile."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Sei sicuro di eliminare la rubrica %s?. questa operazione non può essere "
+"annullata e tutti i contatti di questa rubrica saranno eliminati "
+"permanentemente"
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Elimina rubrica"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Elimina da questa lista"
+
+#: lib/Driver.php:1906
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"L'attuale database delle rubriche non permette l'eliminazione delle "
+"informazioni dell'utnte "
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Sostituire la rubrica esistente con una importata? <strong>Attenzione: "
+"Questa azione elimina tutte le voci della rubrica corrente.</strong>"
+
+#: lib/Driver.php:615
+msgid "Requested object not found."
+msgstr ""
+"Oggetto richiesto non trovato.Sostituisci la rubrica esistente con quella "
+"impostata? <strong>Attenzione: questo eliminerà tutti i contatti nella "
+"rubrica attuale.</strong>"
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Ritorna alle impostazioni di Default"
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "Certificato Pubblico S/MIME"
+
+#: config/attributes.php.dist:465
+msgid "SIP"
+msgstr "SIP"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS  fallita: (%s) %s"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr "Salva"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Salva la ricerca come rubrica Virtuale?"
+
+#: lib/Driver.php:1894 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Il salvataggio dei contatti non è disponibile"
+
+#: lib/Block/tree_menu.php:58 templates/block/minisearch.inc:26
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 config/prefs.php.dist:116
+msgid "Search"
+msgstr "Cerca"
+
+#: lib/api.php:1374
+msgid "Search failed"
+msgstr "Ricerca fallita"
+
+#: lib/api.php:1604 lib/api.php:1610 lib/api.php:1619 lib/api.php:1632
+#, php-format
+msgid "Search failed: %s"
+msgstr "Ricerca fallita: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Ricerca di: "
+
+#: lib/Driver.php:1853 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "La ricerca non è disponibile."
+
+#: templates/browse/row.inc:40
+msgid "Select contact"
+msgstr "Seleziona un contatto"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Seleziona la fonte da cui esportare:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Seleziona il calendario verso cui importare:"
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Selezionare la rubrica che deve essere usata per la sincronizzazione con "
+"strumenti esterni:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Seleziona il set di caratteri del file sorgente:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Seleziona il formato di esportazione:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Seleziona il file da importare:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Seleziona il formato in cui esportare:"
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "Seleziona il formato utilizzato per mostrare i nomi:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr ""
+"Seleziona la visualizzazione da mostrare di default, le opzioni di "
+"ordinamento e impaginazione."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Seleziona quali campi mostrare nella lista indirizzi."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Seleziona in quale formato visualizzare i nomi."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Seleziona rubrica '%s'."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Mostra %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Mostra entrambi"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Mostra Contatti"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Mostra Liste"
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "Direzione di ordinamento"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Ordina per %s"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Ordina solo per %s"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Ordina per %s, poi per %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Sorgente"
+
+#: lib/api.php:299
+msgid "Sources"
+msgstr "Sorgenti"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Sposo"
+
+#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Aggiunti con successo %d contatti alla lista"
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Aggiunto con successo %s a %s"
+
+#: lib/Views/Browse.php:291
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Lista Contatti \"%s\" creata con successo."
+
+#: search.php:165
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Rubrica Virtuale  \"%s\" creata con successo."
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Eliminati con successo %d contatti."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Eliminati con successo %d contatti dalla lista."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/export.inc:14 templates/data/import.inc:14
+msgid "Tab separated values"
+msgstr "Valori separati da Tab"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Rubrica destinazione"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Lista Contatti destinazione"
+
+#: data.php:321
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Il file %s non contiene contatti."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"Il backend VFS deve essere configurato per accettare upload di allegati"
+
+#: lib/Driver.php:1824
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "La rubrica \"%s\" non esiste."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "La rubrica \"%s\" è stata creata."
+
+#: data.php:328
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "la rubrica non può essere svuotata: %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "la rubrica %s è stato eliminato"
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "La rubrica \"%s\" è stata rinominata in %s."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "La rubrica \"%s\" è stata salvata."
+
+#: contact.php:23 view.php:28 vcard.php:19
+msgid "The contact you requested does not exist."
+msgstr "L'oggetto richiesto non esiste."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Il file %s è stato eliminato"
+
+#: data.php:301
+msgid "The import can be finished despite the warnings."
+msgstr "L'impostazione può essere ultimata malgrado gli avvertimenti."
+
+#: lib/Views/EditContact.php:43 lib/Views/DeleteContact.php:36
+#: lib/Views/Contact.php:59
+msgid "The requested contact was not found."
+msgstr "Oggetto richiesto non trovato."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Non ci sono rubriche sfogliabili."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Nessuna delle rubriche disponibili è configurata in modo da consertirti "
+"diaggiungere nuove entrate. Se pensi sia un errore, per favore contatta il "
+"tuo amministratore di sistema."
+
+#: lib/Views/Browse.php:349
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "C'è %d contatto in questa lista che non è visibile da te"
+msgstr[1] "Ci sono %d contatti in questa lista che non sono visibili da te"
+
+#: search.php:161
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Si è verificato un errore nella creazione della rubrica virtuale %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"C'è stato un errore aggiungendo questo oggetto. Contatta il tuo "
+"amministratore di sistema per ulteriore aiuto."
+
+#: lib/Views/Browse.php:311
+msgid "There was an error creating a new list."
+msgstr "Errore nella creazione di una nuova lista."
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Si è verificato un errore nell'eliminazione di %s dalla rubrica."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Errore nella cancellazione del contatto: %s."
+
+#: lib/Views/Browse.php:355
+msgid "There was an error displaying the list"
+msgstr "Errore nella visualizzazione della lista"
+
+#: data.php:355
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Errore nell'importazione dei dati: %s"
+
+#: lib/api.php:758 lib/api.php:1055
+msgid "There was an error importing the iCalendar data."
+msgstr "Errore nell'importazione dell'iCalendar"
+
+#: lib/api.php:235
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Errore nella rimozione di una rubrica per %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"C'è stato un errore aggiungendo questo oggetto. Contatta il tuo "
+"amministratore di sistema per ulteriore aiuto."
+
+#: data.php:187
+msgid "There were no addresses to export."
+msgstr "Non ci sono indirizzi da esportare."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Queste rubriche verranno visualizzate in questo ordine:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "la rubrica non può essere eliminata"
+
+#: data.php:286
+msgid "This file format is not supported."
+msgstr "Questo formato di file non è supportato."
+
+#: lib/api.php:1623 lib/api.php:1636
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Questa persona ha già una %s scheda nella rubrica."
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Questa sarà la rubrica di default nell'inserimento o impostazione di "
+"contatti."
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "Fuso Orario"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Impossibile trovare il proprietario del contatto."
+
+#: lib/Driver.php:1746 lib/Turba.php:672
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Impossibile caricare le definizioni di %s."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Impossibile salvare la rubrica %s: %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "Impossibile cercare."
+
+#: config/attributes.php.dist:353
+msgid "Unfiled"
+msgstr "Non Archiviato"
+
+#: lib/api.php:796 lib/api.php:906 lib/api.php:1073
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Content-Type Non Supportato: %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Visualizza '%s'"
+
+#: minisearch.php:72
+msgid "View Contact"
+msgstr "Visualizza Contatto"
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "Vista da mostrare di default:"
+
+#: config/attributes.php.dist:460
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr "Sito web"
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Indirizzo Ufficio"
+
+#: config/attributes.php.dist:524
+msgid "Work Address Extended"
+msgstr "Indirizzo Ufficio Esteso"
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr "Città Ufficio"
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr "Paese Ufficio"
+
+#: config/attributes.php.dist:408
+msgid "Work Email"
+msgstr "Email Ufficio"
+
+#: config/attributes.php.dist:425
+msgid "Work Fax"
+msgstr "Fax Ufficio"
+
+#: config/attributes.php.dist:530
+msgid "Work Latitude"
+msgstr "Latitudine Ufficio"
+
+#: config/attributes.php.dist:535
+msgid "Work Longitude"
+msgstr "Longitudine Ufficio"
+
+#: config/attributes.php.dist:435
+msgid "Work Mobile Phone"
+msgstr "Cellulare Ufficio"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Telefono Ufficio"
+
+#: config/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr "Casella Postale Ufficio"
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "CAP Ufficio"
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "Provincia o Stato Ufficio"
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "Indirizzo Ufficio"
+
+#: config/attributes.php.dist:450
+msgid "Work Video Call"
+msgstr "Video Chiamata Ufficio"
+
+#: config/attributes.php.dist:518
+msgid "Work Website URL"
+msgstr "Sito web Ufficio"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Non sei abilitato alla modifica di questa rubrica."
+
+#: add.php:48 data.php:250 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Non sei abilitato a creare più di %d contatti in \"%s\"."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Non seiautorizzato a eliminare questa rubrica."
+
+#: lib/api.php:198
+msgid "You are not allowed to remove user data."
+msgstr "Non sei abilitato a eliminare dati utente."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Non si possono inserire elementi in una Rubrica Virtuale."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Non si possono inserire contatti in una Rubrica Virtuale."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Non si possono eliminare contatti da una Rubrica Virtuale."
+
+#: view.php:38 edit.php:66 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Non hai il permesso di visualizzare questo contatto."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Non hai il permesso di visualizzare l'oggetto."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Non hai il permesso di eliminare questa rubrica."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Occorre installare la libreria Pear Net_LDAP per poter usare la verifica "
+"dello schema "
+
+#: search.php:148
+msgid "You must provide a name for virtual address books."
+msgstr "Inserire un nome per la Rubrica Virtuale."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Devi prima selezionare un indirizzo."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Devi prima selezionare una lista di destinazione."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Devi prima specificare almeno un contatto."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Hai solo il permesso di visualizzare il contatto."
+
+#: lib/Views/Browse.php:362
+msgid "Your default address book is not browseable."
+msgstr "La tua rubrica di default non è sfogliabile."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[nessun valore]"
+
+#: lib/Turba.php:614
+msgid "_Browse"
+msgstr "_Sfoglia"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Contatti"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_Elimina"
+
+#: contact.php:85
+msgid "_Edit"
+msgstr "_Modifica"
+
+#: lib/Turba.php:623
+msgid "_Import/Export"
+msgstr "_Importa/Esporta"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Liste"
+
+#: lib/Turba.php:611
+msgid "_My Address Books"
+msgstr "_Le Mie Rubriche"
+
+#: lib/Turba.php:617
+msgid "_New Contact"
+msgstr "_Nuovo Contatto"
+
+#: lib/Turba.php:628
+msgid "_Print"
+msgstr "_Stampa"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Elimina da questa lista"
+
+#: lib/Turba.php:619
+msgid "_Search"
+msgstr "_Cerca"
+
+#: contact.php:82
+msgid "_View"
+msgstr "_Visualizza"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "crescente"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+msgid "by %s"
+msgstr "da %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "da me"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "contatto"
+
+#: data.php:207 data.php:212 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contatti.csv"
+
+#: data.php:232
+msgid "contacts.ldif"
+msgstr "contatti.ldif"
+
+#: data.php:217
+msgid "contacts.tsv"
+msgstr "contatti.tsv"
+
+#: data.php:227
+msgid "contacts.vcf"
+msgstr "contatti.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "discendente"
+
+#: config/attributes.php.dist:387
+msgid "female"
+msgstr "femmina"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "in '%s'"
+
+#: config/attributes.php.dist:387
+msgid "male"
+msgstr "maschio"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "nessuna formattazione"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "nessuno"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "in una Lista Contatti"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "in una Rubrica differente"
+
+#: data.php:62 templates/data/export.inc:15 templates/data/import.inc:15
+#: templates/browse/column_headers.inc:13
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/ja_JP.po b/turba/po/ja_JP.po
new file mode 100644 (file)
index 0000000..84d68f1
--- /dev/null
@@ -0,0 +1,1606 @@
+# Japanese translation for Turba.
+# Copyright 2004-2009 The Horde Project
+# This file is distributed under the same license as the Turba package.
+# Hiromi Kimura <hiromi@tac.tsukuba.ac.jp>
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.2-RC1\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2007-08-03 14:42+0200\n"
+"PO-Revision-Date: 2007-12-27 10:08+0900\n"
+"Last-Translator: Hiromi Kimura <hiromi@tac.tsukuba.ac.jp>\n"
+"Language-Team: i18n@lists.horde.org\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=SHIFT_JIS\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "IMSP \82Ì\83A\83h\83\8c\83X\92 \82ð\92Ç\89Á"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "IMSP \83A\83h\83\8c\83X\92 \82ð\8dí\8f\9c"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" \82Í\8aù\82É\91\8dÝ\82·\82é\82Ì\82Å\83C\83\93\83|\81[\83g\82µ\82Ü\82¹\82ñ\82Å\82µ\82½\81B"
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" \82Í\8dX\90V\82³\82ê\82Ü\82µ\82½\82ª\81A\83t\83@\83C\83\8b\82Ì\95Û\91\82É\8e¸\94s\82µ\82Ü\82µ\82½\81F%s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" \82Í\8dX\90V\82³\82ê\82Ü\82µ\82½\81B"
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" \82Í\83\8a\83X\83g\82È\82Ì\82Å\83R\83s\81[\82µ\82Ü\82¹\82ñ\82Å\82µ\82½\81B"
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" \82Í\83\8a\83X\83g\82È\82Ì\82Å\88Ú\93®\82µ\82Ü\82¹\82ñ\82Å\82µ\82½\81B"
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"\90© \96¼\",\"Firstname Lastname\""
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"\96¼, \90©\",\"Lastname, Firstname\""
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s \82ð\92Ç\89Á\82µ\82Ü\82µ\82½\81B"
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "%s \83t\83@\83C\83\8b\82ª\83C\83\93\83|\81[\83g\82³\82ê\82Ü\82µ\82½\81B"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s \82©\82ç %s\81i%s \8c\8f\92\86\81j"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s \82Ì\83A\83h\83\8c\83X\92 "
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "IFRAME \82ð\83T\83|\81[\83g\82·\82é\83u\83\89\83E\83U\82ª\95K\97v\82Å\82·"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "%s \82Ö\82Ì\83A\83N\83Z\83X\82ª\8b\91\94Û\82³\82ê\82Ü\82µ\82½"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "\92Ç\89Á"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "\98A\97\8d\90æ\82ð\92Ç\89Á"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "\83A\83h\83\8c\83X\92 \92Ç\89Á"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "\97ñ\82Ì\92Ç\89Á"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "\83t\83@\83C\83\8b\82Ì\92Ç\89Á"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "\82±\82±\82É\92Ç\89Á"
+
+#: lib/Driver.php:1463
+msgid "Adding contacts is not available."
+msgstr "\98A\97\8d\90æ\82Ì\92Ç\89Á\82Í\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: templates/addressbooks.inc:105
+msgid "Address Book"
+msgstr "\83A\83h\83\8c\83X\92 "
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "\83A\83h\83\8c\83X\92 \88ê\97\97"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "\83A\83h\83\8c\83X\92 "
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "\83A\83h\83\8c\83X\92 \82Í\83p\81[\83W\82³\82ê\82Ü\82µ\82½\81B"
+
+#: templates/addressbooks.inc:80
+msgid "Address book to delete "
+msgstr "\8dí\8f\9c\82·\82é\83A\83h\83\8c\83X\92 "
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "\95\\8e¦\95s\94\\82È\83A\83h\83\8c\83X\92 \81F"
+
+#: search.php:161 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "\8fÚ\8d×\8c\9f\8dõ"
+
+#: config/attributes.php.dist:77
+msgid "Alias"
+msgstr "\95Ê\96¼"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "\91S\82Ä"
+
+#: lib/api.php:725
+msgid "Already Exists"
+msgstr "\8aù\82É\91\8dÝ\82µ\82Ü\82·"
+
+#: config/attributes.php.dist:95
+msgid "Anniversary"
+msgstr "\8bL\94O\93ú"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "\96{\93\96\82É %s \82ð\8dí\8f\9c\82µ\82Ä\82à\82¢\82¢\82Å\82·\82©\81H"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "\91I\91ð\82³\82ê\82½\98A\97\8d\90æ\82ð\96{\93\96\82É\8dí\8f\9c\82µ\82Ü\82·\82©\81H"
+
+#: templates/addressbooks.inc:45
+msgid "Are you sure you want to delete the addressbook: "
+msgstr "\83A\83h\83\8c\83X\92 \82ð\96{\93\96\82É\8dí\8f\9c\82µ\82Ü\82·\82©\81F"
+
+#: config/attributes.php.dist:368
+msgid "Assistant"
+msgstr "\8f\95\8eè"
+
+#: search.php:158 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "\8aÈ\88Õ\8c\9f\8dõ"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "\83o\83C\83\93\83h\8e¸\94s: (%s) %s"
+
+#: config/attributes.php.dist:89
+msgid "Birthday"
+msgstr "\92a\90\93ú"
+
+#: lib/Driver.php:524
+#, php-format
+msgid "Birthday of %s"
+msgstr "%s \82Ì\92a\90\93ú"
+
+#: lib/api.php:1255
+msgid "Birthdays"
+msgstr "\92a\90\93ú"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "\8bó\82Ì\96¼\91O"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "\97¼\95û"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "\89{\97\97"
+
+#: config/attributes.php.dist:280
+msgid "Business Category"
+msgstr "\90E\8bÆ\95ª\97Þ"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "\83O\83\8b\81[\83v\82Í\8e©\95ª\8e©\90g\82É\92Ç\89Á\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: lib/Driver/kolab.php:620
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "\83A\83h\83\8c\83X\92  %s \82Ì\91S\8d\80\96Ú\82ð\8dí\8f\9c\82Å\82«\82Ü\82¹\82ñ"
+
+#: config/attributes.php.dist:342
+msgid "Category"
+msgstr "\95ª\97Þ"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "%s \82Ì\95À\82Ñ\82ð %s \82É\95Ï\8dX"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "\91S\82Ä\83`\83F\83b\83N\81^\89ð\8f\9c"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "_A\91S\82Ä\83`\83F\83b\83N\81^\89ð\8f\9c"
+
+#: config/attributes.php.dist:107
+msgid "Children"
+msgstr "\8eq\8b\9f"
+
+#: templates/addressbooks.inc:60
+msgid "Choose a name"
+msgstr "\96¼\91O\82ð\91I\91ð"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "\83A\83h\83\8c\83X\92 \82ð\91I\91ð"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "\83A\83h\83\8c\83X\92 \82ð\91I\91ð\81F"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "\95\\8e¦\82·\82é\83A\83h\83\8c\83X\92 \82ð\91I\91ð\82µ\81A\8f\87\8f\98\82ð\8c\88\82ß\82Ä\82­\82¾\82³\82¢\81F"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "\8eg\97p\82·\82é\83A\83h\83\8c\83X\92 \82ð\91I\91ð\82µ\82Ä\89º\82³\82¢\81B"
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "\95\\8e¦\82·\82é\97ñ\82Æ\95\\8e¦\82Ì\8f\87\94Ô\82ð\91I\91ð\82µ\82Ä\89º\82³\82¢\81F"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "\95Â\82\82é"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "\8c\9f\8dõ\82Æ\95Â\82\82é"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "\95\\8e¦\97ñ\83I\83v\83V\83\87\83\93"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "\95\\8e¦\82³\82ê\82È\82¢\8d\80\96Ú\81F"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "\83R\83\93\83}\8bæ\90Ø\82è\8c`\8e®"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "\83R\83\93\83}\8bæ\90Ø\82è\8c`\8e® (Microsoft Outlook)"
+
+#: config/sources.php.dist:228 config/sources.php.dist:901
+msgid "Communications"
+msgstr "\92Ê\90M\8eè\92i"
+
+#: config/attributes.php.dist:286
+msgid "Company"
+msgstr "\8bÎ\96±\90æ"
+
+#: config/attributes.php.dist:215
+msgid "Company Address"
+msgstr "\8bÎ\96±\90æ\8fZ\8f\8a"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:394 lib/api.php:439
+#: lib/api.php:490 lib/api.php:525 lib/api.php:574 lib/api.php:620
+#: lib/api.php:661 lib/api.php:778 lib/api.php:865 lib/api.php:923
+#: lib/api.php:1012 lib/api.php:1231 lib/api.php:1289 lib/api.php:1371
+#, php-format
+msgid "Connection failed: %s"
+msgstr "\90Ú\91±\8e¸\94s: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "\90Ú\91±\8e¸\94s"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "\98A\97\8d\90æ\82Ì\8c\9f\8dõ"
+
+#: config/sources.php.dist:833
+msgid "Contacts"
+msgstr "\98A\97\8d\90æ"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "\98A\97\8d\90æ\95\\8e¦\81F"
+
+#: lib/Views/Browse.php:336
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "\98A\97\8d\90æ\82Ì\82 \82é\83\8a\83X\83g\81F%s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "\83R\83s\81["
+
+#: templates/addressbooks.inc:69
+msgid "Create"
+msgstr "\8dì\90¬"
+
+#: templates/addressbooks.inc:56
+msgid "Create Address Book"
+msgstr "\83A\83h\83\8c\83X\92 \8dì\90¬"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "\90V\82µ\82¢\98A\97\8d\90æ\83\8a\83X\83g\82Ì\8dì\90¬\90æ\81F"
+
+#: lib/Views/Contact.php:74
+msgid "Created"
+msgstr "\8dì\90¬"
+
+#: contact.php:86
+msgid "De_lete"
+msgstr "_L\8dí\8f\9c"
+
+#: templates/addressbooks.inc:94 templates/browse/actions.inc:3
+#: lib/Views/DeleteContact.php:58
+msgid "Delete"
+msgstr "\8dí\8f\9c"
+
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "\8dí\8f\9c %s"
+
+#: templates/addressbooks.inc:76
+msgid "Delete Address Book"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\8dí\8f\9c"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "\8dí\8f\9c\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: (%s) %s"
+
+#: lib/Driver.php:1471
+msgid "Deleting contacts is not available."
+msgstr "\98A\97\8d\90æ\82Ì\8dí\8f\9c\82Í\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "\8dí\8f\9c\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½"
+
+#: config/attributes.php.dist:292
+msgid "Department"
+msgstr "\95\94\8f\90"
+
+#: templates/addressbooks.inc:138
+msgid "Description"
+msgstr "\90à\96¾"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "\90l\96¼\95ë"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "\95\\8e¦"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "\95\\8e¦\83I\83v\83V\83\87\83\93"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "\83_\83E\83\93\83\8d\81[\83h"
+
+#: templates/browse/row.inc:13
+msgid "Download vCard"
+msgstr "VCard \82Ì\83_\83E\83\93\83\8d\81[\83h"
+
+#: templates/addressbooks.inc:123 templates/browse/row.inc:21
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "\95Ò\8fW"
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr "\"%s\" \82Ì\95Ò\8fW"
+
+#: lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "%s \82Ì\95Ò\8fW"
+
+#: templates/addressbooks.inc:100
+msgid "Edit Address Books"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\95Ò\8fW"
+
+#: config/attributes.php.dist:229
+msgid "Email"
+msgstr "\83\81\81[\83\8b\83A\83h\83\8c\83X"
+
+#: config/attributes.php.dist:235
+msgid "Emails"
+msgstr "\83\81\81[\83\8b\83A\83h\83\8c\83X"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "\83\8a\83X\83g\82Ö\82Ì\98A\97\8d\90æ\82Ì\92Ç\89Á\81i%d\81j\82ª\83G\83\89\81[\82É\82È\82è\82Ü\82µ\82½\81B"
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "\83\8a\83X\83g\82Ö\82Ì\98A\97\8d\90æ\82Ì\92Ç\89Á\81i%d / %d\81j\82ª\83G\83\89\81[\82É\82È\82è\82Ü\82µ\82½\81B"
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "%d \82Ì\98A\97\8d\90æ\82Ì\8dí\8f\9c\92\86\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½\81B"
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "\98A\97\8d\90æ\82Ì\8dí\8f\9c\92\86\81i%2$d \92\86\82Ì %1$d\81j\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½\81B"
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "\88ê\97\97\82©\82ç\98A\97\8d\90æ %d \82ð\8dí\8f\9c\92\86\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½\81B"
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "\88ê\97\97\82©\82ç\98A\97\8d\90æ\82ð\8dí\8f\9c\92\86\81i%2$d \92\86\82Ì %1$d\81j\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½\81B"
+
+#: lib/api.php:531
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\8c\9f\8dõ\92\86\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "\83G\83N\83X\83|\81[\83g"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\83G\83N\83X\83|\81[\83g"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "\91I\91ð\82³\82ê\82½\82à\82Ì\82¾\82¯\83G\83N\83X\83|\81[\83g\82·\82é\81B"
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "\88È\89º\82Ì\83A\83h\83\8c\83X\92 \82Ì\91S\82Ä\82Ì\93à\97e\82ð\83G\83N\83X\83|\81[\83g\82·\82é\81B"
+
+#: data.php:143 data.php:242 data.php:320 add.php:42 search.php:86
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "\83A\83h\83\8c\83X\92 \82É\90Ú\91±\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: %s"
+
+#: lib/Views/Browse.php:208
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "%s \82ð %s \82É\92Ç\89Á\82Å\82«\82Ü\82¹\82ñ: %s"
+
+#: lib/Views/Browse.php:342
+msgid "Failed to browse list"
+msgstr "\83\8a\83X\83g\82Ì\89{\97\97\82É\8e¸\94s\82µ\82Ü\82µ\82½"
+
+#: lib/Views/Browse.php:369
+msgid "Failed to browse the directory"
+msgstr "\90l\96¼\95ë\82Ì\89{\97\97\82É\8e¸\94s\82µ\82Ü\82µ\82½"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr "\96¼\91O\82Ì\95Ï\8dX\82É\8e¸\94s\82µ\82Ü\82µ\82½: (%s) %s; \8b\8c DN = %s, \90V DN = %s, \83\8b\81[\83g = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "\92Ç\89Á\82·\82×\82«\83I\83u\83W\83F\83N\83g\82ª\8c©\95t\82©\82è\82Ü\82¹\82ñ: %s"
+
+#: search.php:152
+msgid "Failed to search the address book"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\8c\9f\8dõ\82É\8e¸\94s\82µ\82Ü\82µ\82½"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "\90l\96¼\95ë\82ð\8c\9f\8dõ\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: %s"
+
+#: config/sources.php.dist:532
+msgid "Favourite Recipients"
+msgstr "\82¨\8bC\82É\93ü\82è\82Ì\91\8a\8eè"
+
+#: config/attributes.php.dist:256
+msgid "Fax"
+msgstr "FAX"
+
+#: lib/Forms/Contact.php:40
+msgid "Files"
+msgstr "\83t\83@\83C\83\8b"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "\8c\9f\8dõ"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+msgid "Finish"
+msgstr "\8a®\97¹"
+
+#: config/attributes.php.dist:47
+msgid "First Name"
+msgstr "\96¼(First Name)"
+
+#: config/attributes.php.dist:318
+msgid "Freebusy URL"
+msgstr "\97\\92è\8fî\95ñ URL"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "From"
+
+#: config/attributes.php.dist:374
+msgid "Gender"
+msgstr "\90«\95Ê"
+
+#: config/sources.php.dist:758
+msgid "Global Address Book"
+msgstr "\8dL\88æ\83A\83h\83\8c\83X\92 "
+
+#: templates/browse/row.inc:39
+msgid "Group"
+msgstr "\83O\83\8b\81[\83v"
+
+#: config/attributes.php.dist:115
+msgid "Home Address"
+msgstr "\8e©\91î\82Ì\8fZ\8f\8a"
+
+#: config/attributes.php.dist:133
+msgid "Home City"
+msgstr "\8e©\91î\82Ì\8es"
+
+#: config/attributes.php.dist:151
+msgid "Home Country"
+msgstr "\8e©\91î\82Ì\8d\91"
+
+#: config/attributes.php.dist:241
+msgid "Home Phone"
+msgstr "\8e©\91î\82Ì\93d\98b\94Ô\8d\86"
+
+#: config/attributes.php.dist:127
+msgid "Home Post Office Box"
+msgstr "\8e©\91î\82Ì\8e\84\8f\91\94 "
+
+#: config/attributes.php.dist:145
+msgid "Home Postal Code"
+msgstr "\8e©\91î\82Ì\97X\95Ö\94Ô\8d\86"
+
+#: config/attributes.php.dist:139
+msgid "Home State/Province"
+msgstr "\8e©\91î\82Ì\8fB\81^\8c§"
+
+#: config/attributes.php.dist:121
+msgid "Home Street Address"
+msgstr "\8e©\91î\82Ì\94Ô\92n"
+
+#: config/sources.php.dist:649
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\83C\83\93\83|\81[\83g\81A\83X\83e\83b\83v %d"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\83C\83\93\83|\81[\83g\81^\83G\83N\83X\83|\81[\83g"
+
+#: config/attributes.php.dist:350
+msgid "Initials"
+msgstr "\83C\83j\83V\83\83\83\8b"
+
+#: config/attributes.php.dist:356
+msgid "Instant Messenger"
+msgstr "\83C\83\93\83X\83^\83\93\83g\81E\83\81\83b\83Z\83\93\83W\83\83\81["
+
+#: lib/api.php:773 lib/api.php:860
+msgid "Invalid ID"
+msgstr "\95s\90³\82È ID \82Å\82·"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:306 lib/api.php:520
+#: lib/api.php:569 lib/api.php:615 lib/api.php:656 lib/api.php:769
+#: lib/api.php:856 lib/api.php:913 lib/api.php:1354
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "\95s\90³\82È\83A\83h\83\8c\83X\92 \82Å\82·\81F%s"
+
+#: lib/api.php:1358 lib/api.php:1432 lib/api.php:1489
+msgid "Invalid email"
+msgstr "\95s\90³\82È\83\81\81[\83\8b\83A\83h\83\8c\83X\82Å\82·"
+
+#: lib/api.php:1366
+msgid "Invalid entry"
+msgstr "\95s\90³\82È\93ü\97Í\82Å\82·"
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "\95s\90³\82È\83L\83C\82ª\8ew\92è\82³\82ê\82Ü\82µ\82½\81B"
+
+#: lib/api.php:1362
+msgid "Invalid name"
+msgstr "\95s\90³\82È\96¼\91O\82Å\82·"
+
+#: lib/api.php:917
+msgid "Invalid objectId"
+msgstr "\95s\90³\82È\83I\83u\83W\83F\83N\83gID \82Å\82·"
+
+#: config/attributes.php.dist:268
+msgid "Job Title"
+msgstr "\8c¨\8f\91"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "\95Û\91\82Ì\83L\83C\82Í UID \82Å\82 \82Á\82Ä\81A%s \82Å\82È\82¢\82±\82Æ\81I"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"LDAP \82Ì\83T\83|\81[\83g\82ª\95K\97v\82Å\82·\82ª\81ALDAP \83\82\83W\83\85\81[\83\8b\82ª\96³\82¢\82©\83\8d\81[\83h\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½\81B"
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF\83A\83h\83\8c\83X\92 "
+
+#: config/attributes.php.dist:380
+msgid "Language"
+msgstr "\8c¾\8cê"
+
+#: lib/Views/Contact.php:80
+msgid "Last Modified"
+msgstr "\8dÅ\8fI\95Ï\8dX"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "\90©(Last Name)"
+
+#: config/attributes.php.dist:386
+msgid "Latitude"
+msgstr "\88Ü\93x"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "\83\8a\83X\83g"
+
+#: config/sources.php.dist:223 config/sources.php.dist:897
+msgid "Location"
+msgstr "\8fê\8f\8a"
+
+#: config/attributes.php.dist:391
+msgid "Longitude"
+msgstr "\8co\93x"
+
+#: config/attributes.php.dist:362
+msgid "Manager"
+msgstr "\8aÇ\97\9d\8eÒ"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "\82ª\8e\9f\82É\88ê\92v\82·\82é"
+
+#: lib/api.php:281
+msgid "Maximum Number of Contacts"
+msgstr "\98A\97\8d\90æ\82Ì\8dÅ\91å\90\94"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "\8dÅ\91å\82Ì\83y\81[\83W\90\94"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "\83\81\83j\83\85\81[\83\8a\83X\83g"
+
+#: config/attributes.php.dist:59
+msgid "Middle Names"
+msgstr "\83~\83h\83\8b\83l\81[\83\80"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "LDAP \82Ì\90Ý\92è\82É DN \82Ì\8ew\92è\82ª\94²\82¯\82Ä\82¢\82Ü\82·\81B"
+
+#: config/attributes.php.dist:251
+msgid "Mobile Phone"
+msgstr "\8cg\91Ñ\93d\98b"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "\95Ï\8dX\8e¸\94s: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "\82»\82Ì\91¼\82Ì\83I\83v\83V\83\87\83\93..."
+
+#: lib/api.php:1474
+msgid "More than 1 entry found"
+msgstr "\82P\82Â\88È\8fã\82 \82è\82Ü\82·"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "\88Ú\93®"
+
+#: templates/prefs/columnselect.inc:248
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "\8d\82É\88Ú\93®"
+
+#: templates/prefs/columnselect.inc:250
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "\89E\82É\88Ú\93®"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry \8c`\8e®\82Ì\83A\83h\83\8c\83X\92 "
+
+#: lib/api.php:1390
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "\83A\83h\83\8c\83X[%s]\82É\95¡\90\94\82Ì\96¼\91O\82ª\82 \82è\82Ü\82·\82ª\81A\96¼\91O [%s]\82Í\91\8dÝ\82µ\82Ü\82¹\82ñ\81B"
+
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "\8e\84\82Ì\83A\83h\83\8c\83X\92 "
+
+#: addressbooks.php:174
+msgid "My Address Books"
+msgstr "\8e\84\82Ì\83A\83h\83\8c\83X\92 "
+
+#: templates/addressbooks.inc:130 config/attributes.php.dist:41
+msgid "Name"
+msgstr "\96¼\91O"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "\96¼\91O\82Ì\8c`\8e®"
+
+#: config/attributes.php.dist:65
+msgid "Name Prefixes"
+msgstr "\8ch\8fÌ\81i\90Ú\93ª\81j"
+
+#: config/attributes.php.dist:71
+msgid "Name Suffixes"
+msgstr "\8ch\8fÌ\81i\90Ú\94ö\81j"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "\96¼\91O\81F"
+
+#: add.php:70 lib/Block/tree_menu.php:28
+msgid "New Contact"
+msgstr "\90V\8bK\98A\97\8d\90æ"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "\8e\9f"
+
+#: config/attributes.php.dist:83
+msgid "Nickname"
+msgstr "\83j\83b\83N\83l\81[\83\80"
+
+#: lib/api.php:1477 lib/api.php:1526
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "%s \82Í %s \82É\82 \82è\82Ü\82¹\82ñ"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "\83A\83h\83\8c\83X\92 \82ª\82 \82è\82Ü\82¹\82ñ\81B\83C\83\93\83|\81[\83g\82Æ\83G\83N\83X\83|\81[\83g\82Í\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: search.php:72
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "\83A\83h\83\8c\83X\92 \82ª\82 \82è\82Ü\82¹\82ñ\81B\8c\9f\8dõ\82Í\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: lib/api.php:1441
+msgid "No address books found."
+msgstr "\83A\83h\83\8c\83X\92 \82ª\8c©\95t\82©\82è\82Ü\82¹\82ñ\81B"
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "\98A\97\8d\90æ\82ª\8c©\95t\82©\82è\82Ü\82¹\82ñ"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "\8c»\8dÝ\82Ì\83t\83B\83\8b\83^\81[\82É\82Í\88ê\92v\82·\82é\98A\97\8d\90æ\82Í\82 \82è\82Ü\82¹\82ñ\81B"
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "\88ê\92v\82·\82é\98A\97\8d\90æ\82ª\82 \82è\82Ü\82¹\82ñ"
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "\81u\82¨\8bC\82É\93ü\82è\82Ì\91\8a\8eè\81v\82Ì\83\\81[\83X\82ª\82 \82è\82Ü\82¹\82ñ\81B"
+
+#: lib/api.php:682 lib/api.php:949
+msgid "No vCard data was found."
+msgstr "vCard \83f\81[\83^\82ª\8c©\95t\82©\82è\82Ü\82¹\82ñ\81B"
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "\82È\82µ"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "\8c©\95t\82©\82è\82Ü\82¹\82ñ"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "\8c©\95t\82©\82è\82Ü\82¹\82ñ"
+
+#: config/attributes.php.dist:306
+msgid "Notes"
+msgstr "\92\8d\8bL"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "1\83y\81[\83W\82Ì\8d\80\96Ú\90\94"
+
+#: lib/api.php:789 lib/api.php:929
+msgid "Object not found"
+msgstr "\83I\83u\83W\83F\83N\83g\82ª\8c©\95t\82©\82è\82Ü\82¹\82ñ"
+
+#: config/attributes.php.dist:274
+msgid "Occupation"
+msgstr "\8ch\8fÌ"
+
+#: config/attributes.php.dist:298
+msgid "Office"
+msgstr "\89ï\8eÐ"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"\82±\82Ì\83I\83v\83V\83\87\83\93\89æ\96Ê\82ð\95Û\91\82·\82é\82Æ\81A\82»\82Ì\83A\83h\83\8c\83X\92 \82Í\8a®\91S\82É\8dí\8f\9c\82³\82ê\82Ü\82·\81B\82»\82ê\82ð\96]"
+"\82Ü\82È\82¢\82È\82ç\82Î\81A\"None\" \82ð\91I\91ð\82µ\82Ä\89º\82³\82¢\81B"
+
+#: lib/api.php:957
+msgid "Only one vcard supported."
+msgstr "\82P\82Â\82Ì vcard \82¾\82¯\82ð\83T\83|\81[\83g\82µ\82Ü\82·\81B"
+
+#: config/sources.php.dist:230 config/sources.php.dist:903
+msgid "Organization"
+msgstr "\91g\90D"
+
+#: config/sources.php.dist:231 config/sources.php.dist:905
+msgid "Other"
+msgstr "\82»\82Ì\91¼"
+
+#: config/attributes.php.dist:324
+msgid "PGP Public Key"
+msgstr "PGP \8cö\8aJ\8c®"
+
+#: config/attributes.php.dist:261
+msgid "Pager"
+msgstr "\83|\83P\83x\83\8b"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "\82±\82Ì\98A\97\8d\90æ\82ð\96{\93\96\82É\8dí\8f\9c\82µ\82Ü\82·\82©\81H"
+
+#: deletefile.php:36 lib/Driver.php:676 lib/api.php:665 lib/api.php:782
+#: lib/api.php:869 lib/api.php:1159 lib/api.php:1375 lib/Driver/sql.php:481
+msgid "Permission denied"
+msgstr "\83A\83N\83Z\83X\82ª\8b\91\94Û\82³\82ê\82Ü\82µ\82½"
+
+#: templates/addressbooks.inc:120
+msgid "Permissions"
+msgstr "\83A\83N\83Z\83X\8c "
+
+#: config/sources.php.dist:221 config/sources.php.dist:893
+msgid "Personal"
+msgstr "\8cÂ\90l"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine \8c`\8e®\82Ì\83A\83h\83\8c\83X\92 "
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "\90V\8bK\98A\97\8d\90æ\83\8a\83X\83g\82Ì\96¼\91O\82ð\93ü\97Í\82µ\82Ä\89º\82³\82¢\81F"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+msgid "Previous"
+msgstr "\91O"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "\96â\82¢\8d\87\82í\82¹\8e¸\94s: (%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "\93Ç\8d\9e\82Ý\8e¸\94s: (%s) %s"
+
+#: lib/Driver.php:1455
+msgid "Reading contacts is not available."
+msgstr "\98A\97\8d\90æ\82Ì\93Ç\82Ý\8fo\82µ\82Í\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "\83A\83h\83\8c\83X\92 \82ð\8dí\8f\9c"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "\97ñ\82ð\8dí\8f\9c"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "\83\8a\83X\83g\82©\82ç\8aO\82·"
+
+#: lib/Driver.php:1493
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"\8c»\8dÝ\82Ì\83A\83h\83\8c\83X\92 \82Ì\83h\83\89\83C\83o\81[\82Å\82Í\83\86\81[\83U\83f\81[\83^\82ð\8dí\8f\9c\82·\82é\82±\82Æ\82Í\83T\83|\81[\83g\82³\82ê\82Ä\82¢"
+"\82Ü\82¹\82ñ\81B"
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"\83C\83\93\83|\81[\83g\82Å\8aù\91\82Ì\83A\83h\83\8c\83X\92 \82ð\92u\82«\8a·\82¦\82Ü\82·\82©\81H <b>\8cx\8d\90\81F\82»\82¤\82·\82é\82Æ\8c»\8dÝ\82Ì\83A\83h"
+"\83\8c\83X\92 \82Ì\93à\97e\82Í\91S\82Ä\8e¸\82í\82ê\82Ü\82·\81B</b>"
+
+#: lib/Driver.php:573
+msgid "Requested object not found."
+msgstr "\97v\8b\81\82³\82ê\82½\83I\83u\83W\83F\83N\83g\82Í\8c©\95t\82©\82è\82Ü\82¹\82ñ\82Å\82µ\82½\81B"
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "\83f\83t\83H\83\8b\83g\82É\96ß\82·"
+
+#: config/attributes.php.dist:330
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME \8cö\8aJ\8fØ\96¾\8f\91"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS \8e¸\94s: (%s) %s"
+
+#: templates/addressbooks.inc:147 lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "\95Û\91¶"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "\8c\9f\8dõ\8c\8b\89Ê\82ð\89¼\91z\83A\83h\83\8c\83X\92 \82É\95Û\91\82µ\82Ü\82·\82©\81H"
+
+#: lib/Driver.php:1481
+msgid "Saving contacts is not available."
+msgstr "\98A\97\8d\90æ\82Ì\95Û\91\82Í\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:59 config/prefs.php.dist:107
+msgid "Search"
+msgstr "\8c\9f\8dõ"
+
+#: lib/api.php:1236
+msgid "Search failed"
+msgstr "\8c\9f\8dõ\8e¸\94s"
+
+#: lib/api.php:1380 lib/api.php:1386 lib/api.php:1395 lib/api.php:1408
+#, php-format
+msgid "Search failed: %s"
+msgstr "\8c\9f\8dõ\8e¸\94s: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "\8c\9f\8dõ\81F"
+
+#: lib/Driver.php:1440
+msgid "Searching is not available."
+msgstr "\8c\9f\8dõ\82Í\8eg\97p\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: templates/addressbooks.inc:84
+msgid "Select an address book to delete"
+msgstr "\8dí\8f\9c\82·\82é\83A\83h\83\8c\83X\92 \82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢"
+
+#: templates/addressbooks.inc:109
+msgid "Select an address book to edit"
+msgstr "\95Ò\8fW\82·\82é\83A\83h\83\8c\83X\92 \82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢"
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "\98A\97\8d\90æ\91I\91ð"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "\83G\83N\83X\83|\81[\83g\82·\82é\83A\83h\83\8c\83X\92 \82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "\83C\83\93\83|\81[\83g\90æ\82Ì\83A\83h\83\8c\83X\92 \82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "\83t\83@\83C\83\8b\82Ì\95\8e\9a\83Z\83b\83g\82ð\91I\91ð\82µ\82Ä\89º\82³\82¢:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "\83G\83N\83X\83|\81[\83g\82·\82é\8c`\8e®\82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "\83C\83\93\83|\81[\83g\82·\82é\83t\83@\83C\83\8b\82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "\8c³\82Ì\83t\83@\83C\83\8b\82Ì\8c`\8e®\82ð\91I\91ð\82µ\82Ä\89º\82³\82¢:"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "\95\\8e¦\82Ì\8c`\8e®\82ð\91I\91ð\82µ\82Ä\82­\82¾\82³\82¢:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr ""
+"\95À\82Ñ\8f\87\82â\83y\81[\83W\83\93\83O\83I\83v\83V\83\87\83\93\82È\82Ç\82Ì\83f\83t\83H\83\8b\83g\82Ì\95\\8e¦\8c`\8e®\82ð\91I\91ð\82µ\82Ä\89º\82³\82¢\81B"
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "\83A\83h\83\8c\83X\82Ì\88ê\97\97\82Å\95\\8e¦\82·\82é\97ñ\82ð\91I\91ð\82µ\82Ü\82·\81B"
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "\96¼\91O\82Ì\95\\8e¦\8c`\8e®\82ð\91I\91ð\82µ\82Ü\82·\81B"
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "\91I\91ð\82³\82ê\82½\83A\83h\83\8c\83X\92  \"%s\"\81B"
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "%s \82ð\95\\8e¦"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "\82Ç\82¿\82ç\82à\95\\8e¦"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "\98A\97\8d\90æ\82Ì\95\\8e¦"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "\83\8a\83X\83g\82Ì\95\\8e¦"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "\95À\82Ñ\8f\87"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "%s \82Å\95À\82×\91Ö\82¦"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "%s \82¾\82¯\82Å\95À\82×\91Ö\82¦"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "\90æ\82¸ %s \82Å\81A\8e\9f\82É %s \82Å\95À\82×\91Ö\82¦"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "\83\\81[\83X\81F"
+
+#: lib/api.php:274
+msgid "Sources"
+msgstr "\83\\81[\83X"
+
+#: config/attributes.php.dist:101
+msgid "Spouse"
+msgstr "\94z\8bô\8eÒ"
+
+#: lib/Views/Browse.php:258 lib/Views/Browse.php:298
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d \82Â\82Ì\98A\97\8d\90æ\82Í\83\8a\83X\83g\82É\92Ç\89Á\82³\82ê\82Ü\82µ\82½\81B"
+
+#: lib/Views/Browse.php:212
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s \82Í %s \82É\92Ç\89Á\82³\82ê\82Ü\82µ\82½"
+
+#: lib/Views/Browse.php:288
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "\98A\97\8d\90æ\83\8a\83X\83g \"%s\" \82ª\92Ç\89Á\82³\82ê\82Ü\82µ\82½\81B"
+
+#: search.php:127
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "\89¼\91z\83A\83h\83\8c\83X\92  \"%s\" \82ª\8dì\90¬\82³\82ê\82Ü\82µ\82½"
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d \82Â\82É\98A\97\8d\90æ\82ª\8dí\8f\9c\82³\82ê\82Ü\82µ\82½\81B"
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d \82Â\82É\98A\97\8d\90æ\82ª\83\8a\83X\83g\82©\82ç\8dí\8f\9c\82³\82ê\82Ü\82µ\82½\81B"
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "\83^\83u\8bæ\90Ø\82è\8c`\8e®"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "\96Ú\93I\82Ì\83A\83h\83\8c\83X\92 "
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "\96Ú\93I\82Ì\98A\97\8d\90æ\83\8a\83X\83g"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "\83t\83@\83C\83\8b %s \82É\82Í\98A\97\8d\90æ\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B"
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "VFS \83o\83b\83N\83G\83\93\83h\82Í\93Y\95t\82Ì\83A\83b\83v\83\8d\81[\83h\82ª\8b\96\89Â\82³\82ê\82Ä\82¢\82é\82±\82Æ\82ª\95K\97v\82Å\82·\81B"
+
+#: lib/Driver.php:1411
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "\83A\83h\83\8c\83X\92  \"%s\" \82Í\91\8dÝ\82µ\82Ü\82¹\82ñ\81B"
+
+#: addressbooks.php:104
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "\83A\83h\83\8c\83X\92  \"%s\" \82ª\8dì\90¬\82³\82ê\82Ü\82µ\82½\81B"
+
+#: addressbooks.php:130
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "\83A\83h\83\8c\83X\92  \"%s\" \82ª\8dí\8f\9c\82³\82ê\82Ü\82µ\82½\81B"
+
+#: addressbooks.php:151
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "\83A\83h\83\8c\83X\92  \"%s\" \82ª\8dX\90V\82³\82ê\82Ü\82µ\82½\81B"
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "\83A\83h\83\8c\83X\92 \82ð\83p\81[\83W\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½: %s"
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "\97v\8b\81\82³\82ê\82½\98A\97\8d\90æ\82Í\91\8dÝ\82µ\82Ü\82¹\82ñ\81B"
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "\83t\83@\83C\83\8b \"%s\" \82Í\8dí\8f\9c\82³\82ê\82Ü\82µ\82½\81B"
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "\83C\83\93\83|\81[\83g\82Í\8cx\8d\90\82ª\8fo\82Ä\82à\8a®\97¹\82µ\82Ü\82·\81B"
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "\97v\8b\81\82³\82ê\82½\98A\97\8d\90æ\82Í\8c©\95t\82©\82è\82Ü\82¹\82ñ\82Å\82µ\82½\81B"
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "\89{\97\97\89Â\94\\82È\83A\83h\83\8c\83X\92 \82Í\82 \82è\82Ü\82¹\82ñ\81B"
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"\8f\91\82«\8d\9e\82Ý\89Â\94\\82È\83A\83h\83\8c\83X\92 \82Í\82 \82è\82Ü\82¹\82ñ\81B\82 \82È\82½\82ª\90V\82µ\82¢\8d\80\96Ú\82ð\92Ç\89Á\82Å\82«\82é\82æ\82¤\82È\83A"
+"\83h\83\8c\83X\92 \82Í\97p\88Ó\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B\82»\82ê\82ª\8aÔ\88á\82¢\82¾\82Æ\8ev\82¤\82È\82ç\81A\83V\83X\83e\83\80\8aÇ\97\9d\8eÒ\82É\82¨\96â"
+"\82¢\8d\87\82í\82¹\82­\82¾\82³\82¢\81B"
+
+#: search.php:123
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "\89¼\91z\83A\83h\83\8c\83X\92 \82Ì\8dì\90¬\92\86\82É\96â\91è\82ª\8bN\82«\82Ü\82µ\82½: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"\98A\97\8d\90æ\82Ì\92Ç\89Á\92\86\82É\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81B\8fÚ\8d×\82É\82Â\82¢\82Ä\82Í\83V\83X\83e\83\80\8aÇ\97\9d\8eÒ\82É\82¨\96â\82¢\8d\87"
+"\82í\82¹\82­\82¾\82³\82¢\81B"
+
+#: lib/Views/Browse.php:308
+msgid "There was an error creating a new list."
+msgstr "\90V\8bK\83\8a\83X\83g\8dì\90¬\8e\9e\82É\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81B"
+
+#: addressbooks.php:96 addressbooks.php:102
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\8dì\90¬\92\86\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½: %s"
+
+#: lib/Views/Browse.php:218
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "\83A\83h\83\8c\83X\92 \82©\82ç \"%s\" \82ð\8dí\8f\9c\92\86\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½\81B"
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "\82±\82Ì\98A\97\8d\90æ\82Ì\8dí\8f\9c\92\86\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½: %s"
+
+#: lib/Views/Browse.php:348
+msgid "There was an error displaying the list"
+msgstr "\83\8a\83X\83g\95\\8e¦\92\86\82É\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "\83f\81[\83^\82Ì\83C\83\93\83|\81[\83g\92\86\82É\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½: %s"
+
+#: lib/api.php:678 lib/api.php:944
+msgid "There was an error importing the iCalendar data."
+msgstr "iCalendar \82Ì\83C\83\93\83|\81[\83g\92\86\82É\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81B"
+
+#: lib/api.php:227
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "\83A\83h\83\8c\83X\92  %s \82Ì\8dí\8f\9c\92\86\82É\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½"
+
+#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\8dí\8f\9c\92\86\82É\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81F%s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"\98A\97\8d\90æ\82Ì\95Û\91\92\86\82É\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81B\8fÚ\8d×\82É\82Â\82¢\82Ä\82Í\83V\83X\83e\83\80\8aÇ\97\9d\8eÒ\82É\82¨\96â\82¢\8d\87"
+"\82í\82¹\82­\82¾\82³\82¢\81B"
+
+#: addressbooks.php:149
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "\83A\83h\83\8c\83X\92 \82Ì\8dX\90V\92\86\82É\83G\83\89\81[\82ª\82 \82è\82Ü\82µ\82½: %s"
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "\83G\83N\83X\83|\81[\83g\82·\82×\82«\83A\83h\83\8c\83X\92 \82ª\82 \82è\82Ü\82¹\82ñ\81B"
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "\82±\82ê\82ç\82Ì\83A\83h\83\8c\83X\92 \82Í\82±\82Ì\8f\87\8f\98\82Å\95\\8e¦\82³\82ê\82Ü\82·\81F"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "\82±\82ê\82ç\82Ì\97ñ\82Í\82±\82Ì\8f\87\8f\98\82Å\95\\8e¦\82³\82ê\82Ü\82·\81F"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "\82±\82Ì\8c`\8e®\82Í\83T\83|\81[\83g\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B"
+
+#: lib/api.php:1399 lib/api.php:1412
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "\82±\82Ì\90l\95¨\82Í\82·\82Å\82É\83A\83h\83\8c\83X\92 \82É %s \82Æ\82µ\82Ä\93o\98^\82³\82ê\82Ä\82¢\82Ü\82·\81B"
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "\98A\97\8d\90æ\82ð\92Ç\89Á\82·\82é\8dÛ\83f\83t\83H\83\8b\83g\82Å\8eg\97p\82³\82ê\82é\83A\83h\83\8c\83X\92 \82Å\82·\81B"
+
+#: config/attributes.php.dist:221
+msgid "Time Zone"
+msgstr "\83^\83C\83\80\83]\81[\83\93"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "\98A\97\8d\90æ\82Ì\8f\8a\97L\8eÒ\82ª\8c©\82Â\82©\82è\82Ü\82¹\82ñ\81B"
+
+#: lib/Driver.php:1333 lib/Turba.php:643
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "%s \82Ì\92è\8b`\82ð\83\8d\81[\83h\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "\8c\9f\8dõ\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "\95Ï\8dX\82ð\8eæ\82è\8fÁ\82·"
+
+#: config/attributes.php.dist:340
+msgid "Unfiled"
+msgstr "\96¢\90®\97\9d"
+
+#: lib/api.php:711 lib/api.php:814 lib/api.php:962
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "\83T\83|\81[\83g\82µ\82Ä\82¢\82È\82¢ Content-Type\81F%s"
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "\98A\97\8d\90æ\82ð\95\\8e¦"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "\83f\83t\83H\83\8b\83g\82Ì\95\\8e¦\89æ\96Ê:"
+
+#: config/attributes.php.dist:312
+msgid "Website URL"
+msgstr "Web \82Ì URL"
+
+#: config/attributes.php.dist:165
+msgid "Work Address"
+msgstr "\8bÎ\96±\90æ\82Ì\8fZ\8f\8a"
+
+#: config/attributes.php.dist:183
+msgid "Work City"
+msgstr "\8bÎ\96±\90æ\82Ì\8es"
+
+#: config/attributes.php.dist:201
+msgid "Work Country"
+msgstr "\8bÎ\96±\90æ\82Ì\8d\91"
+
+#: config/attributes.php.dist:246
+msgid "Work Phone"
+msgstr "\8bÎ\96±\90æ\82Ì\93d\98b\94Ô\8d\86"
+
+#: config/attributes.php.dist:177
+msgid "Work Post Office Box"
+msgstr "\8bÎ\96±\90æ\82Ì\8e\84\8f\91\94 "
+
+#: config/attributes.php.dist:195
+msgid "Work Postal Code"
+msgstr "\8bÎ\96±\90æ\82Ì\97X\95Ö\94Ô\8d\86"
+
+#: config/attributes.php.dist:189
+msgid "Work State/Province"
+msgstr "\8bÎ\96±\90æ\82Ì\8fB\81^\8c§"
+
+#: config/attributes.php.dist:171
+msgid "Work Street Address"
+msgstr "\8bÎ\96±\90æ\82Ì\94Ô\92n"
+
+#: data.php:251 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:271
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr ""
+"\82 \82È\82½\82Í \"%2$s\" \92\86\82É %1$d \88È\8fã\82Ì\98A\97\8d\90æ\82ð\8dì\90¬\82·\82é\82±\82Æ\82ð\8b\96\89Â\82³\82ê\82Ä\82¢\82Ü\82¹\82ñ\81B"
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "\89¼\91z\83A\83h\83\8c\83X\92 \82É\8d\80\96Ú\82Ì\92Ç\89Á\82ª\82Å\82«\82Ü\82¹\82ñ\81B"
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "\89¼\91z\83A\83h\83\8c\83X\92 \82É\90V\82½\82È\98A\97\8d\90æ\82Í\92Ç\89Á\82Å\82«\82Ü\82¹\82ñ"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "\89¼\91z\83A\83h\83\8c\83X\92 \82©\82ç\98A\97\8d\90æ\82Í\8dí\8f\9c\82Å\82«\82Ü\82¹\82ñ"
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "\82 \82È\82½\82Í\82±\82Ì\98A\97\8d\90æ\82ð\8c©\82é\8c \97\98\82ª\82 \82è\82Ü\82¹\82ñ\81B"
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "\82 \82È\82½\82Í\82±\82Ì\83I\83u\83W\83F\83N\83g\82ð\8c©\82é\8c \97\98\82ª\82 \82è\82Ü\82¹\82ñ\81B"
+
+#: addressbooks.php:59
+msgid "You do not have permissions to delete this source."
+msgstr "\82 \82È\82½\82Í\82±\82Ì\83\\81[\83X\82ð\8dí\8f\9c\82·\82é\8c \97\98\82ª\82 \82è\82Ü\82¹\82ñ\81B"
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"\83X\83L\81[\83}\8c\9f\8d¸\8aÖ\90\94\82ð\8eg\97p\82·\82é\82½\82ß\82É\82Í Net_LDAP PEAR \83\89\83C\83u\83\89\83\8a\82ª\83C\83\93\83X\83g\81[\83\8b\82³\82ê"
+"\82Ä\82¢\82È\82¯\82ê\82Î\82È\82è\82Ü\82¹\82ñ\81B"
+
+#: search.php:110
+msgid "You must provide a name for virtual address books."
+msgstr "\89¼\91z\83A\83h\83\8c\83X\92 \82Ì\96¼\91O\82ð\8ew\92è\82µ\82Ä\89º\82³\82¢\81B"
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "\96Ú\93I\82Ì\83A\83h\83\8c\83X\92 \82ð\91I\82ñ\82Å\89º\82³\82¢\81B"
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "\96Ú\93I\82Ì\83\8a\83X\83g\82ð\91I\82ñ\82Å\82­\82¾\82³\82¢\81B"
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "\8dÅ\8f\89\82É\8f­\82È\82­\82Æ\82à\82P\82Â\82Ì\98A\97\8d\90æ\82ð\91I\82ñ\82Å\82­\82¾\82³\82¢\81B"
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "\82 \82È\82½\82É\82Í\82±\82Ì\98A\97\8d\90æ\82ð\8c©\82é\82¾\82¯\82Ì\8c \97\98\82µ\82©\82 \82è\82Ü\82¹\82ñ\81B"
+
+#: lib/Views/Browse.php:355
+msgid "Your default address book is not browseable."
+msgstr "\82 \82È\82½\82Ì\83f\83t\83H\83\8b\83g\82Ì\83A\83h\83\8c\83X\92 \82Í\89{\97\97\82ª\95s\89Â\94\\82Å\82·\81B"
+
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "_B\89{\97\97"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_C\98A\97\8d\90æ"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_D\8dí\8f\9c"
+
+#: contact.php:82
+msgid "_Edit"
+msgstr "_E\95Ò\8fW"
+
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "_I\83C\83\93/\83A\83E\83g"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_L\83\8a\83X\83g"
+
+#: lib/Turba.php:582
+msgid "_My Address Books"
+msgstr "_M\8e\84\82Ì\83A\83h\83\8c\83X\92 "
+
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "_N\90V\8bK\98A\97\8d\90æ"
+
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "_P\88ó\8dü"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_R\83\8a\83X\83g\82©\82ç\8dí\8f\9c"
+
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "_S\8c\9f\8dõ"
+
+#: contact.php:79
+msgid "_View"
+msgstr "_V\95\\8e¦"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "\8f¸\8f\87"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "contact"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "contacts.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "\8d~\8f\87"
+
+#: config/attributes.php.dist:377
+msgid "female"
+msgstr "\8f\97\90«"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "in %s"
+
+#: config/attributes.php.dist:377
+msgid "male"
+msgstr "\92j\90«"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "\82»\82Ì\82Ü\82Ü\95\\8e¦"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "\82È\82µ"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "\98A\97\8d\90æ\82Ö"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "\91I\91ð\82³\82ê\82½\83A\83h\83\8c\83X\92 \82Ö"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/ko_KR.po b/turba/po/ko_KR.po
new file mode 100644 (file)
index 0000000..3919441
--- /dev/null
@@ -0,0 +1,1055 @@
+# Korean translations for horde package
+# horde ÆÐŰÁö¿¡ ´ëÇÑ Çѱ¹¾î ¹ø¿ª¹®.
+# Copyright 2005-2009 The Horde Project
+# This file is distributed under the same license as the horde package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.0-cvs\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2005-02-10 02:08+0100\n"
+"PO-Revision-Date: 2001-11-10 02:40+0900\n"
+"Last-Translator: Jinhyok Heo <novembre@ournature.org>\n"
+"Language-Team: i18n@lists.horde.org\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=euc-kr\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: config/prefs.php.dist:111
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "À̸§ ¼º(¿¹: John Doe)"
+
+#: config/prefs.php.dist:110
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "¼º, À̸§(¿¹: Doe, John)"
+
+#: add.php:96
+msgid "%s added."
+msgstr "%s Ãß°¡µÊ."
+
+#: data.php:256
+msgid "%s file successfully imported"
+msgstr "%s ÆÄÀÏÀ» ¼º°øÀûÀ¸·Î °¡Á®¿Ô½À´Ï´Ù."
+
+#: templates/browse/footer.inc:9
+msgid "%s to %s of %s"
+msgstr "%s ~ %s, Àüü %s °³"
+
+#: browse.php:146
+msgid "'%s' was not copied because it is a list."
+msgstr "'%s'´Â ¸®½ºÆ®À̹ǷΠº¹»çµÇÁö ¾ÊÀ½"
+
+#: browse.php:144
+msgid "'%s' was not moved because it is a list."
+msgstr "'%s'´Â ¸®½ºÆ®À̹ǷΠ¿Å°ÜÁöÁö ¾ÊÀ½"
+
+#: lib/Block/minisearch.php:45
+msgid "A browser that supports iFrames is required"
+msgstr "iFrameÀ» Áö¿øÇϴ ºê¶ó¿ìÁ®°¡ ÇÊ¿äÇÕ´Ï´Ù"
+
+#: config/prefs.php.dist:132
+msgid "Above search form"
+msgstr ""
+
+#: templates/browse/search.inc:65
+msgid "Ad_vanced Search"
+msgstr "_v°í±Þ °Ë»ö"
+
+#: add.php:61
+msgid "Add"
+msgstr "Ãß°¡"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Ä®·³ Ãß°¡"
+
+#: templates/browse/actions.inc:33
+msgid "Add to"
+msgstr "Ãß°¡"
+
+#: browse.php:30 config/prefs.php.dist:99
+msgid "Address Book Listing"
+msgstr "ÁÖ¼Ò·Ï ¸®½ºÆ®"
+
+#: add.php:95
+msgid "Address book entry"
+msgstr "ÁÖ¼Ò·Ï ÀÔ·Â"
+
+#: lib/Driver.php:496
+msgid "Address book is read-only."
+msgstr "ÁÖ¼Ò·ÏÀº Àбâ Àü¿ëÀÔ´Ï´Ù."
+
+#: data.php:236
+msgid "Address book successfully purged."
+msgstr "ÁÖ¼Ò·ÏÀÌ ¼º°øÀûÀ¸·Î ºñ¿öÁü"
+
+#: search.php:94 templates/browse/search.inc:65
+#: templates/browse/search.inc:113
+msgid "Advanced Search"
+msgstr "°í±Þ °Ë»ö"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "º°¸í"
+
+#: templates/browse/footerAlpha.inc:10 templates/browse/footerAlpha.inc:13
+msgid "All"
+msgstr "¸ðµÎ ¼±ÅÃ"
+
+#: lib/api.php:372
+msgid "Already Exists"
+msgstr "À̹̠Á¸ÀçÇÔ"
+
+#: templates/browse/javascript.inc:79
+msgid "Are you sure that you want to delete %s?"
+msgstr "%¸¦ Á¤¸» Áö¿ì°Ú½À´Ï±î?"
+
+#: templates/browse/javascript.inc:53
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "¼±ÅÃÇÑ °ÍµéÀ» Á¤¸» Áö¿ì°Ú½À´Ï±î?"
+
+#: config/prefs.php.dist:70
+msgid "Ascending"
+msgstr "¿À¸§Â÷¼ø"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Available Columns:"
+msgstr "°¡´ÉÇÑ Ç׸ñ:"
+
+#: templates/browse/actions.inc:55
+msgid "Ba_ck to %s"
+msgstr "_c%s·Î µ¹¾Æ°¡±â"
+
+#: templates/browse/actions.inc:55
+msgid "Back to %s"
+msgstr "%s·Î µ¹¾Æ°¡±â"
+
+#: templates/browse/search.inc:116
+msgid "Basi_c Search"
+msgstr "_c±âº» °Ë»ö"
+
+#: search.php:91 templates/browse/search.inc:62
+#: templates/browse/search.inc:116
+msgid "Basic Search"
+msgstr "±âº» °Ë»ö"
+
+#: config/prefs.php.dist:131
+msgid "Below search form"
+msgstr ""
+
+#: lib/Driver/ldap.php:82 lib/Driver/ldap.php:85
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr ""
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "»ýÀÏ"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr ""
+
+#: data.php:28
+msgid "CSV"
+msgstr "CSV"
+
+#: templates/browse/actions.inc:59
+msgid "C_lear Search"
+msgstr "_l°Ë»öÇ׸ñ ÃʱâÈ­"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "¼±ÅÃ"
+
+#: config/prefs.php.dist:29
+msgid ""
+"Choose a default directory for your personal addressbook, contact lists, and "
+"searches."
+msgstr "±âº» µð·ºÅ丮 ¼±ÅÃ"
+
+#: add.php:53
+msgid "Choose an address book"
+msgstr "ÁÖ¼Ò·Ï ¼±ÅÃ"
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose the order of the columns to display in the address list."
+msgstr "ÁÖ¼Ò ¸ñ·ÏÀÇ Ä®·³ Ç¥½Ã ¼ø¼­ ¼±ÅÃ"
+
+#: templates/browse/actions.inc:59
+msgid "Clear Search"
+msgstr "°Ë»öÇ׸ñ ÃʱâÈ­"
+
+#: config/prefs.php.dist:10
+msgid "Column Options"
+msgstr "Ä÷³ ¿É¼Ç"
+
+#: templates/data/import.inc:18 templates/data/export.inc:16
+msgid "Comma separated values"
+msgstr "ÄÞ¸¶·Î ±¸ºÐµÈ °ª"
+
+#: templates/data/export.inc:17
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "ÄÞ¸¶·Î ±¸ºÐµÈ °ª(¾Æ¿ô·è ¿ë)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "ȸ»ç"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "ȸ»ç ÁÖ¼Ò"
+
+#: lib/api.php:611 lib/api.php:800
+msgid "Connection failed: %s"
+msgstr "¿¬°á ½ÇÆÐ: %s"
+
+#: lib/Driver/ldap.php:63
+msgid "Connection failure"
+msgstr "¿¬°á ½ÇÆÐ"
+
+#: browse.php:85
+msgid "Contact removed from list."
+msgstr ""
+
+#: browse.php:279
+msgid "Contacts in list: %s"
+msgstr "%s ¸®½ºÆ®ÀÇ ¿¬¶ôó ¸ñ·Ï"
+
+#: browse.php:301
+msgid "Contents of %s"
+msgstr "'%s'ÀÇ ³»¿ë"
+
+#: templates/browse/actions.inc:20
+msgid "Copy"
+msgstr "º¹»ç"
+
+#: lib/ObjectView.php:134
+msgid "Created"
+msgstr "»ý¼º"
+
+#: config/prefs.php.dist:16
+msgid "Default Display"
+msgstr "±âº» Ç¥½Ã"
+
+#: config/prefs.php.dist:121
+msgid ""
+"Default directory for your personal addressbook, contact lists, and searches."
+msgstr "±âº» µð·ºÅ丮 ¼±ÅÃ"
+
+#: config/prefs.php.dist:72
+msgid "Default sorting direction:"
+msgstr "±âº» Á¤·Ä ¹æ¹ý"
+
+#: templates/browse/actions.inc:5 lib/Renderer.php:48
+msgid "Delete"
+msgstr "»èÁ¦"
+
+#: config/prefs.php.dist:35
+msgid "Delete Confirmation"
+msgstr "»èÁ¦ È®ÀÎ"
+
+#: config/prefs.php.dist:36
+msgid "Delete button behaviour"
+msgstr "»èÁ¦ ¹öư µ¿ÀÛ"
+
+#: lib/Driver/ldap.php:274
+msgid "Delete failed: (%s) %s"
+msgstr "»èÁ¦ ½ÇÆÐ: (%s) %s"
+
+#: delete.php:32
+msgid "Deletion failed"
+msgstr "»èÁ¦ ½ÇÆÐ"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "ºÎ¼­"
+
+#: config/prefs.php.dist:71
+msgid "Descending"
+msgstr "³»¸²Â÷¼ø"
+
+#: templates/browse/search.inc:132
+msgid "Directory"
+msgstr "µð·ºÅ丮"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:15 config/prefs.php.dist:21
+#: config/prefs.php.dist:27
+msgid "Display Options"
+msgstr "È­¸é ¼³Á¤"
+
+#: config/prefs.php.dist:149
+msgid "Do you want to confirm deleting entries?"
+msgstr "Áö¿ï ¶§ È®ÀÎÇϱâ"
+
+#: templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "vCard ³»·Á¹Þ±â"
+
+#: templates/browse/column_headers.inc:8 templates/browse/contactrow.inc:33
+#: lib/Renderer.php:46
+msgid "Edit"
+msgstr "¼öÁ¤"
+
+#: templates/browse/contactrow.inc:33
+msgid "Edit '%s'"
+msgstr "¼öÁ¤ '%s'"
+
+#: edit.php:53 edit.php:80
+msgid "Edit entry for %s"
+msgstr "%s Ç׸ñ ¼öÁ¤"
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "À̸ÞÀÏ"
+
+#: edit.php:79
+msgid "Entry for %s updated."
+msgstr "%s ¼öÁ¤µÊ"
+
+#: templates/browse/actions.inc:11 templates/data/export.inc:46
+msgid "Export"
+msgstr "³»º¸³»±â"
+
+#: templates/data/export.inc:7
+msgid "Export Address Book"
+msgstr "ÁÖ¼Ò·Ï ³»º¸³»±â"
+
+#: templates/data/export.inc:26
+msgid "Export only the selected contacts."
+msgstr ""
+
+#: templates/data/export.inc:32
+msgid "Export the following address book completely."
+msgstr ""
+
+#: data.php:110 data.php:228 browse.php:62 browse.php:120 browse.php:135
+#: add.php:72 search.php:51
+msgid "Failed to access the address book: %s"
+msgstr "ÁÖ¼Ò·Ï Á¢±Ù ½ÇÆÐ: %s"
+
+#: browse.php:154
+msgid "Failed to add %s to %s: %s"
+msgstr "%s¸¦ %s¿¡ Ãß°¡ ½ÇÆÐ : %s"
+
+#: browse.php:284
+msgid "Failed to browse list"
+msgstr "¸®½ºÆ® Å½»ö ½ÇÆÐ"
+
+#: browse.php:315
+msgid "Failed to browse the directory"
+msgstr "µð·ºÅ丮 °Ë»ö½ÇÆÐ"
+
+#: lib/Driver/ldap.php:312
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+
+#: browse.php:140
+msgid "Failed to find object to be added: %s"
+msgstr "Ãß°¡ÇÒ ´ë»óÀ» Ã£Áö ¸øÇÔ:%s"
+
+#: data.php:124 search.php:85
+msgid "Failed to search the directory: %s"
+msgstr "µð·ºÅ丮 °Ë»ö ½ÇÆÐ: %s"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "ÆÑ½º"
+
+#: templates/browse/search.inc:72
+msgid "Find"
+msgstr "ã±â"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "À̸§"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr ""
+
+#: templates/browse/search.inc:85
+msgid "From"
+msgstr "À§Ä¡"
+
+#: config/sources.php.dist:532
+msgid "Global Address Book"
+msgstr "Àüü ÁÖ¼Ò·Ï"
+
+#: templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr ""
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "Áý ÁÖ¼Ò"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "µµ½Ã"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "±¹°¡"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "Áý ÀüÈ­"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "¿ìÆí¹øÈ£"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "½Ã/µµ"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "Áý ÁÖ¼Ò"
+
+#: config/sources.php.dist:468
+msgid "IMSP"
+msgstr ""
+
+#: templates/data/import.inc:9
+msgid "Import Address Book, Step %d"
+msgstr "ÁÖ¼Ò·Ï °¡Á®¿À±â, ´Ü°è %d"
+
+#: data.php:274
+msgid "Import/Export Address Books"
+msgstr "ÁÖ¼Ò·Ï °¡Á®¿À±â/³»º¸³»±â"
+
+#: lib/api.php:358 lib/api.php:577
+#, fuzzy
+msgid "Invalid Content-Type"
+msgstr "À߸øµÈ À̸§."
+
+#: lib/api.php:419 lib/api.php:508
+#, fuzzy
+msgid "Invalid ID"
+msgstr "À߸øµÈ À̸§."
+
+#: lib/api.php:191 lib/api.php:316 lib/api.php:415 lib/api.php:504
+#: lib/api.php:556 lib/api.php:871
+msgid "Invalid address book"
+msgstr "À߸øµÈ ÁÖ¼Ò·Ï"
+
+#: lib/api.php:875 lib/api.php:946 lib/api.php:999
+msgid "Invalid email"
+msgstr "À߸øµÈ À̸ÞÀÏ."
+
+#: lib/api.php:883
+#, fuzzy
+msgid "Invalid entry"
+msgstr "À߸øµÈ À̸§."
+
+#: lib/Driver/ldap.php:270
+#, fuzzy
+msgid "Invalid key specified."
+msgstr "¹®ÀÚ¿­ ÀԷ ¿À·ù"
+
+#: lib/api.php:879
+msgid "Invalid name"
+msgstr "À߸øµÈ À̸§."
+
+#: lib/api.php:560
+msgid "Invalid objectId"
+msgstr "À߸øµÈ °´Ã¼ ¾ÆÀ̵ð"
+
+#: lib/Driver/ldap.php:38
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+
+#: lib/ObjectView.php:139
+msgid "Last Modified"
+msgstr "¸¶Áö¸· ¼öÁ¤"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "¼º"
+
+#: templates/browse/column_headers.inc:10
+msgid "List"
+msgstr "¸®½ºÆ®"
+
+#: templates/browse/search.inc:79
+msgid "Matching"
+msgstr "ã´Â ¹®ÀÚ¿­"
+
+#: config/prefs.php.dist:81
+msgid "Maximum number of pages"
+msgstr "ÃÖ´ë ÆäÀÌÁö¼ö"
+
+#: lib/Block/minisearch.php:3
+msgid "Mini Search"
+msgstr "°£´ÜÇÑ °Ë»ö"
+
+#: lib/Driver/ldap.php:306
+msgid "Missing DN in LDAP source configuration."
+msgstr ""
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "ÇÚµåÆù"
+
+#: lib/Driver/ldap.php:335 lib/Driver/ldap.php:352
+msgid "Modify failed: (%s) %s"
+msgstr "¼öÁ¤ ½ÇÇ¥: (%s) %s"
+
+#: lib/api.php:985
+msgid "More than 1 entry found"
+msgstr ""
+
+#: templates/browse/actions.inc:19
+msgid "Move"
+msgstr "À̵¿"
+
+#: templates/prefs/columnselect.inc:247
+msgid "Move left"
+msgstr "¿ÞÂÊÀ¸·Î À̵¿"
+
+#: templates/prefs/columnselect.inc:249
+msgid "Move right"
+msgstr "¿À¸¥ÂÊÀ¸·Î À̵¿"
+
+#: data.php:31 templates/data/import.inc:21
+msgid "Mulberry Address Book"
+msgstr "Mulberry ÁÖ¼Ò·Ï"
+
+#: lib/api.php:905
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "%s ÁÖ¼Ò¸¦ °¡Áø »ç¶÷Àº À̹̠ÀÖÀ¸³ª, %s À̸§À¸·Î Á¸ÀçÇϴ °ÍÀº ¾øÀ½"
+
+#: config/sources.php.dist:174 config/sources.php.dist:304
+msgid "My Addressbook"
+msgstr "³» ÁÖ¼Ò·Ï"
+
+#: config/attributes.php.dist:42
+msgid "Name"
+msgstr "À̸§"
+
+#: config/prefs.php.dist:22
+msgid "Name Format"
+msgstr "À̸§ Çü½Ä"
+
+#: config/sources.php.dist:78
+msgid "Netcenter Member Directory"
+msgstr ""
+
+#: add.php:45 add.php:112 lib/Block/minisearch.php:27
+msgid "New Contact"
+msgstr "»õ·Î¿î ¿¬¶ôó Ãß°¡"
+
+#: templates/browse/actions.inc:37
+msgid "New List"
+msgstr "»õ ¸®½ºÆ®"
+
+#: templates/data/import.inc:42
+msgid "Next"
+msgstr "´ÙÀ½"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "º°¸í"
+
+#: lib/api.php:987 lib/api.php:1036
+#, php-format
+msgid "No %s entry found for %s"
+msgstr ""
+
+#: lib/api.php:955
+msgid "No address books found."
+msgstr "ÁÖ¼Ò·Ï ¾øÀ½"
+
+#: minisearch.php:87
+msgid "No contacts found"
+msgstr "¿¬¶ôó ¾øÀ½"
+
+#: lib/api.php:338
+msgid "No vCard data was found."
+msgstr "vCard Á¤º¸ Ã£Áö ¸øÇÔ"
+
+#: templates/browse/footer.inc:11
+msgid "None"
+msgstr "¼±ÅÃÇÏÁö ¾ÊÀ½"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "ÂüÁ¶"
+
+#: config/prefs.php.dist:89
+msgid "Number of items per page"
+msgstr "ÆäÀÌÁö´ç °á°ú °¹¼ö"
+
+#: lib/api.php:436
+msgid "Object not found"
+msgstr "ãÁö ¸øÇÔ"
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr ""
+
+#: config/prefs.php.dist:34
+msgid "Other Options"
+msgstr "±âŸ ¼³Á¤"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr ""
+
+#: lib/api.php:322 lib/api.php:425 lib/api.php:514 lib/api.php:569
+#: lib/api.php:728 lib/api.php:889
+msgid "Permission Denied"
+msgstr "±ÇÇÑ ¾øÀ½"
+
+#: lib/Driver.php:454
+msgid "Permission denied"
+msgstr "±ÇÇÑ ¾øÀ½"
+
+#: data.php:32 templates/data/import.inc:22
+msgid "Pine Address Book"
+msgstr "Pine ÁÖ¼Ò·Ï"
+
+#: templates/browse/javascript.inc:25
+msgid "Please enter the name of the new list:"
+msgstr "»õ·Î¿î ¸®½ºÆ®ÀÇ À̸§À» ÀÔ·ÂÇϼ¼¿ä:"
+
+#: templates/prefs/columnselect.inc:221
+msgid "Please select a directory:"
+msgstr "µð·ºÅ丮 ¼±ÅÃ:"
+
+#: config/sources.php.dist:384
+msgid "Private Address Book"
+msgstr "°³ÀΠÁÖ¼Ò·Ï"
+
+#: lib/Driver/ldap.php:146
+msgid "Query failed: (%s) %s"
+msgstr "°Ë»ö ½ÇÆÐ: (%s) %s"
+
+#: templates/block/minisearch.inc:43
+msgid "Quick Search"
+msgstr "»¡¸® Ã£±â"
+
+#: lib/Driver/ldap.php:190 lib/Driver/ldap.php:198 lib/Driver/ldap.php:432
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr ""
+
+#: templates/browse/footer.inc:6
+msgid "Records displayed:"
+msgstr "Ç¥½Ã"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Ä®·³ »èÁ¦"
+
+#: templates/browse/actions.inc:5
+msgid "Remove from this list"
+msgstr "¸®½ºÆ®¿¡¼­ Á¦°Å"
+
+#: templates/data/import.inc:26
+msgid ""
+"Replace existing address book with the imported one? <b>Warning: This "
+"deletes all entries in your current address book.</b>"
+msgstr ""
+"°¡Á®¿Â °ÍÀ¸·Î ±âÁ¸ ÁÖ¼Ò·ÏÀ» ¹Ù²Ü±î¿ä? <b>ÁÖÀÇ: À̰ÍÀº ÇöÀç ÁÖ¼Ò·ÏÀÇ ¸ðµç Ç׸ñ"
+"À» Áö¿ó´Ï´Ù.</b>"
+
+#: lib/Driver.php:344
+msgid "Requested object not found."
+msgstr ""
+
+#: add.php:46 templates/browse/search.inc:126
+msgid "Reset to Defaults"
+msgstr "ÃʱâÈ­"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr ""
+
+#: lib/Driver/ldap.php:74
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr ""
+
+#: edit.php:57 add.php:46
+msgid "Save"
+msgstr "ÀúÀå"
+
+#: templates/browse/search.inc:98 templates/browse/search.inc:125
+#: templates/block/minisearch.inc:48 config/prefs.php.dist:100
+msgid "Search"
+msgstr "°Ë»ö"
+
+#: browse.php:264 minisearch.php:66
+msgid "Search Results"
+msgstr "°Ë»ö °á°ú"
+
+#: lib/api.php:805
+msgid "Search failed"
+msgstr "°Ë»ö ½ÇÆÐ"
+
+#: lib/api.php:895 lib/api.php:901 lib/api.php:910 lib/api.php:923
+msgid "Search failed: %s"
+msgstr "°Ë»ö ½ÇÆÐ: %s"
+
+#: config/prefs.php.dist:28
+msgid "Searching Options"
+msgstr "°Ë»ö ¿É¼Ç"
+
+#: templates/block/minisearch.inc:49
+msgid "Searching..."
+msgstr "ã´ÂÁß..."
+
+#: templates/browse/select.inc:9
+msgid "Select Address Book"
+msgstr "ÁÖ¼Ò·Ï ¼±ÅÃ"
+
+#: templates/browse/actions.inc:35
+msgid "Select List"
+msgstr "¸®½ºÆ® ¼±ÅÃ"
+
+#: templates/data/export.inc:37
+msgid "Select the address book to export from:"
+msgstr "³»º¸³¾ ÁÖ¼Ò·Ï ¼±ÅÃ:"
+
+#: templates/data/import.inc:31
+msgid "Select the address book to import to:"
+msgstr "°¡Á®¿Ã ÁÖ¼Ò·Ï ¼±ÅÃ:"
+
+#: templates/data/export.inc:14
+msgid "Select the export format:"
+msgstr "³»º¸³»±â Çü½Ä ¼±ÅÃ"
+
+#: templates/data/import.inc:40
+msgid "Select the file to import:"
+msgstr "ÀÓÆ÷Æ®ÇÒ ÆÄÀÏ ¼±ÅÃ:"
+
+#: templates/data/import.inc:16
+msgid "Select the format of the source file:"
+msgstr "¼Ò½º ÆÄÀÏ Æ÷¸Ë ¼±ÅÃ"
+
+#: config/prefs.php.dist:109
+msgid "Select the format used to display names:"
+msgstr "À̸§ Ç¥½Ã Çü½Ä ¼±ÅÃ:"
+
+#: config/prefs.php.dist:17
+msgid "Select view to display by default."
+msgstr "±âº» Ç¥½Ã ¼±ÅÃ"
+
+#: config/prefs.php.dist:11
+msgid "Select which fields to display in the address lists."
+msgstr "ÁÖ¼Ò ¸®½ºÆ®¿¡ Ç¥½ÃÇÒ Ç׸ñ ¼±ÅÃ"
+
+#: config/prefs.php.dist:23
+msgid "Select which format to display names."
+msgstr "À̸§ Ç¥½Ã Çü½Ä ¼±ÅÃ"
+
+#: templates/prefs/columnselect.inc:243
+msgid "Selected Columns:"
+msgstr "¼±ÅõȠÇ׸ñ"
+
+#: add.php:59
+msgid "Selected address book '%s'."
+msgstr "ÁÖ¼Ò·Ï '%s' ¼±ÅÃ"
+
+#: config/sources.php.dist:239
+msgid "Shared Directory"
+msgstr "°øÀ¯ µð·ºÅ丮"
+
+#: templates/browse/actions.inc:53
+msgid "Sho_w All"
+msgstr "_w¸ðµÎ º¸±â"
+
+#: templates/browse/select.inc:11
+msgid "Show"
+msgstr ""
+
+#: templates/browse/actions.inc:53
+msgid "Show All"
+msgstr "¸ðµÎ º¸±â"
+
+#: templates/browse/actions.inc:52
+msgid "Show Contacts"
+msgstr "¿¬¶ô󠺸±â"
+
+#: templates/browse/actions.inc:51
+msgid "Show Lists"
+msgstr "¸®½ºÆ® º¸±â"
+
+#: templates/browse/actions.inc:52
+msgid "Show _Contacts"
+msgstr "_c¿¬¶ô󠺸±â"
+
+#: templates/browse/actions.inc:51
+msgid "Show _Lists"
+msgstr "_l¸®½ºÆ® º¸±â"
+
+#: templates/browse/column_headers.inc:12
+#: templates/browse/column_headers.inc:17
+msgid "Sort Direction"
+msgstr "Á¤·Ä ¹æ¹ý"
+
+#: lib/api.php:154
+msgid "Sources"
+msgstr "¼Ò½º"
+
+#: config/prefs.php.dist:130
+msgid "Specify where you want advanced search results to appear."
+msgstr ""
+
+#: browse.php:156
+msgid "Successfully added %s to %s"
+msgstr "%s°¡ %s¿¡ ¼º°øÀûÀ¸·Î Ãß°¡µÊ"
+
+#: data.php:29
+msgid "TSV"
+msgstr ""
+
+#: templates/data/import.inc:19 templates/data/export.inc:18
+msgid "Tab separated values"
+msgstr "ÅÇÀ¸·Î ±¸ºÐµÈ °ª"
+
+#: data.php:234
+msgid "The address book could not be purged: %s"
+msgstr "ÁÖ¼Ò·ÏÀ» ºñ¿ï ¼ö ¾ø½À´Ï´Ù: %s"
+
+#: edit.php:24 vcard.php:22 display.php:23
+msgid "The contact you requested does not exist."
+msgstr "¿äûÇÑ ¿¬¶ôó°¡ ¾ø½À´Ï´Ù."
+
+#: browse.php:58
+msgid "There are no browseable address books."
+msgstr "Ž»ö°¡´ÉÇÑ ÁÖ¼Ò·ÏÀÌ ¾ø½À´Ï´Ù."
+
+#: add.php:38
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"»õ·Î¿î Ç׸ñÀ» Ãß°¡ÇÒ ¼ö ÀÖµµ·Ï ¼³Á¤µÈ ÁÖ¼Ò·ÏÀÌ ¾ø½À´Ï´Ù. ¸¸¾à À̰ÍÀÌ ¿À·ù¶ó"
+"°í »ý°¢ÇϽŴٸé, °ü¸®ÀÚ¿¡°Ô ¹®ÀÇÇϽñ⠹ٶø´Ï´Ù."
+
+#: add.php:108
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr "Ãß°¡Çϴµ¥ ¿À·ù°¡ ¹ß»ýÇß½À´Ï´Ù. °ü¸®ÀÚ¿¡°Ô µµ¿òÀ» ¿äûÇϽñ⠹ٶø´Ï´Ù."
+
+#: browse.php:212
+msgid "There was an error creating a new list."
+msgstr "»õ·Î¿î ¸®½ºÆ® ¸¸µé±â ¿À·ù"
+
+#: browse.php:163
+msgid "There was an error deleting %s from the source address book."
+msgstr "»èÁ¦ ¿À·ù: %s"
+
+#: delete.php:31
+msgid "There was an error deleting this contact: %s"
+msgstr "»èÁ¦ ¿À·ù : %s"
+
+#: browse.php:93
+msgid "There was an error deleting this object."
+msgstr "»èÁ¦ ¿À·ù"
+
+#: browse.php:294
+#, fuzzy
+msgid "There was an error displaying the select List"
+msgstr ""
+"#-#-#-#-#  compendium.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"#-#-#-#-#  compendium.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"#-#-#-#-#  compendium.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"#-#-#-#-#  compendium.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"#-#-#-#-#  compendium.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"#-#-#-#-#  compendium.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"¸Þ¼¼Áö Àü¼Û ¿À·ù\n"
+"#-#-#-#-#  ko_KR.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"¸Þ¼¼Áö º¸³»±â ¿À·ù\n"
+"#-#-#-#-#  ko_KR.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"¸Þ¼¼Áö º¸³»±â ¿À·ù\n"
+"#-#-#-#-#  ko_KR.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"¸Þ¼¼Áö º¸³»±â ¿À·ù\n"
+"#-#-#-#-#  ko_KR.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"¸Þ¼¼Áö º¸³»±â ¿À·ù\n"
+"#-#-#-#-#  ko_KR.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"¸Þ¼¼Áö º¸³»±â ¿À·ù\n"
+"#-#-#-#-#  ko_KR.po (IMP 4.0-cvs)  #-#-#-#-#\n"
+"¸Þ¼¼Áö º¸³»±â ¿À·ù"
+
+#: data.php:249
+msgid "There was an error importing the data: %s"
+msgstr "µ¥ÀÌŸ °¡Á®¿À±â ¿À·ù: %s"
+
+#: lib/api.php:334
+msgid "There was an error importing the iCalendar data."
+msgstr "iCalendar µ¥ÀÌÅÍ °¡Á®¿À±â ¿À·ù"
+
+#: browse.php:83
+msgid "There was an error removing this object."
+msgstr "Á¦°Å ¿À·ù"
+
+#: edit.php:84
+msgid "There was an error updating this entry: %s"
+msgstr "¼öÁ¤ ¿À·ù: %s"
+
+#: data.php:151
+msgid "There were no addresses to export."
+msgstr "°¡Á®¿Ã ¼ö Àִ ÁÖ¼Ò°¡ ¾ø½À´Ï´Ù."
+
+#: lib/Driver.php:404 lib/Driver.php:445
+msgid "This address book is read-only"
+msgstr "ÀÌ ÁÖ¼Ò·ÏÀº Àбâ Àü¿ëÀÔ´Ï´Ù."
+
+#: data.php:211
+msgid "This file format is not supported."
+msgstr ""
+
+#: lib/api.php:914 lib/api.php:927
+msgid "This person already has a %s entry in the address book"
+msgstr "'%s'´Â À̹̠ÁÖ¼Ò·Ï¿¡ µî·ÏµÇ¾î ÀÖ½À´Ï´Ù."
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "Á¦¸ñ"
+
+#: lib/Driver.php:825
+msgid "Unable to load the definition of %s."
+msgstr "%s Á¤ÀǸ¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù."
+
+#: edit.php:57
+msgid "Undo Changes"
+msgstr "º¯°æ»çÇ× µÇµ¹¸®±â"
+
+#: lib/api.php:466
+msgid "Unsupported Content-Type."
+msgstr ""
+
+#: config/sources.php.dist:139
+msgid "Verisign Directory"
+msgstr "Verisign µð·ºÅ丮"
+
+#: templates/browse/contactrow.inc:27
+msgid "View '%s'"
+msgstr "'%s' º¸±â"
+
+#: minisearch.php:82
+msgid "View Contact"
+msgstr "¿¬¶ô󠺸±â"
+
+#: config/prefs.php.dist:98
+msgid "View to display by default:"
+msgstr "ù ±âº» È­¸é"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr ""
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "Á÷Àå ÁÖ¼Ò"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "Á÷Àå µµ½Ã"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "Á÷Àå ±¹°¡"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "Á÷Àå ÀüÈ­"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "Á÷Àå ¿ìÆí¹øÈ£"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "Á÷Àå ½Ã/µµ"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "Á÷Àå ÁÖ¼Ò"
+
+#: templates/browse/javascript.inc:25
+msgid "You are creating a distribution list."
+msgstr "»õ·Î¿î ¸®½ºÆ®¸¦ ¸¸µì´Ï´Ù."
+
+#: edit.php:44 display.php:48
+msgid "You do not have permission to view this contact."
+msgstr ""
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr ""
+
+#: templates/browse/javascript.inc:41
+msgid "You must select a target address book."
+msgstr "ÁÖ¼Ò·ÏÀ» ¼±ÅÃÇØ¾ß ÇÕ´Ï´Ù."
+
+#: templates/browse/javascript.inc:18
+msgid "You must select a target list."
+msgstr "¸®½ºÆ®¸¦ ¼±ÅÃÇØ¾ß ÇÕ´Ï´Ù."
+
+#: templates/browse/javascript.inc:58
+msgid "You must select at least one entry first."
+msgstr "¿¬¶ô󸦠¸ÕÀú ¼±ÅÃÇϼ¼¿ä."
+
+#: edit.php:48
+msgid "You only have permission to view this contact."
+msgstr "ÀÌ ¸ñ·ÏÀ» º¼ ¼ö Àִ ±ÇÇѸ¸ ÀÖ½À´Ï´Ù."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[°ª ¾øÀ½]"
+
+#: lib/Turba.php:275
+msgid "_Add"
+msgstr "_AÃß°¡"
+
+#: lib/Turba.php:274
+msgid "_Browse"
+msgstr "_BŽ»ö"
+
+#: templates/browse/actions.inc:5
+msgid "_Delete"
+msgstr "_D»èÁ¦"
+
+#: lib/Turba.php:280
+msgid "_Import/Export"
+msgstr "_I°¡Á®¿À±â/³»º¸³»±â"
+
+#: templates/browse/actions.inc:5
+msgid "_Remove from this list"
+msgstr "_RÀÌ ¸®½ºÆ®¿¡¼­ Áö¿ì±â"
+
+#: lib/Turba.php:276
+msgid "_Search"
+msgstr "_S°Ë»ö"
+
+#: vcard.php:46
+msgid "contact.vcf"
+msgstr ""
+
+#: data.php:172 data.php:177 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr ""
+
+#: data.php:182
+msgid "contacts.tsv"
+msgstr ""
+
+#: templates/browse/actions.inc:22
+msgid "to Selected Address Book"
+msgstr "¼±ÅõȠÁÖ¼Ò·ÏÀ¸·Î"
+
+#: data.php:30 templates/browse/column_headers.inc:9
+#: templates/data/import.inc:20 templates/data/export.inc:20
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/lt_LT.po b/turba/po/lt_LT.po
new file mode 100644 (file)
index 0000000..e9bf63a
--- /dev/null
@@ -0,0 +1,1602 @@
+# Lithuanian translations for Turba package.
+# Copyright 2007-2009 The Horde Project
+# This file is distributed under the same license as the Turba package.
+# Vilius Sumskas <vilius@lnk.lt>, 2003, 2004, 2007.
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.2-cvs\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2007-11-23 16:32+0200\n"
+"PO-Revision-Date: 2007-11-23 16:36+0200\n"
+"Last-Translator: Vilius Sumskas <vilius@lnk.lt>\n"
+"Language-Team: Lithuanian <vilius@lnk.lt>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-13\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && (n%"
+"100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Sukurti IMSP adresø knygelæ"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " Iðtrinti IMSP adresø knygelæ"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" jau egzistuoja, todël jos ákelti nepavyks."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" atnaujintas, taèiau nepavyko nusiøsti failo: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" atnaujintas."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" nebuvo nukopijuotas, kadangi tai yra sàraðas."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" nebuvo perkeltas, kadangi tai yra sàraðas."
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Vardas Pavardë\" (pvz. Jonas Jonaitis)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Vardas, Pavardë\" (pvz. Jonas, Jonaitis)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s pridëtas."
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "%s failas sëkmingai ákeltas."
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "nuo %s iki %s ið %s"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s adresø knygelë"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Jûsø narðyklë nepalaiko iFrames objektø"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Neturite teisiø á %s."
+
+#: lib/Forms/AddContact.php:25 templates/browse/actions.inc:30
+msgid "Add"
+msgstr "Sukurti"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Sukurti kontaktà"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Sukurti adresø knygelæ"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Pridëti stulpelá"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Pridëti failà"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Áraðyti á"
+
+#: lib/Driver.php:1463
+msgid "Adding contacts is not available."
+msgstr "Sukurti kontaktø negalima."
+
+#: templates/addressbooks.inc:105
+msgid "Address Book"
+msgstr "Adresø knygelë"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Adresø perþiûra"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Adresø knygelës"
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "Adresø knygelë iðvalyta sëkmingai."
+
+#: templates/addressbooks.inc:80
+msgid "Address book to delete "
+msgstr "Trinama adresø knygelë "
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Adresø knygelës, kurios nebus rodomos:"
+
+#: search.php:161 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Detali paieðka"
+
+#: config/attributes.php.dist:77
+msgid "Alias"
+msgstr "Pravardë"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Viskà"
+
+#: lib/api.php:725
+msgid "Already Exists"
+msgstr "Jau egzistuoja"
+
+#: config/attributes.php.dist:95
+msgid "Anniversary"
+msgstr "Jubiliejus"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Ar tikrai norite iðtrinti %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Ar tikrai norite iðtrinti pasirinktus kontaktus?"
+
+#: templates/addressbooks.inc:45
+msgid "Are you sure you want to delete the addressbook: "
+msgstr "Ar tikrai norite iðtrinti adresø knygelæ: "
+
+#: config/attributes.php.dist:368
+msgid "Assistant"
+msgstr "Asistentas"
+
+#: search.php:158 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Paprastoji paieðka"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Prisijungti nepavyko: (%s) %s"
+
+#: config/attributes.php.dist:89
+msgid "Birthday"
+msgstr "Gimtadienis"
+
+#: lib/Driver.php:524
+#, php-format
+msgid "Birthday of %s"
+msgstr "%s gimtadienis"
+
+#: lib/api.php:1255
+msgid "Birthdays"
+msgstr "Gimtadieniai"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Vardo nëra"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Abu"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Perþiûrëti"
+
+#: config/attributes.php.dist:280
+msgid "Business Category"
+msgstr "Darbo kategorija"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Grupës negalima priskirti á save."
+
+#: lib/Driver/kolab.php:620
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Nepavyko iðtrinti visø adresø knygelës %s áraðø"
+
+#: config/attributes.php.dist:342
+msgid "Category"
+msgstr "Kategorija"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Pakeisti %s rûðiavimà á %s"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Paþymëti visus/nieko"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "P_aþymëti visus/nieko"
+
+#: config/attributes.php.dist:107
+msgid "Children"
+msgstr "Vaikai"
+
+#: templates/addressbooks.inc:60
+msgid "Choose a name"
+msgstr "Pasirinkite vardà"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Pasirinkite adresø knygelæ"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "Pasirinkite adresø knygelæ:"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Pasirinkite kurias adresø knygeles ir kokia tvarka norësite matyti:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Pasirinkite adresø knygeles, kurias naudosite."
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Pasirinkite kuriuos stulpelius ir kokia tvarka norësite matyti:"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Uþdaryti"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Iðvalyti paieðkà"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Stulpeliø nustatymai"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Stulpeliai, kurie nebus rodomi:"
+
+#: templates/data/export.inc:12 templates/data/import.inc:13
+msgid "Comma separated values"
+msgstr "Kableliais atskirtos reikðmës"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Kableliais atskirtos reikðmës (Microsoft Outlook)"
+
+#: config/sources.php.dist:228 config/sources.php.dist:901
+msgid "Communications"
+msgstr "Ryðiai"
+
+#: config/attributes.php.dist:286
+msgid "Company"
+msgstr "Kompanija"
+
+#: config/attributes.php.dist:215
+msgid "Company Address"
+msgstr "Kompanijos adresas"
+
+#: lib/api.php:394 lib/api.php:439 lib/api.php:490 lib/api.php:525
+#: lib/api.php:574 lib/api.php:620 lib/api.php:661 lib/api.php:778
+#: lib/api.php:865 lib/api.php:923 lib/api.php:1012 lib/api.php:1231
+#: lib/api.php:1289 lib/api.php:1371 scripts/import_squirrelmail_abook.php:112
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Prisijungti nepavyko: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Prisijungti nepavyko"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Kontaktø paieðka"
+
+#: config/sources.php.dist:833
+msgid "Contacts"
+msgstr "Kontaktai"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Rodomi kontaktai:"
+
+#: lib/Views/Browse.php:336
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Adresai sàraðe: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopijuoti"
+
+#: templates/addressbooks.inc:69
+msgid "Create"
+msgstr "Sukurti"
+
+#: templates/addressbooks.inc:56
+msgid "Create Address Book"
+msgstr "Sukurti adresø knygelæ"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Sukurti naujà kontaktø sàraðà:"
+
+#: lib/Views/Contact.php:74
+msgid "Created"
+msgstr "Sukurta"
+
+#: contact.php:86
+msgid "De_lete"
+msgstr "Iðtrinti"
+
+#: lib/Views/DeleteContact.php:58 templates/addressbooks.inc:94
+#: templates/browse/actions.inc:3
+msgid "Delete"
+msgstr "Iðtrinti"
+
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Iðtrinti %s"
+
+#: templates/addressbooks.inc:76
+msgid "Delete Address Book"
+msgstr "Iðtrinti adresø knygelæ"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Iðtrinti nepavyko: (%s) %s"
+
+#: lib/Driver.php:1471
+msgid "Deleting contacts is not available."
+msgstr "Iðtrinti kontaktø negalima."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Iðtrinti nepavyko"
+
+#: config/attributes.php.dist:292
+msgid "Department"
+msgstr "Departamentas"
+
+#: templates/addressbooks.inc:138
+msgid "Description"
+msgstr "Apraðymas"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Katalogas"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Rodyti"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Vaizdavimo nustatymai"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Atsisiøsti"
+
+#: templates/browse/row.inc:13
+msgid "Download vCard"
+msgstr "Atsisiøsti vCard"
+
+#: templates/addressbooks.inc:123 templates/browse/row.inc:21
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "Redaguoti"
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Redaguoti \"%s\""
+
+#: lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Redaguoti %s"
+
+#: templates/addressbooks.inc:100
+msgid "Edit Address Books"
+msgstr "Keisti adresø knygeles"
+
+#: config/attributes.php.dist:229
+msgid "Email"
+msgstr "El. paðto adresas"
+
+#: config/attributes.php.dist:235
+msgid "Emails"
+msgstr "El. paðto adresai"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Klaida á sàraðà átraukiant %d kontaktà(us)."
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Klaida á sàraðà átraukiant %d ið %d kontaktø."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Klaida trinant %d kontaktà(us)."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Klaida trinant %d ið %d kontaktø."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Klaida ið sàraðo trinant %d kontaktà(us)."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Klaida ið sàraðo trinant %d ið %d kontaktø."
+
+#: lib/api.php:531
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Klaida ieðkant adresø knygelëje:: %s."
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Iðkelti"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Adresø knygelës iðkëlimas"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Iðkelti tik pasirinktus adresus."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Iðkelti visà adresø knygelæ."
+
+#: data.php:143 data.php:242 data.php:320 search.php:86 add.php:42
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Nepavyko pasiekti nurodytos adresø knygelës: %s."
+
+#: lib/Views/Browse.php:208
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Pridëti %s prie %s nepavyko: %s"
+
+#: lib/Views/Browse.php:342
+msgid "Failed to browse list"
+msgstr "Nepavyko perþiûrëti sàraðo"
+
+#: lib/Views/Browse.php:369
+msgid "Failed to browse the directory"
+msgstr "Perþiûra nepavyko"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Nepavyko pakeisti vardo: (%s) %s; senas DN = %s, naujas DN = %s, ðaknis = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Nepavyko rasti objekto pridëjimui: %s"
+
+#: search.php:152
+msgid "Failed to search the address book"
+msgstr "Paieðka adresø knygelëje nepavyko"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Paieðka nepavyko kataloge: %s"
+
+#: config/sources.php.dist:532
+msgid "Favourite Recipients"
+msgstr "Daþnai naudojami adresai"
+
+#: config/attributes.php.dist:256
+msgid "Fax"
+msgstr "Faksas"
+
+#: lib/Forms/Contact.php:40
+msgid "Files"
+msgstr "Failai"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Rasti"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+msgid "Finish"
+msgstr "Baigti"
+
+#: config/attributes.php.dist:47
+msgid "First Name"
+msgstr "Vardas"
+
+#: config/attributes.php.dist:318
+msgid "Freebusy URL"
+msgstr "Uþimtumo informacijos URL"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Ið"
+
+#: config/attributes.php.dist:374
+msgid "Gender"
+msgstr "Lytis"
+
+#: config/sources.php.dist:758
+msgid "Global Address Book"
+msgstr "Globali adresø knygelë"
+
+#: templates/browse/row.inc:39
+msgid "Group"
+msgstr "Grupë"
+
+#: config/attributes.php.dist:115
+msgid "Home Address"
+msgstr "Namø adresas"
+
+#: config/attributes.php.dist:133
+msgid "Home City"
+msgstr "Namø miestas"
+
+#: config/attributes.php.dist:151
+msgid "Home Country"
+msgstr "Namø valstybë"
+
+#: config/attributes.php.dist:241
+msgid "Home Phone"
+msgstr "Namø tel."
+
+#: config/attributes.php.dist:127
+msgid "Home Post Office Box"
+msgstr "Namø paðto dëþutë"
+
+#: config/attributes.php.dist:145
+msgid "Home Postal Code"
+msgstr "Namø paðto kodas"
+
+#: config/attributes.php.dist:139
+msgid "Home State/Province"
+msgstr "Namø rajonas/provincija"
+
+#: config/attributes.php.dist:121
+msgid "Home Street Address"
+msgstr "Namø gatvës adresas"
+
+#: config/sources.php.dist:649
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Adresø knygelës ákëlimas, %d-as þingsnis"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Ákelti/Iðkelti adresø knygeles"
+
+#: config/attributes.php.dist:350
+msgid "Initials"
+msgstr "Inicialai"
+
+#: config/attributes.php.dist:356
+msgid "Instant Messenger"
+msgstr "Greitosios Áinutës"
+
+#: lib/api.php:773 lib/api.php:860
+msgid "Invalid ID"
+msgstr "Neteisingas ID"
+
+#: lib/api.php:306 lib/api.php:520 lib/api.php:569 lib/api.php:615
+#: lib/api.php:656 lib/api.php:769 lib/api.php:856 lib/api.php:913
+#: lib/api.php:1354 scripts/import_squirrelmail_abook.php:105
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Neteisinga adresø knygelë: %s"
+
+#: lib/api.php:1358 lib/api.php:1432 lib/api.php:1489
+msgid "Invalid email"
+msgstr "Neteisingas el.paðto adresas"
+
+#: lib/api.php:1366
+msgid "Invalid entry"
+msgstr "Neteisingas áraðas"
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "Nurodytas neteisingas raktas."
+
+#: lib/api.php:1362
+msgid "Invalid name"
+msgstr "Neteisingas vardas"
+
+#: lib/api.php:917
+msgid "Invalid objectId"
+msgstr "Neteisingas objekto ID"
+
+#: config/attributes.php.dist:268
+msgid "Job Title"
+msgstr "Pareigos"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Iðsaugomas raktas turi bûti UID o ne %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"Reikalingas LDAP palaikymas, taèiau LDAP modulis nerastas arba neákrautas."
+
+#: data.php:65 templates/data/export.inc:16 templates/data/import.inc:18
+msgid "LDIF Address Book"
+msgstr "LDIF adresø knygelë"
+
+#: config/attributes.php.dist:380
+msgid "Language"
+msgstr "Kalba"
+
+#: lib/Views/Contact.php:80
+msgid "Last Modified"
+msgstr "Paskutiná kartà redaguota"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Pavardë"
+
+#: config/attributes.php.dist:386
+msgid "Latitude"
+msgstr "Platuma"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Sàraðas"
+
+#: config/sources.php.dist:223 config/sources.php.dist:897
+msgid "Location"
+msgstr "Vieta"
+
+#: config/attributes.php.dist:391
+msgid "Longitude"
+msgstr "Ilguma"
+
+#: config/attributes.php.dist:362
+msgid "Manager"
+msgstr "Vadovas"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Atitinka"
+
+#: lib/api.php:281
+msgid "Maximum Number of Contacts"
+msgstr "Maksimalus kontaktø skaièius"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Maksimalus puslapiø skaièius"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Meniu sàraðas"
+
+#: config/attributes.php.dist:59
+msgid "Middle Names"
+msgstr "Viduriniai vardai"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "LDAP konfigûracijoje nëra DN parametro."
+
+#: config/attributes.php.dist:251
+msgid "Mobile Phone"
+msgstr "Mobilus tel."
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Redaguoti nepavyko: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Daugiau nustatymø..."
+
+#: lib/api.php:1474
+msgid "More than 1 entry found"
+msgstr "Rastas daugiau nei vienas áraðas"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Perkelti"
+
+#: templates/prefs/columnselect.inc:248
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Perkelti kairën"
+
+#: templates/prefs/columnselect.inc:250
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Perkelti deðinën"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry adresø knygelë"
+
+#: lib/api.php:1390
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Adresø knygelëje yra keletas asmenø su adresu [%s], bet nei vieno vardu [%s]"
+
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "Mano adresø knygelë"
+
+#: addressbooks.php:174
+msgid "My Address Books"
+msgstr "Mano adresø knygelës"
+
+#: templates/addressbooks.inc:130 config/attributes.php.dist:41
+msgid "Name"
+msgstr "Vardas"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Vardo formatas"
+
+#: config/attributes.php.dist:65
+msgid "Name Prefixes"
+msgstr "Vardo prieðdëliai"
+
+#: config/attributes.php.dist:71
+msgid "Name Suffixes"
+msgstr "Vardo priesagos"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Pavadinimas:"
+
+#: add.php:70 lib/Block/tree_menu.php:28
+msgid "New Contact"
+msgstr "Naujas kontaktas"
+
+#: lib/Forms/EditContact.php:112 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:174 templates/data/import.inc:46
+msgid "Next"
+msgstr "Sekantis"
+
+#: config/attributes.php.dist:83
+msgid "Nickname"
+msgstr "Slapyvardis"
+
+#: lib/api.php:1477 lib/api.php:1526
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Áraðas %s nerastas %s"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "Adresø knygeliø nëra. Ákëlimas ir iðkëlimas yra iðjungti."
+
+#: search.php:72
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Adresø knygeliø nëra. Paieðka yra iðjungta."
+
+#: lib/api.php:1441
+msgid "No address books found."
+msgstr "Adresø knygeliø nëra."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Tokiø kontaktø nëra"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Kontaktø, kurie atitinka paieðkos kriterijø, nëra."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Atitinkanèiø kontaktø nëra"
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Daþnai naudojamiems adresams nëra posistemës."
+
+#: lib/api.php:682 lib/api.php:949
+msgid "No vCard data was found."
+msgstr "vCard duomenø nëra."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Nieko"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "Nerasta"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Nerasta"
+
+#: config/attributes.php.dist:306
+msgid "Notes"
+msgstr "Pastabos"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Objektø skaièius puslapyje"
+
+#: lib/api.php:789 lib/api.php:929
+msgid "Object not found"
+msgstr "Objektas nerastas"
+
+#: config/attributes.php.dist:274
+msgid "Occupation"
+msgstr "Profesija"
+
+#: config/attributes.php.dist:298
+msgid "Office"
+msgstr "Ofisas"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Kai iðsaugosite nustatymus ðiame puslapyje, adresø knygelë bus iðtrinta. "
+"Jeigu to nenorite, privalote pasirinkti punktà \"Nieko\"."
+
+#: lib/api.php:957
+msgid "Only one vcard supported."
+msgstr "Galima tik viena vcard kortelë."
+
+#: config/sources.php.dist:230 config/sources.php.dist:903
+msgid "Organization"
+msgstr "Organizacija"
+
+#: config/sources.php.dist:231 config/sources.php.dist:905
+msgid "Other"
+msgstr "Kita"
+
+#: config/attributes.php.dist:324
+msgid "PGP Public Key"
+msgstr "PGP vieðasis raktas"
+
+#: config/attributes.php.dist:261
+msgid "Pager"
+msgstr "Peidþeris"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Visiðkai iðtrinti ðá kontaktà?"
+
+#: deletefile.php:36 lib/Driver.php:676 lib/api.php:665 lib/api.php:782
+#: lib/api.php:869 lib/api.php:1159 lib/api.php:1375 lib/Driver/sql.php:481
+msgid "Permission denied"
+msgstr "Nëra teisiø"
+
+#: templates/addressbooks.inc:120
+msgid "Permissions"
+msgstr "Teisës"
+
+#: config/sources.php.dist:221 config/sources.php.dist:893
+msgid "Personal"
+msgstr "Asmeniniai"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine adresø knygelë"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Áveskite naujà kontaktø sàraðo pavadinimà:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+msgid "Previous"
+msgstr "Ankstesnis"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Uþklausa nepavyko: (%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Skaitymas nepavyko: (%s) %s"
+
+#: lib/Driver.php:1455
+msgid "Reading contacts is not available."
+msgstr "Kontaktø skaitymas iðjungtas."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Iðtrinti adresø knygelæ"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Panaikinti stulpelá"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Paðalinti ið ðio sàraðo"
+
+#: lib/Driver.php:1493
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Dabartinë adresø knygelës saugojimo posistemë neleidþia iðtrinti vartotojo "
+"duomenø."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Pakeisti visus áraðus adresø knygelëje á ákeliamus? <strong>Dëmesio: taip "
+"iðtrinsite visus áraðus dabartinëje adresø knygelëje.</strong>"
+
+#: lib/Driver.php:573
+msgid "Requested object not found."
+msgstr "Reikalingas objektas nerastas."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Atstatyti"
+
+#: config/attributes.php.dist:330
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME vieðasis sertifikatas"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS nepavyko: (%s) %s"
+
+#: lib/Forms/EditContact.php:26 templates/addressbooks.inc:147
+msgid "Save"
+msgstr "Iðsaugoti"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Iðsaugoti paieðkos rezultatus kaip virtualià adresø knygelæ?"
+
+#: lib/Driver.php:1481
+msgid "Saving contacts is not available."
+msgstr "Kontaktø iðsaugojimas iðjungtas."
+
+#: lib/Block/tree_menu.php:59 templates/browse/header.inc:3
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/block/minisearch.inc:26 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Ieðkoti"
+
+#: lib/api.php:1236
+msgid "Search failed"
+msgstr "Paieðka nepavyko"
+
+#: lib/api.php:1380 lib/api.php:1386 lib/api.php:1395 lib/api.php:1408
+#, php-format
+msgid "Search failed: %s"
+msgstr "Paieðka nepavyko: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Ieðkoti: "
+
+#: lib/Driver.php:1440
+msgid "Searching is not available."
+msgstr "Paieðka iðjungta."
+
+#: templates/addressbooks.inc:84
+msgid "Select an address book to delete"
+msgstr "Pasirinkite, kurià adresø knygelæ norite iðtrinti"
+
+#: templates/addressbooks.inc:109
+msgid "Select an address book to edit"
+msgstr "Pasirinkite, kurià adresu knygelæ norite pakeisti"
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Pasirinkite kontaktà"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Pasirinkite adresø knygelæ iðkëlimui:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Pasirinkite adresu knygelæ ákëlimui:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Pasirinkite ákeliamo failo koduotæ:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Pasirinkite iðkëlimo formatà:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Pasirinkite ákeliamà failà:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Pasirinkite iðkeliamo failo formatà:"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Pasirinkite vardø vaizdavimà:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Standartinio vaizdavimo, rûðiavimo ir puslapiavimo nustatymai."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Laukø, kurie bus rodomi adresø sàraðe, pasirinkimas."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Vardø vaizdavimo pasirinkimas."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Pasirinkta adresø knygelë \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Rodyti %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Rodyti abu"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Rodyti adresus"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Rodyti sàraðus"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "Rûðiavimo tvarka"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Rûðiuoti pagal %s"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Rûðiuoti tik pagal %s"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Ruðiuoti pagal %s, tada pagal %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Ðaltinis:"
+
+#: lib/api.php:274
+msgid "Sources"
+msgstr "Ðaltiniai"
+
+#: config/attributes.php.dist:101
+msgid "Spouse"
+msgstr "Sutuoktinis"
+
+#: lib/Views/Browse.php:258 lib/Views/Browse.php:298
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Á sàraðà sëkmingai átrauktas(i) %d kontaktai(as)."
+
+#: lib/Views/Browse.php:212
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s sëkmingai pridëtas á %s"
+
+#: lib/Views/Browse.php:288
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Kontaktø sàraðas \"%s\" sëkmingai sukurtas."
+
+#: search.php:127
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Virtuali adresø knygelë \"%s\" sëkmingai sukurta"
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d kontaktas(ø) sëkmingai iðtrinta."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Ið sàraðo sëkmingai iðtrintas(i) %d kontaktas(ai)."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/export.inc:14 templates/data/import.inc:14
+msgid "Tab separated values"
+msgstr "Tab atskirtos reikðmës"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Adresø knygelë á kurià norite ákëlti"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Kontaktø sàraðas á kurá norite ákelti"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Faile %s nera nei vieno kontakto."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "Prikabintø failø galimybei turi bûti ájungta VFS posistemë."
+
+#: lib/Driver.php:1411
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Adresø knygelë \"%s\" neegzistuoja."
+
+#: addressbooks.php:104
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "Adresø knygelë \"%s\" sëkmingai sukurta."
+
+#: addressbooks.php:130
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Adresø knygelë \"%s\" sëkmingai iðtrinta."
+
+#: addressbooks.php:151
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "Adresø knygelë \"%s\" sëkmingai atnaujinta."
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Nepavyko iðvalyti adresø knygelës: %s"
+
+#: contact.php:23 view.php:28 vcard.php:19
+msgid "The contact you requested does not exist."
+msgstr "Nurodytas kontaktas neegzistuoja."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Failas \"%s\" iðtrintas."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "Ákëlimà galima baigti ir neatsiþvelgiant á perspëjimus."
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "Nurodytas kontaktas nerastas."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Adresø knygeliø nëra."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Nëra nei vienos paruoðtos adresø knygelës, leidþianèios pridëti naujà áraðà. "
+"Jeigu manote, jog tai ne Jûsø klaida, praðome praneðti administratoriui. "
+
+#: search.php:123
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Problema kuriant virtualià adresø knygelæ: %s."
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr "Klaida pridedant kontaktà. Susiekite su sistemos administratoriumi."
+
+#: lib/Views/Browse.php:308
+msgid "There was an error creating a new list."
+msgstr "Klaida kuriant naujà sàraðà."
+
+#: addressbooks.php:96 addressbooks.php:102
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Klaida kuriant adresø knygelæ: %s"
+
+#: lib/Views/Browse.php:218
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Klaida trinant \"%s\" ið pasirinktos adresø knygelës."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Klaida trinant adresà: %s"
+
+#: lib/Views/Browse.php:348
+msgid "There was an error displaying the list"
+msgstr "Klaida rodant kontaktø sàraðà"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Klaida ákeliant duomenis: %s"
+
+#: lib/api.php:678 lib/api.php:944
+msgid "There was an error importing the iCalendar data."
+msgstr "Klaida ákeliant iCalendar duomenis."
+
+#: lib/api.php:227
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Klaida trinant %s adresø knygelæ"
+
+#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Klaida trinant adresø knygelæ: %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr "Klaida iðsaugant kontaktà. Susiekite su sistemos administratoriumi."
+
+#: addressbooks.php:149
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Klaida redaguojant ðià adresø knygelæ: %s"
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Adresø iðkëlimui nëra."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Ðios adresø knygelës bus rodomos tokia tvarka:"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Ðie stulpeliai bus rodomi tokia tvarka:"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "Failo formatas nepalaikomas."
+
+#: lib/api.php:1399 lib/api.php:1412
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Ðis asmuo jau yra %s jûsø adresø knygelëje."
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Ðis adresø knygelë bus naudojama kontaktø pridëjimui ir ákëlimui."
+
+#: config/attributes.php.dist:221
+msgid "Time Zone"
+msgstr "Laiko juosta"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Nepavyko rasti kontakto savininko."
+
+#: lib/Driver.php:1333 lib/Turba.php:643
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Neámanoma pakrauti %s apraðymo."
+
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "Paieðka nepavyko."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "Atðaukti pakeitimus"
+
+#: config/attributes.php.dist:340
+msgid "Unfiled"
+msgstr "Nenurodyta"
+
+#: lib/api.php:711 lib/api.php:814 lib/api.php:962
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Neþinoma Content-Type antraðtë: %s"
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Perþiûrëti kontaktà"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Standartinis vaizdavimas:"
+
+#: config/attributes.php.dist:312
+msgid "Website URL"
+msgstr "Interneto puslapis"
+
+#: config/attributes.php.dist:165
+msgid "Work Address"
+msgstr "Darbo adresas"
+
+#: config/attributes.php.dist:183
+msgid "Work City"
+msgstr "Darbo miestas"
+
+#: config/attributes.php.dist:201
+msgid "Work Country"
+msgstr "Darbo valstybë"
+
+#: config/attributes.php.dist:246
+msgid "Work Phone"
+msgstr "Darbo tel."
+
+#: config/attributes.php.dist:177
+msgid "Work Post Office Box"
+msgstr "Darbo paðto dëþutë"
+
+#: config/attributes.php.dist:195
+msgid "Work Postal Code"
+msgstr "Darbo paðto kodas"
+
+#: config/attributes.php.dist:189
+msgid "Work State/Province"
+msgstr "Darbo rajonas/provincija"
+
+#: config/attributes.php.dist:171
+msgid "Work Street Address"
+msgstr "Darbo gatvës adresas"
+
+#: data.php:251 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:271
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Jûs negalite kurti daugiau kaip %d kontaktø adresø knygelëje \"%s\"."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Jûs negalite kurti áraðø virtualioje adresø knygelëje."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Jûs negalite kurti kontaktø virtualioje adresø knygelëje."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Jûs negalite iðtrinti kontaktø ið virtualios adresø knygelës."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Neturite teisiø perþiûrëti ðá kontaktà."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Neturite teisiø perþiûrëti ðá objektà."
+
+#: addressbooks.php:59
+msgid "You do not have permissions to delete this source."
+msgstr "Jûs negalite iðtrinti ðio ðaltinio."
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Norëdami naudoti schemos patikrinimo funkcijà, turite ádiegti Net_LDAP PEAR "
+"bibliotekà."
+
+#: search.php:110
+msgid "You must provide a name for virtual address books."
+msgstr "Turite nurodyti virtualios adresø knygelës pavadinimà."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Visø pirma reikia nurodyti reikiamà adresø knygelæ."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Visø pirma reikia nurodyti reikiamà kontaktø sàraðà."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Ið pradþiø paþymëkite bent vienà kontaktà."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Jûs turite tik perþiûrëjimo teises á ðá kontaktà."
+
+#: lib/Views/Browse.php:355
+msgid "Your default address book is not browseable."
+msgstr "Nepavyko perþiûrëti jûsø pagrindinës adresø knygelës."
+
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "P_erþiûrëti"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "Kontaktai"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_Iðtrinti"
+
+#: contact.php:82
+msgid "_Edit"
+msgstr "_Redaguoti"
+
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "_Ákelti/Iðkelti"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "Sàraðas"
+
+#: lib/Turba.php:582
+msgid "_My Address Books"
+msgstr "Mano adresø knygelës"
+
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "Naujas kontaktas"
+
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "_Spausdinti"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Ið_trinti ið ðio sàraðo"
+
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "Ieð_koti"
+
+#: contact.php:79
+msgid "_View"
+msgstr "Rodyti"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "didëjimo tvarka"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "kontaktas"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "kontaktai.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "kontaktai.ldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "kontaktai.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "kontaktai.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "maþëjimo tvarka"
+
+#: config/attributes.php.dist:377
+msgid "female"
+msgstr "moteris"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "%s"
+
+#: config/attributes.php.dist:377
+msgid "male"
+msgstr "vyras"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "panaikinti formatavimà"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "nëra"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "á kontaktø sàraðà"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "á kità adresø knygelæ"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/export.inc:15 templates/data/import.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/lv_LV.po b/turba/po/lv_LV.po
new file mode 100644 (file)
index 0000000..d2d9886
--- /dev/null
@@ -0,0 +1,386 @@
+# Latvian translation for Turba
+# Kaspars Kapenieks <kaspars@rcc.lv>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 1.1\n"
+"POT-Creation-Date: 2002-11-29 12:14+0200\n"
+"PO-Revision-Date: 2002-11-29 16:00+0200\n"
+"Last-Translator: Kaspars Kapenieks <kaspars@rcc.lv>\n"
+"Language-Team: Latvian <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CP1257\n"
+"Content-Transfer-Encoding: 8-bit\n"
+
+#, c-format
+msgid "%s file successfully imported"
+msgstr "fails %s veiksmîgi ielâdçts"
+
+msgid "Add Contact ..."
+msgstr "Pievienot ..."
+
+msgid "Add a new contact"
+msgstr "Pievienot jaunu"
+
+msgid "Add failed"
+msgstr "Pievienot neizdevâs"
+
+msgid "Add"
+msgstr "Pievienot"
+
+msgid "Address Book Listing"
+msgstr "Adresu grâmatu saraksts"
+
+msgid "Addressbook is read-only."
+msgstr "Adresu grâmata pieejama tikai lasîðanai."
+
+msgid "Advanced Search"
+msgstr "Sareþìîtâ meklçðana"
+
+msgid "Alias"
+msgstr "Saîsinâjums"
+
+msgid "An illegal value was specified."
+msgstr "Norâdîta nederîga vçrtîba"
+
+msgid "Available Columns:"
+msgstr "Pieejamâs kolonnas:"
+
+msgid "Browse"
+msgstr "Pârlûkot"
+
+msgid "Cancel"
+msgstr "Atcelt"
+
+msgid "Cell Phone"
+msgstr "Mobilais tâlrunis"
+
+msgid "Choose the order of the columns to display in the address list."
+msgstr "Izvçlieties kâdâ kârtîbâ kolonnas tiks parâdîtas adresu sarakstâ."
+
+msgid "Clear Search"
+msgstr "Notîrît"
+
+msgid "Column Options"
+msgstr "Kolonnu opcijas"
+
+msgid "Company"
+msgstr "Organizâcija"
+
+#, c-format
+msgid "Contents of %s"
+msgstr "%s saturs"
+
+msgid "Default Display"
+msgstr "Noklusçtais ekrâns"
+
+msgid "Delete"
+msgstr "Dzçst"
+
+msgid "Deletion failed"
+msgstr "Izdzçst neizdevâs"
+
+msgid "Directory"
+msgstr "Katalogs"
+
+msgid "Display Options"
+msgstr "Ekrâna opcijas"
+
+#, c-format
+msgid "Edit '%s'"
+msgstr "Rediìçt '%s'"
+
+msgid "Edit"
+msgstr "Rediìçt"
+
+msgid "Email"
+msgstr "E-pasts"
+
+msgid "Error"
+msgstr "Kïûda"
+
+msgid "Export Addressbook"
+msgstr "Eksportçt adresu grâmatu"
+
+msgid "Export"
+msgstr "Eksportçt"
+
+msgid "Failed to access the specified address book."
+msgstr "Neizdevâs piekïût norâdîtajai adresu grâmatai."
+
+#, c-format
+msgid "Failed to browse %s."
+msgstr "Neizdevâs %s pârlûkoðana."
+
+msgid "Failed to connect to the specified directory."
+msgstr "Neizdevâs pieslçgties norâdîtajam katalogam."
+
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "Neizdevâs meklçðana katalogâ: %s"
+
+msgid "Fax"
+msgstr "Fakss"
+
+msgid "Find"
+msgstr "Meklçt"
+
+msgid "From"
+msgstr "No"
+
+msgid "Help"
+msgstr "Palîdzîba"
+
+msgid "Home Address"
+msgstr "Mâjas adrese"
+
+msgid "Home Phone"
+msgstr "Mâjas telefons"
+
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr "Vai importçjamajos CSV failos pirmâ rinda satur lauku nosaukumus?"
+
+msgid "Illegal or malformed form data."
+msgstr "Nederîgi formas dati."
+
+msgid "Import Addressbook"
+msgstr "Importçt adresu grâmatu"
+
+msgid "Import"
+msgstr "Importçt"
+
+msgid "Import/Export Addressbooks"
+msgstr "Importçt/Eksportçt adresu grâmatas"
+
+msgid "Import/Export"
+msgstr "Importçt/Eksportçt"
+
+msgid "Invalid addressbook."
+msgstr "Nederîga adresu grâmata."
+
+msgid "Invalid e-mail address."
+msgstr "Nederîga e-pasta adrese."
+
+msgid "Invalid name."
+msgstr "Nederîgs vârds."
+
+msgid "Language"
+msgstr "Valoda"
+
+msgid "List"
+msgstr "Saraksts"
+
+msgid "Matching"
+msgstr "Atbilstoðs"
+
+msgid "Message"
+msgstr "Vçstule"
+
+msgid "Name"
+msgstr "Vârds"
+
+msgid ""
+"None of the available address books are configured to allow you to add new "
+"entries to them. If you believe this is an error, please contact your system "
+"administrator."
+msgstr ""
+"Nevienâ no norâdîtajâm adresu grâmatâm nav iespçjams pievienot ierakstus."
+
+msgid "Notes"
+msgstr "Piezîmes"
+
+msgid "Options"
+msgstr "Opcijas"
+
+msgid "Please choose an address book to add a contact to."
+msgstr "Lûdzu izvçlieties adresu grâmatu, kurai pievienot ierakstus."
+
+msgid "Please select a directory:"
+msgstr "Lûdzu izvçvieties katalogu:"
+
+msgid "Problem?"
+msgstr "Problçma?"
+
+msgid "Reset"
+msgstr "Dzçst visus"
+
+msgid "Save Changes"
+msgstr "Saglabât izmaiòas"
+
+msgid "Save"
+msgstr "Saglabât"
+
+msgid "Search Results"
+msgstr "Meklçðanas rezultâti"
+
+msgid "Search"
+msgstr "Meklçðana"
+
+msgid "Search&nbsp;Results"
+msgstr "Meklçðanas&nbsp;rezultâti"
+
+msgid "Select the destination to import to:"
+msgstr "Izvçlieties kur importçt:"
+
+msgid "Select the file to import:"
+msgstr "Izvçlieties failu, ko importçt:"
+
+msgid "Select the format to export to:"
+msgstr "Izvçlieties kâdâ formâtâ eksportçt:"
+
+msgid "Select the format to import from:"
+msgstr "Izvçlieties kâdâ formâtâ importçt:"
+
+msgid "Select the source to export from:"
+msgstr "Izvçlieties avotu, no kura importçt:"
+
+msgid "Select view to display by default."
+msgstr "Izvçlieties skatu, ko parâdît noklusçti."
+
+msgid "Select which fields to display in the address lists."
+msgstr "Izvçlieties kurus laukus râdît adresu sarakstos."
+
+msgid "Select your preferred language:"
+msgstr "Izvçlieties valodu:"
+
+msgid "Selected Columns:"
+msgstr "Izvçlieties kolonnas:"
+
+#, c-format
+msgid "Send mail to %s"
+msgstr "Nosûtît pastu uz %s"
+
+msgid "Set your preferred display language."
+msgstr "Izvçlieties ekrâna valodu."
+
+msgid "Some of Turba's configuration files are missing:"
+msgstr "Trûkst daþi no Turbas konfigurâcijas failiem:"
+
+msgid "Success"
+msgstr "Veiksme"
+
+msgid "The data got lost"
+msgstr "Dati tika zaudçti"
+
+msgid "The data got lost."
+msgstr "Dati tika zaudçti."
+
+msgid "The file contained no data."
+msgstr "Failâ nebija datu."
+
+msgid "There are no browseable address books."
+msgstr "Ðeit nav pârlûkojamu adresu grâmatu."
+
+#, c-format
+msgid "There are no entries in %s."
+msgstr "%s nav ierakstu."
+
+msgid "There are no writeable address books."
+msgstr "Nav rediìçjamu adresu grâmatu."
+
+msgid ""
+"There was a problem with the file upload. The file may have been larger than "
+"the maximum allowed size."
+msgstr ""
+"Problçma ar faila ielâdi. Iespçjams, ka fails ir lielâks par maksimâli pieïaujamo "
+"izmçru."
+
+msgid ""
+"There was an error adding this object. Contact your system administrator for "
+"further help."
+msgstr "Kïûda pievienojot objektu. Sazinieties ar sistçmas administratoru."
+
+msgid ""
+"There was an error deleting this object. Contact your system administrator "
+"for further help."
+msgstr "Kïûda dzçðot objektu. Sazinieties ar sistçmas administratoru."
+
+msgid "There was an error importing the data."
+msgstr "Kïûda importçjot datus."
+
+msgid "There was an error importing the uploaded file"
+msgstr "Kïûda importçjot ielâdçto failu"
+
+msgid ""
+"This file controls the default preferences for Turba, and also controls "
+"which preferences users can alter."
+msgstr "Ðis fails kontrolç noklusçtos iestatîjumus"
+
+msgid ""
+"This file controls the stylesheet that is used to set colors and fonts in "
+"addition to or overriding Horde defaults."
+msgstr "Ðis fails kontrolç stilus."
+
+msgid ""
+"This file defines the Turba global attribute names and types - names, email "
+"addresses, etc."
+msgstr "Ðis fails definç globâlos atribûtu vârdus."
+
+msgid "This file defines the list of available sources for Turba."
+msgstr "Ðis fails definç pieejamos avotus."
+
+msgid ""
+"This is the main Turba configuration file. It contains paths and options for "
+"the Turba scripts."
+msgstr "Ðis ir galvenais konfigurâcijas fails."
+
+msgid "This number must be at least one."
+msgstr "Ðim skaitlim jâbût vismaz viens"
+
+msgid "This person is already in your addressbook."
+msgstr "Ðî persona jau ir jûsu adresu grâmatâ."
+
+msgid "This value must be a number."
+msgstr "Ðai vçrtîbai ir jâbut skaitlim."
+
+msgid "Title"
+msgstr "Virsraksts"
+
+msgid "Turba is not properly configured"
+msgstr "Turba nav korekti nokonfigurçta"
+
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "Nevar ielâdçt %s definîciju."
+
+msgid "User Options"
+msgstr "Lietotâja opcijas"
+
+msgid "View to display by default:"
+msgstr "Skatîjums, ko parâdît pçc noklusçðanas:"
+
+msgid "Warning"
+msgstr "Brîdinâjums"
+
+msgid "Work Address"
+msgstr "Darba adrese"
+
+msgid "Work Phone"
+msgstr "Darba telefons"
+
+msgid ""
+"You didn't map any fields from the imported file to the corresponding fields "
+"in Turba."
+msgstr ""
+"Nav norâdîta importçtâ faila lauku atbilstîba adresu grâmatas laukiem."
+
+msgid "Your Information"
+msgstr "Jûsu informâcija"
+
+msgid "Your options have been updated."
+msgstr "Jûsu opcijas ir saglabâtas."
+
+msgid "[Edit]"
+msgstr "[Rediìçt]"
+
+msgid "add column"
+msgstr "pievienot kolonnu"
+
+msgid "move left"
+msgstr "pârvietot pa kreisi"
+
+msgid "move right"
+msgstr "pârvietot pa labi"
+
+msgid "remove column"
+msgstr "izdzçst kolonnu"
diff --git a/turba/po/mk_MK.po b/turba/po/mk_MK.po
new file mode 100644 (file)
index 0000000..be47fa7
--- /dev/null
@@ -0,0 +1,313 @@
+# translation of mk_MK.po to Macedonian
+# This file is distributed under the same license as the Turba package.
+# Copyright 2003 Eureka Informatika
+# Stojan Pesov <ssp@eureka.com.mk>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: mk_MK\n"
+"POT-Creation-Date: 2003-06-06 14:30+0200\n"
+"PO-Revision-Date: 2003-06-26 14:59+0200\n"
+"Last-Translator: Stojan Pesov <ssp@eureka.com.mk>\n"
+"Language-Team: Macedonian <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-5\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.0.1\n"
+
+#, c-format
+msgid "%s file successfully imported"
+msgstr "%s ÔÞÚãÜÕÝâÞâ Õ ãáßÕèÝÞ ØÜßÞàâØàÐÝ"
+
+msgid "Add Contact ..."
+msgstr "´ÞÔÐÔØ ÚÞÝâÐÚâ"
+
+msgid "Add a new contact"
+msgstr "´ÞÔÐÔØ ÝÞÒ ÚÞÝâÐÚâ"
+
+msgid "Add failed"
+msgstr "´ÞÔÐÒÐúÕâÞ Õ ÝÕãáßÕèÝÞ"
+
+msgid "Add"
+msgstr "´ÞÔÐø"
+
+msgid "Addressbook is read-only."
+msgstr "²Þ ÐÔàÕáÐàÞâ ÝÕ ÜÞÖÕ ÔРáÕ ×ÐߨèãÒР"
+
+msgid "Advanced Directory Search"
+msgstr "½ÐßàÕÔÝÞ ßÞÑÐàãÒÐúÕ ÝÐ ÔØàÕÚâÞàØãÜØ"
+
+msgid "Advanced Search"
+msgstr "½ÐßàÕÔÝÞ ßàÕÑÐàãÒÐúÕ"
+
+msgid "Alias"
+msgstr "°ÛØÐá"
+
+msgid "Bcc"
+msgstr "½ÕÒØÔÛØÒРÚÞߨøÐ"
+
+msgid "Cancel"
+msgstr "¾âÚÐÖØ"
+
+msgid "Cc"
+msgstr "ºÞߨøÐ"
+
+msgid "Cell Phone"
+msgstr "¼ÞÑØÛÕÝ"
+
+msgid "Clear Search"
+msgstr "½ÞÒÞ ÑÐàÐúÕ"
+
+msgid "Company"
+msgstr "ÄØàÜÐ"
+
+msgid "Delete"
+msgstr "¸×ÑàØèØ"
+
+msgid "Deletion failed"
+msgstr "´ÞÔÐÒÐúÕâÞ Õ ÝÕãáßÕèÝÞ"
+
+msgid "Directory Search"
+msgstr "¿àÕÑÐàãÒÐúÕ ÔØàÕÚâÞàØãÜ"
+
+msgid "Directory"
+msgstr "´ØàÕÚâÞàØãÜ"
+
+msgid "Edit"
+msgstr "ÃàÕÔØ"
+
+msgid "Email"
+msgstr "Õ-ßÞèâÐ"
+
+msgid "Error"
+msgstr "³àÕèÚÐ"
+
+msgid "Export Addressbook"
+msgstr "µÚáßÞàâØàÐø ÐÔàÕáÐà"
+
+msgid "Export"
+msgstr "µÚáßÞàâØàÐø"
+
+msgid "Failed to connect to the specified directory."
+msgstr "½Õ ÜÞÖÐÜ ÔРÓÞ ÞâÒÞàÐÜ ÑÐàÐÝØÞâ ÔØàÕÚâÞàØãÜ"
+
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "½Õ ÜÞÖÐÜ ÔРßàÕÑÐàãÒÐÜ ßÞ ÔØàÕÚâÞàØãÜÞâ %s"
+
+msgid "Fax"
+msgstr "ÄÐÚá"
+
+msgid "Find"
+msgstr "±ÐàÐø"
+
+msgid "From"
+msgstr "¾Ô"
+
+msgid "Help"
+msgstr "¿ÞÜÞè"
+
+msgid "Home Address"
+msgstr "´ÞÜÐèÝРÐÔàÕáÐ"
+
+msgid "Home Phone"
+msgstr "´ÞÜÐèÕÝ âÕÛÕäÞÝ"
+
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr "°ÚÞ ØÜßÞàâØàÐâÕ CSV ßÞÔÐâÞæØ ÔÐÛØ ßàÒØÞâ àÕÔ ÓØ áÞÔàÖØ ØÜØúÐâРÝРáØâÕ ßÞÛØúÐ?"
+
+msgid "Illegal or malformed form data."
+msgstr "³àÕèÚРßàØ âàÐÝáßÞàÞâ ÝРØÝäÞàÜÐæØØ"
+
+msgid "Import Addressbook"
+msgstr "¸ÜßÞàâØàÐø ÐÔàÕáÐà"
+
+msgid "Import"
+msgstr "¸ÜßÞàâØàÐø"
+
+msgid "Import/Export Addressbooks"
+msgstr "¸ÜßÞàâ/µÚáßÞàâ ÝРÐÔàÕáÐà"
+
+msgid "Import/Export"
+msgstr "¸ÜßÞàâ/µÚáßÞàâ"
+
+msgid "Invalid addressbook."
+msgstr "°ÔàÕáÐàÞâ Õ ÝÕÒÐÛØÔÕÝ"
+
+msgid "Invalid e-mail address."
+msgstr "°ÔàÕáÐâРÝÕ Õ ÒÐÛØÔÝÐ"
+
+msgid "Invalid name."
+msgstr "¸ÜÕâÞ ÝÕ Õ ÒÐÛØÔÝÞ."
+
+msgid "Language"
+msgstr "¨ÐרÚ"
+
+msgid "Matching"
+msgstr "ÁÕ ßÞÚÛÞßãÒÐ"
+
+msgid "Message"
+msgstr "¿ÞàÐÚÐ"
+
+msgid "Name"
+msgstr "¸ÜÕ"
+
+msgid ""
+"None of the available address books are configured to allow you to add new "
+"entries to them. If you believe this is an error, please contact your system "
+"administrator."
+msgstr "½ØÕÔÕÝ ÞÔ ÐÔàÕáÐàØâÕ ÝÕ Õ ßÞÔÕáÕÝ ×РÒÞÒÕÔãÒÐúÕ ÝÞÒØ áâÐÒÚØ. °ÚÞ ÜØáÛØâÕ ÔÕÚРáÕ àÐÑÞâØ ×РÓàÕèÚÐ, ÒÕ ÜÞÛØÜÕ ÚÞÝâÐÚâØàÐøâÕ áÞ ÒÐèØÞâ ÐÔÜØÝØáâàÐâÞà."
+
+msgid "Notes"
+msgstr "·ÐÑÕÛÕèÚØ"
+
+msgid "Please choose an address book to add a contact to."
+msgstr "²Õ ÜÞÛØÜÕ ÞÔÑÕàÕâÕ ÐÔàÕáÐà ÒÞ ÚÞø üÕ ÓØ áÜÕáâØâÕ ÚÞÝâÐÚâÝØâÕ ßÞÔÐâÞæØ."
+
+msgid "Problem?"
+msgstr "¿àÞÑÛÕÜ?"
+
+msgid "Reset"
+msgstr "¾ÔÝÞÒÞ"
+
+msgid "Save Changes"
+msgstr "·ÐçãÒÐø ÓØ ßàÞÜÕÝØâÕ"
+
+msgid "Save"
+msgstr "·ÐçãÒÐø"
+
+msgid "Search Results"
+msgstr "ÀÕ×ãÛâÐâØ ÞÔ ßàÕÑÐàãÒÐúÕâÞ"
+
+msgid "Search"
+msgstr "¿àÕÑÐàãÒÐø"
+
+msgid "Search&nbsp;Results"
+msgstr "ÀÕ×ãÛâÐâØ&nbsp;ÞÔ&nbsp;ßàÕÑÐàãÒÐúÕâÞ"
+
+msgid "Select the destination to import to:"
+msgstr "¾ÑÕàØ ÔÕáâØÝÐæØøÐ ×РØÜßÞàâØàÐúÕ:"
+
+msgid "Select the file to import:"
+msgstr "¾ÑÕàØ ÓÞ ÔÞÚãÜÕÝâÞâ ÒÞ ÚÞø üÕ ØÜßÞàâØàÐè:"
+
+msgid "Select the format to export to:"
+msgstr "¾ÔÑÕàØ ÓÞ äÞàÜÐâÞâ ×РÕÚáßÞàâ:"
+
+msgid "Select the format to import from:"
+msgstr "¾ÔÑÕàØ ÓÞ äÞàÜÐâÞâ ×РØÜßÞàâ:"
+
+msgid "Select the source to export from:"
+msgstr "¾ÔÑÕàØ ÞÔ ÚÐÔÕ üÕ ÕÚáßÞàâØàÐè:"
+
+msgid "Select your preferred language:"
+msgstr "¾ÔÑÕàØ ÓÞ áÒÞøÞâ ÜÐâØçÕÝ øÐרÚ:"
+
+msgid "Send Message"
+msgstr "¸áßàÐâØ ßÞàÐÚÐ"
+
+#, c-format
+msgid "Send mail to %s"
+msgstr "¸áßàÐâØ ßÞàÐÚРÔÞ %s"
+
+msgid "Set the your preferred display language."
+msgstr "¾ÔÑÕàØ ÓÞ áÒÞøÞâ ÜÐâØçÕÝ øÐרÚ."
+
+msgid "Some of Turba's configuration files are missing:"
+msgstr "´ÕÛ ÞÔ ÚÞÝäØÓãàÐæØøÐâРÝРáØáâÕÜÞâ ×РÚÞÝâÐÚâ ÝÕÔÞáâÐáãÒÐ:"
+
+msgid "Success"
+msgstr "ÃáßÕèÝÞ"
+
+msgid "The data got lost"
+msgstr "¿ÞÔÐâÞæØâÕ áÕ ×ÐÓãÑÕÝØ"
+
+msgid "The data got lost."
+msgstr "¿ÞÔÐâÞæØâÕ áÕ ×ÐÓãÑÕÝØ."
+
+msgid "The file contained no data."
+msgstr "´ÞÚãÜÕÝâÞâ ÝÕ áÞÔàÖØ ßÞÔÐâÞæØ."
+
+msgid "There are no writeable address books."
+msgstr "½ÕÜРÐÔàÕáÐà ÒÞ ÚÞø Õ ÔÞ×ÒÞÛÕÝÞ ×ÐߨèãÒÐúÕ."
+
+msgid ""
+"There was a problem with the file upload. The file may have been larger than "
+"the maximum allowed size."
+msgstr "½ÐáâÐÝРÓàÕèÚРßàØ áÝØÜÐúÕâÞ ÝРÔÞÚãÜÕÝâÞâ. ¼ÞÖÕÑØ ÔÞÚãÜÕÝâÞâ Õ ßÞÓÞÛÕÜ ÞÔ ÜÐÚáØÜÐÛÝÞ ÔÞ×ÒÞÛÕÝÐâРÓÞÛÕÜØÝÐ."
+
+msgid ""
+"There was an error adding this object. Contact your system administrator for "
+"further help."
+msgstr "½ÐáâÐÝРÓàÕèÚРßàØ ÔÞÔÐÒÐúÕ ÝРÞÑøÕÚâÞâ. ºÞÝâÐÚâØàÐøâÕ áÞ ÒÐèØÞâ ÐÔÜØÝØáâàÐâÞà ×РßÞÝÐâÐÜÞèÝØ ØÝáâàã򾯯."
+
+msgid ""
+"There was an error deleting this object. Contact your system administrator "
+"for further help."
+msgstr "½ÐáâÐÝРÓàÕèÚРßàØ ÑàØèÕúÕ ÝРÞÑøÕÚâÞâ. ºÞÝâÐÚâØàÐøâÕ áÞ ÒÐèØÞâ ÐÔÜØÝØáâàÐâÞà ×РßÞÝÐâÐÜÞèÝØ ØÝáâàã򾯯."
+
+msgid "There was an error importing the data."
+msgstr "½ÐáâÐÝРÓàÕèÚРßàØ ØÜßÞàâØàÐúÕâÞ ÝРßÞÔÐâÞæØâÕ."
+
+msgid "There was an error importing the uploaded file"
+msgstr "½ÐáâÐÝРÓàÕèÚРÒÞ ØÜßÞàâØàÐúÕâÞ ÝРáØÜÝÐâØÞÝ ÔÞÚãÜÕÝâ."
+
+msgid ""
+"This file controls the default preferences for Turba, and also controls "
+"which preferences users can alter."
+msgstr "¾ÒÞø ÔÞÚãÜÕÝâ ßàÕâáâÐÒãÒРÚÞÝäØÓãàÐæØøÐ ×РáØáâÕÜÞâ ÝРÐÔàÕáÐàØ, Ð ØáâÞ âÐÚÐ ÓØ áÞÔàÖØ ÚÞàØáÝØçÚØâÕ ßÞÔÕáãÒÐúÐ."
+
+msgid ""
+"This file controls the stylesheet that is used to set colors and fonts in "
+"addition to or overriding Horde defaults."
+msgstr "¾ÒÞø ÔÞÚãÜÕÝâ áÞÔàÖØ ßÞÔÕáãÒÐúРÚÞØ ÓØ ×ÐÜÕÝãÒÐÐâ ØÛØ ÔÞßÞÛÝãÒÐÐâ ßÞçÕâÝØâÕ ßÞÔÕáãÒÐúР×РHorde."
+
+msgid ""
+"This file defines the Turba global attribute names and types - names, email "
+"addresses, etc."
+msgstr "¾ÒÞø ÔÞÚãÜÕÝâÞ ÓØ áÞÔàÖØ ÓÛÞÑÐÛÝØâÕ ØÜØúРؠâØßÞÒØ ÝРßÐàÐÜÕâàØâРÝРáØáâÕÜÞâ ×РÐÔàÕáÐàØ."
+
+msgid "This file defines the list of available sources for Turba."
+msgstr "¾ÒÞø ÔÞÚãÜÕÝâ ßàÕâáâÐÒãÒÐ ÛØáâРÞÔ Ø×ÒÞàÝØâÕ ßÞÔÐâÞæØ ×РáØáâÕÜÞâ ×РÐÔàÕáÐàØ."
+
+msgid ""
+"This is the main Turba configuration file. It contains paths and options for "
+"the Turba scripts."
+msgstr "¾ÒÞø ÔÞÚãÜÕÝâ Õ ÓÛÐÒÝØÞâ ÚÞÝäØÓãàÐæØÞÝÕÝ ÔÞÚãÜÕÝâ ÝРáØáâÕÜÞâ ×РÐÔàÕáÐàØ. ³Ø áÞÔàÖØ ßÐâÕÚØâÕ ÔÞ áÚàØßâØâÕ ×РáØáâÕÜÞâ."
+
+msgid "This person is already in your addressbook."
+msgstr "»ØçÝÞáâРՠÒÕüÕ ÒÝÕáÕÝРÒÞ ÒÐèØÞâ ÐÔàÕáÐà."
+
+msgid "Title"
+msgstr "½ÐáÛÞÒ"
+
+msgid "To"
+msgstr "´Þ"
+
+msgid "Turba is not properly configured"
+msgstr "ÁØáâÕÜÞâ ×РÐÔàÕáÐàØ ÝÕ Õ âÞçÝÞ ÚÞÝäØÓãàØàÐÝ."
+
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "½Õ ÜÞÖÐÜ ÔÐ ÓØ ßàÞçØâÐÜ ØÝäÞàÜÐæØØâÕ ×Р%s."
+
+msgid "Warning"
+msgstr "²ÝØÜÐÝØÕ"
+
+msgid "Work Address"
+msgstr "°ÔàÕáРÝРàÐÑÞâÐ"
+
+msgid "Work Phone"
+msgstr "ÂÕÛÕäÞÝ ÝРàÐÑÞâÐ"
+
+msgid ""
+"You didn't map any fields from the imported file to the corresponding fields "
+"in Turba."
+msgstr "½ÕÜРáÞÒßÐóÐúÕ ßÞÜÕóã ßÞÔÐâÞæØâÕ ÞÔ ØÜßÞàâØàÐÝØÞâ ÔÞÚãÜÕÝâ áÞ áÞÞÔÒÕâÝØâÕ ßÞÔÐâÞæØ ÒÞ áØáâÕÜÞâ ×РÐÔàÕáÐàØ."
+
+msgid "Your Information"
+msgstr "²ÐèØ ØÝäÞàÜÐæØØ"
+
+msgid "[Edit]"
+msgstr "ÃàÕÔØ"
+
diff --git a/turba/po/nb_NO.po b/turba/po/nb_NO.po
new file mode 100644 (file)
index 0000000..adb9cea
--- /dev/null
@@ -0,0 +1,541 @@
+# Norwegian Turba Translation.
+# Copyright 2001-2009 The Horde Project.
+# Oystein Steimler <oystein@rexta.net>, 2001.
+# Torstein S. Hansen <huleboer@techbee.no>, 2002.
+# Andreas Gunleikskaas <andreas@gunleikskaas.no>, 2003.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 1.2\n"
+"POT-Creation-Date: 2002-07-22 13:11+0200\n"
+"PO-Revision-Date: 2004-05-18 23:37+0200\n"
+"Last-Translator: Andreas Gunleikskaas <andreas@gunleikskaas.no>\n"
+"Language-Team: Norwegian (Bokmal) <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, c-format
+msgid "%s file successfully imported"
+msgstr "Import av %s filen var vellykket"
+
+msgid "Add Contact ..."
+msgstr "Legg til kontakt ..."
+
+msgid "Add a new contact"
+msgstr "Legg til en ny kontakt"
+
+msgid "Add failed"
+msgstr "Kunne ikke legge til"
+
+msgid "Add"
+msgstr "Legg til"
+
+msgid "Address Book Listing"
+msgstr "Adressebokliste"
+
+msgid "Addressbook is read-only."
+msgstr "Adresseboken er skrivebeskyttet."
+
+msgid "Advanced Search"
+msgstr "Avansert søk"
+
+msgid "Alias"
+msgstr "Alias"
+
+msgid "An illegal value was specified."
+msgstr "En ugyldig verdi var valgt."
+
+msgid "Available Columns:"
+msgstr "Tilgjengelige kolonner:"
+
+msgid "Browse"
+msgstr "Liste"
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Cell Phone"
+msgstr "Mobiltelefon"
+
+msgid "Choose the order of the columns to display in the address list."
+msgstr "Velg rekkefølgen av kolonnene som skal bli vist i adresse listen."
+
+msgid "Clear Search"
+msgstr "Nytt søk"
+
+msgid "Column Options"
+msgstr "Kolonnevalg"
+
+msgid "Company"
+msgstr "Firma"
+
+#, c-format
+msgid "Contents of %s"
+msgstr "Inneholdet av %s"
+
+msgid "Default Display"
+msgstr "Standardvisning"
+
+msgid "Delete"
+msgstr "Slett"
+
+msgid "Deletion failed"
+msgstr "Slettingen feilet"
+
+msgid "Directory"
+msgstr "Katalog"
+
+msgid "Display Options"
+msgstr "Visnings valg"
+
+msgid "Edit '%s'"
+msgstr "Rediger"
+
+msgid "Edit"
+msgstr "Rediger"
+
+msgid "Email"
+msgstr "Epost"
+
+msgid "Error"
+msgstr "Feil"
+
+msgid "Export Addressbook"
+msgstr "Eksporter adressebok"
+
+msgid "Export"
+msgstr "Eksporter"
+
+msgid "Failed to access the specified address book."
+msgstr "Kunne ikke koble til den angitte katalogen."
+
+#, c-format
+msgid "Failed to browse %s."
+msgstr "Feilet å søke etter %s."
+
+msgid "Failed to connect to the specified directory."
+msgstr "Kunne ikke koble til den angitte katalogen."
+
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "Kunne ikke søke i katalogen: %s"
+
+msgid "Fax"
+msgstr "Telefaks"
+
+msgid "Find"
+msgstr "Finn"
+
+msgid "From"
+msgstr "Fra"
+
+msgid "Help"
+msgstr "Hjelp"
+
+msgid "Home Address"
+msgstr "Hjemmeadresse"
+
+msgid "Home Phone"
+msgstr "Telefon hjemme"
+
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr "Ved import av CSV-data: Inneholder den første raden feltnavn?"
+
+msgid "Illegal or malformed form data."
+msgstr "Ulovlige eller misutformede data."
+
+msgid "Import Addressbook"
+msgstr "Importer adressebok"
+
+msgid "Import"
+msgstr "Importer"
+
+msgid "Import/Export Addressbooks"
+msgstr "Importer/Eksporter adressebok"
+
+msgid "Import/Export"
+msgstr "Import/Eksport"
+
+msgid "Invalid addressbook."
+msgstr "Ugyldig adressebok."
+
+msgid "Invalid e-mail address."
+msgstr "Ugyldig epostadresse."
+
+msgid "Invalid name."
+msgstr "Ugyldig navn."
+
+msgid "Language"
+msgstr "Språk"
+
+msgid "List"
+msgstr "Liste"
+
+msgid "Matching"
+msgstr "Kobling"
+
+msgid "Message"
+msgstr "Melding"
+
+msgid "Name"
+msgstr "Navn"
+
+msgid ""
+"None of the available address books are configured to allow you to add new "
+"entries to them. If you believe this is an error, please contact your system "
+"administrator."
+msgstr ""
+"Ingen av de tilgjengelige adressebøkene tillater deg å legge til nye "
+"oppføringer. Hvis du mener dette er feil, vennlist kontakt system "
+"administratoren din."
+
+msgid "Notes"
+msgstr "Notater"
+
+msgid "Options"
+msgstr "Valg"
+
+msgid "Please choose an address book to add a contact to."
+msgstr "Vennligst velg adresseboken du vil legge kontakten til."
+
+msgid "Please select a directory:"
+msgstr "Kunne ikke søke i katalogen: %s"
+
+msgid "Problem?"
+msgstr "Problem?"
+
+msgid "Reset"
+msgstr "Nullstill"
+
+msgid "Save Changes"
+msgstr "Lagre endringer"
+
+msgid "Save"
+msgstr "Lagre"
+
+msgid "Search Results"
+msgstr "Søkeresultater"
+
+msgid "Search"
+msgstr "Søk"
+
+msgid "Search&nbsp;Results"
+msgstr "Søkeresultat"
+
+msgid "Select the destination to import to:"
+msgstr "Velg mål å importere til:"
+
+msgid "Select the file to import:"
+msgstr "Velg filen som skal importeres:"
+
+msgid "Select the format to export to:"
+msgstr "Velg format på eksporten:"
+
+msgid "Select the format to import from:"
+msgstr "Velg format på importen:"
+
+msgid "Select the format of the source file:"
+msgstr "Velg format på kilden:"
+
+msgid "Select the source to export from:"
+msgstr "Velg kilde som det skal eksporteres fra:"
+
+msgid "Select view to display by default."
+msgstr "Velg standardvisning."
+
+msgid "Select which fields to display in the address lists."
+msgstr "Velg hvilke felter som skal vises i adresse listen."
+
+msgid "Select your preferred language:"
+msgstr "Velg ditt foretrukne språk:"
+
+msgid "Selected Columns:"
+msgstr "Velg kolonner:"
+
+#, c-format
+msgid "Send mail to %s"
+msgstr "Send epost til %s"
+
+msgid "Set your preferred display language."
+msgstr "Sett ditt foretrukne visnings-språk."
+
+msgid "Some of Turba's configuration files are missing:"
+msgstr "Noen av Turbas konfigurasjonsfiler mangler:"
+
+msgid "Success"
+msgstr "Suksess"
+
+msgid "The data got lost"
+msgstr "Dataene ble borte"
+
+msgid "The data got lost."
+msgstr "Dataene ble borte."
+
+msgid "The file contained no data."
+msgstr "Filen inneholdt ikke data."
+
+msgid "There are no browseable address books."
+msgstr "Det finnes ingen skrivbare adressebøker."
+
+msgid "There are no entries in %s."
+msgstr "Det finnes ingen skrivbare adressebøker."
+
+msgid "There are no writeable address books."
+msgstr "Det finnes ingen skrivbare adressebøker."
+
+msgid ""
+"There was a problem with the file upload. The file may have been larger than "
+"the maximum allowed size."
+msgstr ""
+"Det oppstod et problem med filopplastingen. Filen kan ha vært større enn "
+"maksimalt tillatt størrelse."
+
+msgid ""
+"There was an error adding this object. Contact your system administrator for "
+"further help."
+msgstr ""
+"Det oppstod en feil idet objektet skulle legges til. Kontakt "
+"systemadministratoren din for ytterligerere hjelp."
+
+msgid ""
+"There was an error deleting this object. Contact your system administrator "
+"for further help."
+msgstr ""
+"Det oppstod en feil idet objektet skulle slettes. Kontakt "
+"systemadministratoren din for ytterligerere hjelp."
+
+msgid "There was an error importing the data."
+msgstr "Det oppstod en feil ved import av dataene."
+
+msgid "There was an error importing the uploaded file"
+msgstr "Det oppstod en feil når den opplastede filen skulle importeres"
+
+msgid ""
+"This file controls the default preferences for Turba, and also controls "
+"which preferences users can alter."
+msgstr ""
+"Denne filen kontrollerer standardinstillinger for Turba, og kontrollerer "
+"hvilke instillinger brukerne kan endre."
+
+msgid ""
+"This file controls the stylesheet that is used to set colors and fonts in "
+"addition to or overriding Horde defaults."
+msgstr ""
+"Denne filen kontrollerer stilarket som bestemmer farger og skrifttyper. I "
+"tillegg overstyrer den standardinstillingene i Horde."
+
+msgid ""
+"This file defines the Turba global attribute names and types - names, email "
+"addresses, etc."
+msgstr ""
+"Denne filen definerer de globale navnene og typene på atributtene i Turba - "
+"navn, epost, adresser, osv."
+
+msgid "This file defines the list of available sources for Turba."
+msgstr "Denne filen definerer listen over tilgjengelige kilder for Turba."
+
+msgid ""
+"This is the main Turba configuration file. It contains paths and options for "
+"the Turba scripts."
+msgstr ""
+"Dette er Turbas hovedkonfigurasjonsfil. Den inneholder stier og valg for "
+"Turbaskriptene."
+
+msgid "This number must be at least one."
+msgstr "Dette nummeret må være minst 1."
+
+msgid "This person is already in your addressbook."
+msgstr "Denne personen finnes allerede i adresseboken din."
+
+msgid "This value must be a number."
+msgstr "Dette valget må være et nummer."
+
+msgid "Title"
+msgstr "Tittel"
+
+msgid "Turba is not properly configured"
+msgstr "Turba er ikke ordentlig satt opp"
+
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "Kan ikke laste detfinisjonen av %s."
+
+msgid "User Options"
+msgstr "Bruker valg"
+
+msgid "View to display by default:"
+msgstr "Standardvisning:"
+
+msgid "Warning"
+msgstr "Advarsel"
+
+msgid "Work Address"
+msgstr "Firmaadresse"
+
+msgid "Work Phone"
+msgstr "Telefon Arbeid"
+
+msgid ""
+"You didn't map any fields from the imported file to the corresponding fields "
+"in Turba."
+msgstr ""
+"Du koblet ikke noen felt fra den importerte filen mot de korresponderende "
+"feltene i Turba."
+
+msgid "Your Information"
+msgstr "Din informasjon"
+
+msgid "Your options have been updated."
+msgstr "Dine valg har blitt oppdatert:"
+
+msgid "[Edit]"
+msgstr "[Rediger]"
+
+msgid "add column"
+msgstr "Legg til kolonne"
+
+msgid "move left"
+msgstr "Flytt til venstre"
+
+msgid "move right"
+msgstr "Flytt til høyre"
+
+msgid "remove column"
+msgstr "fjern kolonne"
+
+msgid "Show Lists"
+msgstr "Vis lister"
+
+msgid "Show Contacts"
+msgstr "Vis kontakter"
+
+msgid "Show All"
+msgstr "Vis alle"
+
+msgid "Select"
+msgstr "Velg"
+
+msgid "All"
+msgstr "Alle"
+
+msgid "Add to"
+msgstr "Legg til..."
+
+msgid "None"
+msgstr "Ingen"
+
+msgid "Name Format"
+msgstr "Navneformat"
+
+msgid "Select which format to display names."
+msgstr "Velg hva slags visningsformat navn skal ha."
+
+msgid "Select the format used to display names:"
+msgstr "Velg visningsformatet som skal benyttes:"
+
+msgid "Select List"
+msgstr "Velg liste"
+
+msgid "New List"
+msgstr "Ny liste"
+
+msgid "Remove from this list"
+msgstr "Slett fra denne listen"
+
+msgid "Mobile Phone"
+msgstr "Mobiltelefon"
+
+msgid "Date of Birth (dd/mm/yyyy)"
+msgstr "Fødselsdag (dd/mm/åååå)"
+
+msgid "Category"
+msgstr "Kategori"
+
+msgid "_Add"
+msgstr "Legg til"
+
+msgid "_Browse"
+msgstr "Bla gjennom"
+
+msgid "_Search"
+msgstr "Søk"
+
+msgid "_Import/Export"
+msgstr "Importer/Eksporter"
+
+msgid "_Options"
+msgstr "Valg"
+
+msgid "_Help"
+msgstr "Hjelp"
+
+msgid "_Log out"
+msgstr "Logg ut"
+
+msgid "Basic Search"
+msgstr "Standard søk"
+
+msgid "Ad_vanced Search"
+msgstr "Avansert søk"
+
+msgid "_Delete"
+msgstr "Slett"
+
+msgid "Records displayed:"
+msgstr "Antal i visning:"
+
+msgid "Download vCard"
+msgstr "Last ned vCard"
+
+msgid "New Contact"
+msgstr "Ny kontakt"
+
+msgid "Reset to Defaults"
+msgstr "Tøm skjema"
+
+msgid "Copy"
+msgstr "Kopier"
+
+msgid "Move"
+msgstr "Flytt"
+
+msgid "to Selected Address Book"
+msgstr "til valgt adressebok"
+
+msgid "Show _Lists"
+msgstr "Vis lister"
+
+msgid "Show _Contacts"
+msgstr "Vis kontakter"
+
+msgid "Sho_w All"
+msgstr "Vis alt"
+
+msgid "Select Address Book"
+msgstr "Velg adressebok"
+
+msgid "Show"
+msgstr "Vis"
+
+msgid "PGP Public Key"
+msgstr "PGP offentlig nøkkel"
+
+msgid "C_lear Search"
+msgstr "Tøm søk"
+
+msgid ""
+"Replace existing address book with the imported one? <b>Warning: This "
+"deletes all entries in your current address book.</b>"
+msgstr ""
+"Erstatt ekisterende adressebok med den importerte ? <b>Advarsel: Dette "
+"sletter alt innhold i din adressebok.</b>"
+
+msgid "Next"
+msgstr "Neste"
+
+msgid "Select the export format:"
+msgstr "Velg formatet du vil eksportere til:"
+
+msgid "Import Address Book, Step %d"
+msgstr "Importer adressebok, steg %d"
diff --git a/turba/po/nl_NL.po b/turba/po/nl_NL.po
new file mode 100644 (file)
index 0000000..88f084c
--- /dev/null
@@ -0,0 +1,1618 @@
+# Turba Dutch translation.
+# Copyright 2001 Jan Kuipers.
+# Jan Kuipers <jrkuipers@lauwerscollege.nl>, 2001-2007.
+# Updated Han Spruyt 2005. 
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba H3 (2.2-cvs)\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2007-11-21 19:43+0100\n"
+"PO-Revision-Date: 2007-11-22 00:16+0100\n"
+"Last-Translator: Jan Kuipers <jrkuipers@lauwerscollege.nl>\n"
+"Language-Team: Dutch <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Voeg een IMSP adresboek toe"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Verwijder IMSP adresboek"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "%s bestaat al en is daarom niet geïmporteerd."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"\"%s\" bijgewerkt, maar het opslaan van het uploaded bestand is mislukt: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" bijgewerkt."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" werd niet gekopieerd, omdat het een adreslijst is."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" werd niet verplaatst, omdat het een adreslijst is."
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Voornaam Achternaam\" (b.v. John Doe)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Achternaam, Voornaam\" (b.v. Doe, John)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s toegevoegd."
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "%s bestand met succes geimporteerd."
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s tot %s van %s"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s's adresboek"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Een browser met iFrame ondersteuning is vereist"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Toegang geweigerd voor %s"
+
+#: lib/Forms/AddContact.php:25 templates/browse/actions.inc:30
+msgid "Add"
+msgstr "Toevoegen"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Contactpersoon toevoegen"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Toevoegen adresboek"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Kolom toevoegen"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Bestand toevoegen"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Toevoegen aan"
+
+#: lib/Driver.php:1463
+msgid "Adding contacts is not available."
+msgstr "Toevoegen van adressen is niet beschikbaar."
+
+#: templates/addressbooks.inc:105
+msgid "Address Book"
+msgstr "Adresboek"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Adresboek lijst"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Adresboeken"
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "Adresboek met succes geleegd."
+
+#: templates/addressbooks.inc:80
+msgid "Address book to delete "
+msgstr "Adresboek om te verwijderen "
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Deze adresboeken worden niet weergeven:"
+
+#: search.php:161 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Uitgebreid zoeken"
+
+#: config/attributes.php.dist:77
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Alle"
+
+#: lib/api.php:725
+msgid "Already Exists"
+msgstr "Bestaat al"
+
+#: config/attributes.php.dist:95
+msgid "Anniversary"
+msgstr "Feestdag"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Weet u zeker dat u %s wilt verwijderen?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Weet u zeker dat u de geselecteerde adressen wilt verwijderen?"
+
+#: templates/addressbooks.inc:45
+msgid "Are you sure you want to delete the addressbook: "
+msgstr "Weet u zeker dat u het adresboek wilt verwijderen?"
+
+#: config/attributes.php.dist:368
+msgid "Assistant"
+msgstr "Assistent"
+
+#: search.php:158 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Eenvoudig zoeken"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Verbinding mislukt: (%s) %s"
+
+#: config/attributes.php.dist:89
+msgid "Birthday"
+msgstr "Verjaardag"
+
+#: lib/Driver.php:524
+#, php-format
+msgid "Birthday of %s"
+msgstr "Verjaardag van %s"
+
+#: lib/api.php:1255
+msgid "Birthdays"
+msgstr "Verjaardagen"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Blanco naam"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Beide"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Bladeren"
+
+#: config/attributes.php.dist:280
+msgid "Business Category"
+msgstr "Zakelijke categorie"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Kan een groep niet aan zichzelf toevoegen."
+
+#: lib/Driver/kolab.php:620
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Kan niet alle adresboekvermeldingen van %s verwijderen"
+
+#: config/attributes.php.dist:342
+msgid "Category"
+msgstr "Categorie"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Wijzig %s sorteervolgorde in %s"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Controleer Alles/Geen"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Controleer _Alles/Geen"
+
+#: config/attributes.php.dist:107
+msgid "Children"
+msgstr "Children"
+
+#: templates/addressbooks.inc:60
+msgid "Choose a name"
+msgstr "Kies een naam"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Kies een adresboek"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "Kies een adresboek:"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Selecteer de weer te geven adresboeken en zet ze in volgorde."
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Selecteer de te gebruiken adresboeken"
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Selecteer de weer te geven kolommen en zet ze in volgorde."
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Sluiten"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Zoeken afsluiten"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Kolomopties"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Niet weer te  geven kolommen:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Komma gescheiden waarden"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Komma gescheiden waarden (Microsoft Outlook)"
+
+#: config/sources.php.dist:228 config/sources.php.dist:901
+msgid "Communications"
+msgstr "Communicaties"
+
+#: config/attributes.php.dist:286
+msgid "Company"
+msgstr "Bedrijf"
+
+#: config/attributes.php.dist:215
+msgid "Company Address"
+msgstr "Bedrijfsadres"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:394 lib/api.php:439
+#: lib/api.php:490 lib/api.php:525 lib/api.php:574 lib/api.php:620
+#: lib/api.php:661 lib/api.php:778 lib/api.php:865 lib/api.php:923
+#: lib/api.php:1012 lib/api.php:1231 lib/api.php:1289 lib/api.php:1371
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Verbinding mislukt: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Verbinding mislukt"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Adressen zoeken"
+
+#: config/sources.php.dist:833
+msgid "Contacts"
+msgstr "Contactpersonen"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Weergegeven adressen:"
+
+#: lib/Views/Browse.php:336
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Adressen in adreslijst: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopiëren"
+
+#: templates/addressbooks.inc:69
+msgid "Create"
+msgstr "Maken"
+
+#: templates/addressbooks.inc:56
+msgid "Create Address Book"
+msgstr "Adresboek maken"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Maak een nieuwe adreslijst in:"
+
+#: lib/Views/Contact.php:74
+msgid "Created"
+msgstr "Gemaakt"
+
+#: contact.php:86
+msgid "De_lete"
+msgstr "Verwi_jderen"
+
+#: lib/Views/DeleteContact.php:58 templates/addressbooks.inc:94
+#: templates/browse/actions.inc:3
+msgid "Delete"
+msgstr "Verwijderen"
+
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Verwijder %s"
+
+#: templates/addressbooks.inc:76
+msgid "Delete Address Book"
+msgstr "Adresboek verwijderen"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Verwijderen mislukt: (%s) %s"
+
+#: lib/Driver.php:1471
+msgid "Deleting contacts is not available."
+msgstr "Verwijderen van adressen is niet beschikbaar."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Verwijderen mislukt"
+
+#: config/attributes.php.dist:292
+msgid "Department"
+msgstr "Afdeling"
+
+#: templates/addressbooks.inc:138
+msgid "Description"
+msgstr "Beschrijving"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Directory"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Weergeven"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Weergaveopties"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Downloaden"
+
+#: templates/browse/row.inc:13
+msgid "Download vCard"
+msgstr "Download vCard"
+
+#: templates/addressbooks.inc:123 templates/browse/row.inc:21
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "Bewerken"
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr "\"%s\" bewerken"
+
+#: lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "%s bewerken"
+
+#: templates/addressbooks.inc:100
+msgid "Edit Address Books"
+msgstr "Adresboeken bewerken"
+
+#: config/attributes.php.dist:229
+msgid "Email"
+msgstr "E-mail"
+
+#: config/attributes.php.dist:235
+msgid "Emails"
+msgstr "E-mails"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Fout bij toevoegen van %d adressen aan adreslijst."
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr ""
+"Een fout bij toevoegen van %d van %d gevraagde adres(sen) aan adreslijst."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Een fout bij verwijderen van %d adres(sen)."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Een fout bij verwijderen van %d van %d gevraagde adres(sen)."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Een fout bij het verwijderen van %d adres(sen) uit adreslijst."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr ""
+"Een fout bij het verwijderen van %d van %d gevraagde adres(sen) uit "
+"adreslijst."
+
+#: lib/api.php:531
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Een fout bij het doorzoeken van het adresboek: %s"
+
+#: templates/data/export.inc:42 templates/browse/actions.inc:10
+msgid "Export"
+msgstr "Exporteren"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Adresboek exporteren"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Alleen de geselecteerde adressen exporteren."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Het volgende adresboek volledig exporteren."
+
+#: add.php:42 search.php:86 data.php:143 data.php:242 data.php:320
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Toegang tot adresboek mislukt: %s"
+
+#: lib/Views/Browse.php:208
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Toevoegen van %s aan %s mislukt: %s"
+
+#: lib/Views/Browse.php:342
+msgid "Failed to browse list"
+msgstr "Bladeren in lijst mislukt"
+
+#: lib/Views/Browse.php:369
+msgid "Failed to browse the directory"
+msgstr "Bladeren in directory mislukt"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Wijzigen van naam mislukt: (%s) %s; Oude DN =  %s, Nieuwe DN = %s, Root = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Vinden van toe te voegen object mislukt: %s"
+
+#: search.php:152
+msgid "Failed to search the address book"
+msgstr "Doorzoeken van het adresboek mislukt"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Doorzoeken van directory %s mislukt."
+
+#: config/sources.php.dist:532
+msgid "Favourite Recipients"
+msgstr "Favoriete ontvangers"
+
+#: config/attributes.php.dist:256
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/Forms/Contact.php:40
+msgid "Files"
+msgstr "Bestanden"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Vinden"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+msgid "Finish"
+msgstr "Afsluiten"
+
+#: config/attributes.php.dist:47
+msgid "First Name"
+msgstr "Voornaam"
+
+#: config/attributes.php.dist:318
+msgid "Freebusy URL"
+msgstr "Freebusy URL"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Van"
+
+#: config/attributes.php.dist:374
+msgid "Gender"
+msgstr "Geslacht"
+
+#: config/sources.php.dist:758
+msgid "Global Address Book"
+msgstr "Globale adresboek"
+
+#: templates/browse/row.inc:39
+msgid "Group"
+msgstr "Groep"
+
+#: config/attributes.php.dist:115
+msgid "Home Address"
+msgstr "Adres (privé)"
+
+#: config/attributes.php.dist:133
+msgid "Home City"
+msgstr "Woonplaats (privé)"
+
+#: config/attributes.php.dist:151
+msgid "Home Country"
+msgstr "Land (privé)"
+
+#: config/attributes.php.dist:241
+msgid "Home Phone"
+msgstr "Tel.nr. (privé)"
+
+#: config/attributes.php.dist:127
+msgid "Home Post Office Box"
+msgstr "Postbus (privé)"
+
+#: config/attributes.php.dist:145
+msgid "Home Postal Code"
+msgstr "Postcode (privé)"
+
+#: config/attributes.php.dist:139
+msgid "Home State/Province"
+msgstr "Staat of provincie (privé)"
+
+#: config/attributes.php.dist:121
+msgid "Home Street Address"
+msgstr "Thuisadres"
+
+#: config/sources.php.dist:649
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Adresboek importeren, stap %d"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Adresboeken importeren/exporteren"
+
+#: config/attributes.php.dist:350
+msgid "Initials"
+msgstr "Initialen"
+
+#: config/attributes.php.dist:356
+msgid "Instant Messenger"
+msgstr "Instant Messenger"
+
+#: lib/api.php:773 lib/api.php:860
+msgid "Invalid ID"
+msgstr "Ongeldig ID"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:306 lib/api.php:520
+#: lib/api.php:569 lib/api.php:615 lib/api.php:656 lib/api.php:769
+#: lib/api.php:856 lib/api.php:913 lib/api.php:1354
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Ongeldig adresboek: %s"
+
+#: lib/api.php:1358 lib/api.php:1432 lib/api.php:1489
+msgid "Invalid email"
+msgstr "Ongeldige e-mail"
+
+#: lib/api.php:1366
+msgid "Invalid entry"
+msgstr "Ongeldige invoer"
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "Ongeldige sleutel opgegeven."
+
+#: lib/api.php:1362
+msgid "Invalid name"
+msgstr "Ongeldige naam"
+
+#: lib/api.php:917
+msgid "Invalid objectId"
+msgstr "Ongeldig objectId"
+
+#: config/attributes.php.dist:268
+msgid "Job Title"
+msgstr "Beroepstitel"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Sleutel voor opslaan dient een UID te zijn, geen %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"LDAP ondersteuning is vereist, maar de LDAP module is niet beschikbaar of "
+"niet geladen."
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF Adresboek"
+
+#: config/attributes.php.dist:380
+msgid "Language"
+msgstr "Taal"
+
+#: lib/Views/Contact.php:80
+msgid "Last Modified"
+msgstr "Laatst gewijzigd"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Achternaam"
+
+#: config/attributes.php.dist:386
+msgid "Latitude"
+msgstr "Breedtegraad"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Adreslijst"
+
+#: config/sources.php.dist:223 config/sources.php.dist:897
+msgid "Location"
+msgstr "Locatie"
+
+#: config/attributes.php.dist:391
+msgid "Longitude"
+msgstr "Lengtegraad"
+
+#: config/attributes.php.dist:362
+msgid "Manager"
+msgstr "Manager"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "overeenkomend met"
+
+#: lib/api.php:281
+msgid "Maximum Number of Contacts"
+msgstr "Maximum aantal adressen"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Maximum aantal pagina's."
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menulijst"
+
+#: config/attributes.php.dist:59
+msgid "Middle Names"
+msgstr "Middelnamen"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "Ontbrekende DN in de LDAP bronconfiguratie."
+
+#: config/attributes.php.dist:251
+msgid "Mobile Phone"
+msgstr "Mobiele telefoon"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Wijzigen mislukt: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Meer opties..."
+
+#: lib/api.php:1474
+msgid "More than 1 entry found"
+msgstr "Meer dan 1 invoer gevonden"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Verplaatsen"
+
+#: templates/prefs/columnselect.inc:248
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Naar links"
+
+#: templates/prefs/columnselect.inc:250
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Naar rechts"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry adresboek"
+
+#: lib/api.php:1390
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Meerdere personen met adres [%s], maar geen met naam [%s] die al bestaat"
+
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "Mijn adresboek"
+
+#: addressbooks.php:174
+msgid "My Address Books"
+msgstr "Mijn adresboeken"
+
+#: templates/addressbooks.inc:130 config/attributes.php.dist:41
+msgid "Name"
+msgstr "Naam"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Naamformaat"
+
+#: config/attributes.php.dist:65
+msgid "Name Prefixes"
+msgstr "Naamvoorvoegsels"
+
+#: config/attributes.php.dist:71
+msgid "Name Suffixes"
+msgstr "Naamachtervoegsels"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Naam:"
+
+#: add.php:70 lib/Block/tree_menu.php:28
+msgid "New Contact"
+msgstr "Nieuw adres"
+
+#: lib/Forms/EditContact.php:112 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:174 templates/data/import.inc:46
+msgid "Next"
+msgstr "Volgende"
+
+#: config/attributes.php.dist:83
+msgid "Nickname"
+msgstr "Bijnaam"
+
+#: lib/api.php:1477 lib/api.php:1526
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Geen %s invoer gevonden voor %s"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Er zijn momenteel geen adresboeken beschikbaar. Importeren en exporteren is "
+"uitgeschakeld."
+
+#: search.php:72
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr ""
+"Er zijn momenteel geen adresboeken beschikbaar. Zoeken is uitgeschakeld."
+
+#: lib/api.php:1441
+msgid "No address books found."
+msgstr "Geen adresboeken gevonden."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Geen adressen gevonden"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Geen adressen die overeen komen met de huidige criteria."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Geen overeenkomende adressen"
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Er bestaat geen bron voor favoriete ontvangers."
+
+#: lib/api.php:682 lib/api.php:949
+msgid "No vCard data was found."
+msgstr "Geen vCard data gevonden."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Geen"
+
+#: lib/Views/Contact.php:49 lib/Views/DeleteContact.php:26
+#: lib/Views/EditContact.php:33
+msgid "Not Found"
+msgstr "Niet gevonden"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Niet gevonden"
+
+#: config/attributes.php.dist:306
+msgid "Notes"
+msgstr "Notities"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Aantal onderdelen per pagina"
+
+#: lib/api.php:789 lib/api.php:929
+msgid "Object not found"
+msgstr "Object niet gevonden."
+
+#: config/attributes.php.dist:274
+msgid "Occupation"
+msgstr "Beroep"
+
+#: config/attributes.php.dist:298
+msgid "Office"
+msgstr "Kantoor"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Na opslaan van deze optiepagina, zal het adresboek definitief worden "
+"verwijderd. Wanneer dit niet is wat u wilt, dient u uw selectie te wijzigen "
+"in \"Geen\"."
+
+#: lib/api.php:957
+msgid "Only one vcard supported."
+msgstr "Slechts één vcard ondersteund."
+
+#: config/sources.php.dist:230 config/sources.php.dist:903
+msgid "Organization"
+msgstr "Organisatie"
+
+#: config/sources.php.dist:231 config/sources.php.dist:905
+msgid "Other"
+msgstr "Andere"
+
+#: config/attributes.php.dist:324
+msgid "PGP Public Key"
+msgstr "Openbare PGP sleutel"
+
+#: config/attributes.php.dist:261
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Dit adres definitief verwijderen?"
+
+#: deletefile.php:36 lib/api.php:665 lib/api.php:782 lib/api.php:869
+#: lib/api.php:1159 lib/api.php:1375 lib/Driver.php:676 lib/Driver/sql.php:481
+msgid "Permission denied"
+msgstr "Toegang geweigerd"
+
+#: templates/addressbooks.inc:120
+msgid "Permissions"
+msgstr "Rechten"
+
+#: config/sources.php.dist:221 config/sources.php.dist:893
+msgid "Personal"
+msgstr "Persoonlijk"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine adresboek"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Naam voor de nieuwe adreslijst:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+msgid "Previous"
+msgstr "Vorige"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Query mislukt: (%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Lezen mislukt: (%s) %s"
+
+#: lib/Driver.php:1455
+msgid "Reading contacts is not available."
+msgstr "Lezen van adressen is niet beschikbaar."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Adresboek verwijderen"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Kolom verwijderen"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Uit deze lijst verwijderen."
+
+#: lib/Driver.php:1493
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Verwijderen van gebruikersdata wordt niet ondersteund door het huidige "
+"adresboek opslag stuurprogramma."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Vervang het bestaande adresboek door het geimporteerde adresboek? "
+"<strong>Waarschuwing: Dit verwijdert alle invoer uit uw huidige adresboek.</"
+"strong>"
+
+#: lib/Driver.php:573
+msgid "Requested object not found."
+msgstr "Aangevraagd object niet gevonden."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Herstel standaardinstellingen"
+
+#: config/attributes.php.dist:330
+msgid "S/MIME Public Certificate"
+msgstr "Openbaar S/MIME certificaat"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS mislukt: (%s) %s"
+
+#: lib/Forms/EditContact.php:26 templates/addressbooks.inc:147
+msgid "Save"
+msgstr "Opslaan"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Zoekopdracht bewaren als virtueel adresboek?"
+
+#: lib/Driver.php:1481
+msgid "Saving contacts is not available."
+msgstr "Opslaan van adressen is niet beschikbaar."
+
+#: lib/Block/tree_menu.php:59 templates/block/minisearch.inc:26
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Zoeken"
+
+#: lib/api.php:1236
+msgid "Search failed"
+msgstr "Zoeken mislukt"
+
+#: lib/api.php:1380 lib/api.php:1386 lib/api.php:1395 lib/api.php:1408
+#, php-format
+msgid "Search failed: %s"
+msgstr "Zoeken mislukt: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Zoeken naar: "
+
+#: lib/Driver.php:1440
+msgid "Searching is not available."
+msgstr "Zoeken is niet beschikbaar."
+
+#: templates/addressbooks.inc:84
+msgid "Select an address book to delete"
+msgstr "Selecteer een adresboek om te verwijderen"
+
+#: templates/addressbooks.inc:109
+msgid "Select an address book to edit"
+msgstr "Selecteer een adresbeok om te bewerken"
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Selecteer adressen"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Selecteer het adresboek om vanuit te exporteren:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Selecteer de agenda om naar te importeren:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Selecteer de tekenset van het bronbestand:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Selecteer het exportformaat:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Selecteer het importbestand:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Selecteer het formaat van het bronbestand:"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Selecteer het formaat voor het weergeven van namen:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Selecteer de standaardweergave, sorteer- en paginaopties."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Selecteer welke velden worden weergegeven in de adreslijsten."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Selecteer het formaat voor het weergeven van namen."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Geselecteerd adresboek \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "%s weergeven"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Beide weergeven"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Adressen weergeven"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Lijsten weergeven"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "Sorteervolgorde"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Sorteren op %s"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Alleen sorteren op %s"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Sorteren op %s, daarna op %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Bron:"
+
+#: lib/api.php:274
+msgid "Sources"
+msgstr "Bronnen"
+
+#: config/attributes.php.dist:101
+msgid "Spouse"
+msgstr "Echtgenoot"
+
+#: lib/Views/Browse.php:258 lib/Views/Browse.php:298
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d adressen met succes toegevoegd aan adreslijst."
+
+#: lib/Views/Browse.php:212
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s met succes toegevoegd aan %s"
+
+#: lib/Views/Browse.php:288
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Adreslijst \"%s\" met success aangemaakt."
+
+#: search.php:127
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Virtueel adresboek \"%s\" met success aangemaakt"
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d adres(sen) met succes verwijderd."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d adres(sen) met succes uit adreslijst verwijderd."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Tab gescheiden waarden"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Doeladresboek"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Doeladreslijst"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Het %s bestand bevatte geen adressen."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"De VFS backend heeft een configuratie nodig om uploaden van bijlagen te "
+"gebruiken."
+
+#: lib/Driver.php:1411
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Het adresboek \"%s\" bestaat niet."
+
+#: addressbooks.php:104
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "Het adresboek \"%s\" is met succes aangemaakt."
+
+#: addressbooks.php:130
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Het adresboek \"%s\" is met succes verwijderd."
+
+#: addressbooks.php:151
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "Het adresboek \"%s\" is met succes bijgewerkt."
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Het adresboek kon niet worden geleegd: %s"
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "Het gevraagde adres bestaat niet."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Het bestand \"%s\" is verwijderd."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "Ondanks waarschuwingen kan de import doorgaan"
+
+#: lib/Views/Contact.php:59 lib/Views/DeleteContact.php:36
+#: lib/Views/EditContact.php:43
+msgid "The requested contact was not found."
+msgstr "Het gevraagde adres is niet gevonden."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Er zijn geen door te bladeren adresboeken."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Er zijn geen beschrijfbare adresboeken. Geen van de beschikbare adresboeken "
+"zijn geconfigureerd voor het toevoegen van nieuwe invoer. Wanneer u denkt "
+"dat dit een fout betreft, neem dan contact op met de systeembeheerder."
+
+#: search.php:123
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Een probleem bij het maken van het virtuele adresboek: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Er heeft zich een fout voorgedaan bij het toevoegen van het nieuwe adres. "
+"Neem contact op met uw systeembeheerder voor verdere hulp."
+
+#: lib/Views/Browse.php:308
+msgid "There was an error creating a new list."
+msgstr "Een fout bij het maken van een nieuwe lijst."
+
+#: addressbooks.php:96 addressbooks.php:102
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Een fout bij het maken van dit adresboek: %s"
+
+#: lib/Views/Browse.php:218
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Een fout bij het verwijderen van \"%s\" uit het bronadresboek."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Een fout bij het verwijderen van dit adres: %s"
+
+#: lib/Views/Browse.php:348
+msgid "There was an error displaying the list"
+msgstr "Fout bij het weergeven van de lijst"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Een fout bij het importeren van de data: %s"
+
+#: lib/api.php:678 lib/api.php:944
+msgid "There was an error importing the iCalendar data."
+msgstr "Een fout bij het importeren van de iCalendardata."
+
+#: lib/api.php:227
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Een fout bij het verwijderen van een adresboek: %s"
+
+#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Een fout bij het verwijderen van dit adrsboek: %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Er heeft zich een fout voorgedaan bij het toevoegen van het adres. Neem "
+"contact op met uw systeembeheerder voor verdere hulp."
+
+#: addressbooks.php:149
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Een fout bij het bijwerken van dit adresboek: %s"
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Er waren geen adressen om te exporteren."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Deze adresboeken worden in deze volgorde weergegeven"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Deze kolommen worden in deze volgorde weergegeven"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "Dit bestandsformaat wordt niet ondersteund."
+
+#: lib/api.php:1399 lib/api.php:1412
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Deze persoon heeft reeds een %s invoer in het adresboek"
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Dit wordt het standaard adresboek voor het toevoegen van adressen."
+
+#: config/attributes.php.dist:221
+msgid "Time Zone"
+msgstr "Tijdzone"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Niet in staat om de eigenaar van het adres te vinden."
+
+#: lib/Driver.php:1333 lib/Turba.php:643
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Niet in staat om de definitie van %s te laden."
+
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "Niet in staat te zoeken."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "Herstel wijzigingen"
+
+#: config/attributes.php.dist:340
+msgid "Unfiled"
+msgstr "Onbenoemd"
+
+#: lib/api.php:711 lib/api.php:814 lib/api.php:962
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Niet ondersteund Content-Type: %s"
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Adres weergeven"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Standaardweergave:"
+
+#: config/attributes.php.dist:312
+msgid "Website URL"
+msgstr "Website URL"
+
+#: config/attributes.php.dist:165
+msgid "Work Address"
+msgstr "Werkadres"
+
+#: config/attributes.php.dist:183
+msgid "Work City"
+msgstr "Woonplaats (werk)"
+
+#: config/attributes.php.dist:201
+msgid "Work Country"
+msgstr "Land (werk)"
+
+#: config/attributes.php.dist:246
+msgid "Work Phone"
+msgstr "Tel.nr. (werk)"
+
+#: config/attributes.php.dist:177
+msgid "Work Post Office Box"
+msgstr "Postbus (werk)"
+
+#: config/attributes.php.dist:195
+msgid "Work Postal Code"
+msgstr "Tel.nr. (werk)"
+
+#: config/attributes.php.dist:189
+msgid "Work State/Province"
+msgstr "Staat of provincie (werk)"
+
+#: config/attributes.php.dist:171
+msgid "Work Street Address"
+msgstr "Werkadres"
+
+#: add.php:48 data.php:251 lib/Views/Browse.php:159 lib/Views/Browse.php:271
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "U mag niet meer dan %d adressen aanleggen in \"%s\"."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "U kunt geen invoer aan uw virtuele adresboek toevoegen."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "U kunt geen nieuwe adressen aan uw virtuele doeladresboek toevoegen"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "U kunt geen adressen uit uw virtuele adresboek verwijderen"
+
+#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
+#: lib/Views/EditContact.php:49
+msgid "You do not have permission to view this contact."
+msgstr "U heeft geen recht om dit adres te bekijken."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "U heeft geen recht om dit object te bekijken."
+
+#: addressbooks.php:59
+msgid "You do not have permissions to delete this source."
+msgstr "U heeft geen rechten om deze bron te verwijderen."
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"U dient een Net_LDAP PEAR bibliotheek geinstalleerd te hebben om de schema "
+"check functie te kunnen gebruiken."
+
+#: search.php:110
+msgid "You must provide a name for virtual address books."
+msgstr "U dient een naam voor het virtuele adresboek op te geven."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "U dient een doeladresboek te selecteren."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "U dient een doeladresboek te selecteren."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "U dient tenminste eerst één adres te selecteren."
+
+#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+msgid "You only have permission to view this contact."
+msgstr "U heeft alleen recht om dit adres te bekijken."
+
+#: lib/Views/Browse.php:355
+msgid "Your default address book is not browseable."
+msgstr "U kunt niet bladeren in uw standaard adresboek."
+
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "_Bladeren"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Adressen"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Ver_wijderen"
+
+#: contact.php:82
+msgid "_Edit"
+msgstr "_Bewerken"
+
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "_Import/Export"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Adreslijsten"
+
+#: lib/Turba.php:582
+msgid "_My Address Books"
+msgstr "_Mijn adresboeken"
+
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "_Nieuw adres"
+
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "A_fdrukken"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Uit deze lijst verwijderen."
+
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "_Zoeken"
+
+#: contact.php:79
+msgid "_View"
+msgstr "_Bekijken"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "toenemend"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "adres"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "contacts.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "afnemend"
+
+#: config/attributes.php.dist:377
+msgid "female"
+msgstr "vrouw"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "in %s"
+
+#: config/attributes.php.dist:377
+msgid "male"
+msgstr "man"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "geen opmaak"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "geen"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "Aan een adreslijst"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "Naar ander adresboek:"
+
+#: data.php:62 templates/data/import.inc:15 templates/data/export.inc:15
+#: templates/browse/column_headers.inc:13
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/nn_NO.po b/turba/po/nn_NO.po
new file mode 100644 (file)
index 0000000..00f98a7
--- /dev/null
@@ -0,0 +1,373 @@
+# Turba Norwegian Nynorsk translation
+# Copyright 2002 Per-Stian Vatne
+# This file is distributed under the same license as the Turba package.
+# Per-Stian Vatne <psv@orsta.org>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.0-cvs\n"
+"POT-Creation-Date: 2002-06-08 22:16+0200\n"
+"PO-Revision-Date: 2002-06-08 22:44+0100\n"
+"Last-Translator: Per-Stian Vatne <psv@orsta.org>\n"
+"Language-Team: Norwegian Nynorsk <nynorsk@orsta.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, c-format
+msgid "%s file successfully imported"
+msgstr "Fila %s vart importert"
+
+msgid "Add Contact ..."
+msgstr "Legg til kontakt..."
+
+msgid "Add a new contact"
+msgstr "Legg til ny kontakt"
+
+msgid "Add failed"
+msgstr "Kunne ikkje legge til"
+
+msgid "Add"
+msgstr "Legg til"
+
+msgid "Address Book Listing"
+msgstr "Adresseboklisting"
+
+msgid "Addressbook is read-only."
+msgstr "Adresseboka er berre lesbar"
+
+msgid "Advanced Search"
+msgstr "Avansert søk"
+
+msgid "Alias"
+msgstr "Alias"
+
+msgid "Available Columns:"
+msgstr "Tilgjengelege kolonner:"
+
+msgid "Browse"
+msgstr "Bla gjennom"
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Cell Phone"
+msgstr "Mobiltelefon"
+
+msgid "Choose the order of the columns to display in the address list."
+msgstr "Vel rekkefølgja på kolonnene som skal visast i adresselista."
+
+msgid "Clear Search"
+msgstr "Nullstill søk"
+
+msgid "Column Options"
+msgstr "Alternativ for kolonne"
+
+msgid "Company"
+msgstr "Firma"
+
+#, c-format
+msgid "Contents of %s"
+msgstr "Innhald i %s"
+
+msgid "Default Display"
+msgstr "Standardvising"
+
+msgid "Delete"
+msgstr "Slett"
+
+msgid "Deletion failed"
+msgstr "Kunne ikkje slette"
+
+msgid "Directory"
+msgstr "Katalog"
+
+msgid "Display Options"
+msgstr "Visingsalternativ"
+
+#, c-format
+msgid "Edit '%s'"
+msgstr "Endre '%s'"
+
+msgid "Edit"
+msgstr "Endre"
+
+msgid "Email"
+msgstr "E-post"
+
+msgid "Error while searching directory."
+msgstr "Feil ved søking i katalog."
+
+msgid "Export Addressbook"
+msgstr "Eksporter adressebok"
+
+msgid "Export"
+msgstr "Eksport"
+
+msgid "Failed to access the specified address book."
+msgstr "Fekk ikkje tilgang til den spesifiserte adresseboka."
+
+#, c-format
+msgid "Failed to browse %s."
+msgstr "Kunne ikkje bla i %s."
+
+msgid "Failed to connect to the specified directory."
+msgstr "Kunne ikkje kople til den spesifiserte katalogen."
+
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "Kunne ikkje søke i katalogen: %s"
+
+msgid "Failed to search the specified directory."
+msgstr "Kunne ikkje søke i den spesifiserte katalogen."
+
+msgid "Fax"
+msgstr "Faks"
+
+msgid "Find"
+msgstr "Finn"
+
+msgid "From"
+msgstr "Frå"
+
+msgid "Help"
+msgstr "Hjelp"
+
+msgid "Home Address"
+msgstr "Adresse, privat"
+
+msgid "Home Phone"
+msgstr "Telefon, privat"
+
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr "Dersom du importerer CSV-data; inneheld den første rada feltnamn?"
+
+msgid "Illegal or malformed form data."
+msgstr "Ulovleg eller feil utforma data."
+
+msgid "Import Addressbook"
+msgstr "Importer adressebok"
+
+msgid "Import"
+msgstr "Import"
+
+msgid "Import/Export Addressbooks"
+msgstr "Importer/eksporter adressebøker"
+
+msgid "Import/Export"
+msgstr "Import/eksport"
+
+msgid "Invalid addressbook."
+msgstr "Ugyldig adressebok."
+
+msgid "Invalid e-mail address."
+msgstr "Ugyldig e-postadresse."
+
+msgid "Invalid email."
+msgstr "Ugyldig e-postadresse."
+
+msgid "Invalid name."
+msgstr "Ugyldig namn."
+
+msgid "Invalid public key."
+msgstr "Ugyldig offentleg nøkkel."
+
+msgid "Language"
+msgstr "Språk"
+
+msgid "List"
+msgstr "List"
+
+msgid "Matching"
+msgstr "samsvarande med"
+
+msgid "More than 1 entry returned."
+msgstr "Meir enn 1 oppføring returnert."
+
+msgid "Mulberry addressbook sucessfully imported"
+msgstr "Mulberry-adressebok vart importert"
+
+msgid "Name"
+msgstr "Namn"
+
+#, c-format
+msgid "No public key found for %s."
+msgstr "Fann ingen offentleg nøkkel for %s."
+
+msgid "None of the available address books are configured to allow you to add new entries to them. If you believe this is an error, please contact your system administrator."
+msgstr "Ingen av deil tilgjengelege adressebøkene er konfigurert til å la deg legge til nye oppføringar. Dersom du meinar dette er feil, ver venleg og kontakt din systemadministrator."
+
+msgid "Notes"
+msgstr "Notatar"
+
+msgid "Options"
+msgstr "Alternativ"
+
+msgid "PGP Public Key"
+msgstr "PGP offentleg nøkkel"
+
+msgid "Pine addressbook sucessfully imported"
+msgstr "Pine-adressebok vart importert"
+
+msgid "Please choose an address book to add a contact to."
+msgstr "Vel ei adressebok for å legge til ei kontakt."
+
+msgid "Please select a directory:"
+msgstr "Vel ein katalog:"
+
+msgid "Problem?"
+msgstr "Problem?"
+
+msgid "Reset"
+msgstr "Nullstill"
+
+msgid "Save Changes"
+msgstr "Lagre endringar"
+
+msgid "Save"
+msgstr "Lagre"
+
+msgid "Search Results"
+msgstr "Søkeresultat"
+
+msgid "Search"
+msgstr "Søk"
+
+msgid "Search&nbsp;Results"
+msgstr "Søkeresultat"
+
+msgid "Select the destination to import to:"
+msgstr "Vel mål for import:"
+
+msgid "Select the file to import:"
+msgstr "Vel fil som skal importerast:"
+
+msgid "Select the format to export to:"
+msgstr "Vel format å eksportere til:"
+
+msgid "Select the format to import from:"
+msgstr "Vel format å importere frå:"
+
+msgid "Select the source to export from:"
+msgstr "Vel kjelde å eksportere frå:"
+
+msgid "Select view to display by default."
+msgstr "Vel vising som skal brukast som standard."
+
+msgid "Select which fields to display in the address lists."
+msgstr "Vel kva felt som skal visast i adresselistene."
+
+msgid "Select your preferred language:"
+msgstr "Vel ønska språk:"
+
+msgid "Selected Columns:"
+msgstr "Tilgjengelege kolonner:"
+
+#, c-format
+msgid "Send mail to %s"
+msgstr "Send post til %s"
+
+msgid "Set your preferred display language."
+msgstr "Set ønska språk."
+
+msgid "Some of Turba's configuration files are missing:"
+msgstr "Nokre av Turba sine konfigurasjonsfiler manglar:"
+
+msgid "The data got lost."
+msgstr "Dataene forsvann"
+
+msgid "The data was lost"
+msgstr "Dataene forsvann"
+
+msgid "The file contained no data."
+msgstr "Fila inneheld ingen data."
+
+msgid "There are no browseable address books."
+msgstr "Ingen adressebøker tilgjengeleg for gjennomsyning."
+
+#, c-format
+msgid "There are no entries in %s."
+msgstr "Ingen oppføringar i %s."
+
+msgid "There are no writeable address books."
+msgstr "Ingen adressebøker med skrivetilgang."
+
+msgid "There was a problem with the file upload. The file may have been larger than the maximum allowed size."
+msgstr "Problem ved opplasting av fil. Fila var kanskje større enn den maksimalt tillatte storleiken."
+
+msgid "There was an error adding this object. Contact your system administrator for further help."
+msgstr "Feil når objektet skulle leggast til. Kontakt din systemadministrator for vidare hjelp."
+
+msgid "There was an error deleting this object. Contact your system administrator for further help."
+msgstr "Feil når objektet skulle slettast. Kontakt din systemadministrator for vidare hjelp."
+
+msgid "There was an error importing the data."
+msgstr "Det skjedde ein feil ved import av data."
+
+msgid "There was an error importing the uploaded file"
+msgstr "Det skjedde ein feil ved import av den opplasta fila"
+
+msgid "This file controls the default preferences for Turba, and also controls which preferences users can alter."
+msgstr "Denne fila kontrollerer standardinnstillingane for Turba, og kontrollerer også kva innstillingar brukarar kan endre."
+
+msgid "This file controls the stylesheet that is used to set colors and fonts in addition to or overriding Horde defaults."
+msgstr "Denne fila kontrollerer stilarket som blir brukt til å definere fargar og skrifttypar, og legg til eller overstyrer standardverdiane til Horde."
+
+msgid "This file defines the Turba global attribute names and types - names, email addresses, etc."
+msgstr "Denne fila definerer dei globale attributtnamna og -typane for Turba - namn, e-postadresser, osb."
+
+msgid "This file defines the list of available sources for Turba."
+msgstr "Denne fila definerer lista over tilgjengelege kjelder for Turba."
+
+msgid "This is the main Turba configuration file. It contains paths and options for the Turba scripts."
+msgstr "Dette er hovedkonfigurasjonsfila for Turba. Den inneheld katalognamn og alternativ for skripta i Turba."
+
+msgid "This person already has a public key in the addressbook."
+msgstr "Denne personen har allereie ein offentleg nøkkel i adresseboka."
+
+msgid "This person is already in your addressbook."
+msgstr "Denne personen er allereie i adresseboka di."
+
+msgid "Title"
+msgstr "Tittel"
+
+msgid "Turba is not properly configured"
+msgstr "Turba er ikkje ordentleg konfigurert"
+
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "Kunne ikkje laste inn definisjonen til %s."
+
+msgid "User Options"
+msgstr "Brukaralternativ"
+
+msgid "View to display by default:"
+msgstr "Bruk denne visinga som standard:"
+
+msgid "Work Address"
+msgstr "Adresse, arbeid"
+
+msgid "Work Phone"
+msgstr "Telefon, arbeid"
+
+msgid "You didn't map any fields from the imported file to the corresponding fields in Turba."
+msgstr "Du kopla ingen felt frå den importerte fila til korresponderande felt i Turba."
+
+msgid "Your Information"
+msgstr "Din informasjon"
+
+msgid "[Edit]"
+msgstr "[Endre]"
+
+msgid "add column"
+msgstr "legg til kolonne"
+
+msgid "move left"
+msgstr "flytt venstre"
+
+msgid "move right"
+msgstr "flytt høgre"
+
+msgid "remove column"
+msgstr "fjern kolonne"
+
diff --git a/turba/po/pl_PL.po b/turba/po/pl_PL.po
new file mode 100644 (file)
index 0000000..01b64e0
--- /dev/null
@@ -0,0 +1,1526 @@
+# Polish translations for Turba package
+# Polskie tlumaczenia dla pakietu Turba.
+# Copyright 2007-2009 The Horde Project
+# This file is distributed under the same license as the Horde package.
+# Automatically generated, 2007.
+# Mariusz Zynel <mariusz@math.uwb.edu.pl>, 2001.
+# Piotr Roszatycki <dexter@debian.org>, 2001.
+# Krzysztof Kozlowski <kozik1@o2.pl>, 2005.
+# Piotr Adamcio <adamcios@o2.pl>, 2007.
+# Tadeusz Lesiecki <lesiecki@tmtsystem.pl>, 2007.
+# Piotr Tarnowski <drfugazi@drfugazi.eu.org>, 2007.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba H3 (2.2-cvs)\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2007-06-27 12:56+0200\n"
+"PO-Revision-Date: 2007-03-31 09:57+0200\n"
+"Last-Translator: Piotr Tarnowski <drfugazi@drfugazi.eu.org>\n"
+"Language-Team: Polish <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Dodaj ksi±¿kê adresow± IMSP"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " Usuñ ksi±¿kê adresow± IMSP"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" juz istnieje i nie zosta³ zaimportowany."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" zaktualizowano, ale zapisanie pliku nie powiod³o siê: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" zaktualizowano."
+
+#: lib/Views/Browse.php:191
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" nie zosta³ skopiowany poniewa¿ to jest lista."
+
+#: lib/Views/Browse.php:189
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" nie zosta³ przeniesiony poniewa¿ to jest lista."
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Imiê Nazwisko\" (np. Jan Kowalski)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Nazwisko, Imiê\" (np. Kowalski, Jan)"
+
+#: lib/Forms/AddContact.php:80
+#, php-format
+msgid "%s added."
+msgstr "dodano %s."
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "Pomy¶lnie zaimportowano %s."
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s do %s z %s"
+
+#: lib/Turba.php:504
+#, php-format
+msgid "%s's Address Book"
+msgstr "Ksi±zka adresowa - %s"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Wymagana jest przegl±darka, która obs³uguje iFrames"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Brak dostêpu do %s"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Dodaj"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Dodaj kontakt"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Dodaj ksi±¿kê adresow±"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Dodaj kolumnê"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Dodaj plik"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Dodaj do"
+
+#: lib/Driver.php:1348
+msgid "Adding contacts is not available."
+msgstr "Dodawanie kontaktów nie jest dozwolone."
+
+#: templates/addressbooks.inc:105
+msgid "Address Book"
+msgstr "Ksi±¿ka adresowa"
+
+#: lib/Views/Browse.php:77 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Lista ksi±¿ek adresowych"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Ksi±¿ki adresowe"
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "Ksi±¿ka adresowan pomy¶lnie wyczyszczona."
+
+#: templates/addressbooks.inc:80
+msgid "Address book to delete "
+msgstr "Ksi±¿ka adresowa do usniêcia "
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Ksi±¿ki adresowe, które nie bêd± wy¶wietlane:"
+
+#: search.php:161 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Wyszukiwanie zaawansowane"
+
+#: config/attributes.php.dist:74
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Wszystko"
+
+#: lib/api.php:657
+msgid "Already Exists"
+msgstr "Ju¿ istnieje"
+
+#: config/attributes.php.dist:254
+msgid "Anniversary"
+msgstr "Rocznica"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Czy na pewno chcesz usun±æ %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Czy na pewno chcesz usun±æ wybrane kontakty?"
+
+#: templates/addressbooks.inc:45
+msgid "Are you sure you want to delete the addressbook: "
+msgstr "Czy na pewno chcesz skasowaæ tê ksi±¿kê adresow±: "
+
+#: search.php:158 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Wyszukiwanie proste"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "B³±d dowi±zania: (%s) %s"
+
+#: config/attributes.php.dist:194
+msgid "Birthday"
+msgstr "Urodziny"
+
+#: lib/Driver.php:468
+#, php-format
+msgid "Birthday of %s"
+msgstr "Urodziny %s"
+
+#: contact.php:94 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Pusta nazwa"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Oba"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Przegl±daj"
+
+#: config/attributes.php.dist:189
+msgid "Business Category"
+msgstr "Kategoria biznesowa"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Nie mo¿na dodaæ grupy do niej samej."
+
+#: lib/Driver/kolab.php:596 lib/Driver/kolab.php:873
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Nie mo¿na usun±æ wszystkich wpisów ksi±¿ki adresowej dla %s"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Zmieñ sortowanie %s na %s"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Zaznacz wszystko/nic"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Zaznacz wszystko/nic"
+
+#: config/attributes.php.dist:265
+msgid "Children"
+msgstr "Podrzêdne"
+
+#: templates/addressbooks.inc:60
+msgid "Choose a name"
+msgstr "Wybierz nazwê"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Wybierz ksi±¿kê adresow±"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "Wybierz ksi±¿kê adresow±:"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Wybierz, które ksi±¿ki adresowe wy¶wietlaæ i w jakiej kolejno¶ci:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Wybierz, której ksi±¿ki adresowej u¿ywaæ."
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Wybierz, które kolumny wy¶wietlaæ i w jakiej kolejno¶ci:"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Zamknij"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Zamknij wyszukiwanie"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Opcje kolumn"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Kolumny, które nie bêd± wy¶wietlane:"
+
+#: templates/data/export.inc:12 templates/data/import.inc:13
+msgid "Comma separated values"
+msgstr "Warto¶ci oddzielane przecinkami"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Warto¶ci rozdzielane przecinkami (M$ Outlook)"
+
+#: config/attributes.php.dist:86
+msgid "Company"
+msgstr "Firma"
+
+#: config/attributes.php.dist:154
+msgid "Company Address"
+msgstr "Adres firmy"
+
+#: lib/api.php:362 lib/api.php:407 lib/api.php:457 lib/api.php:506
+#: lib/api.php:552 lib/api.php:593 lib/api.php:710 lib/api.php:797
+#: lib/api.php:855 lib/api.php:939 lib/api.php:1146 lib/api.php:1195
+#: lib/api.php:1271
+#, php-format
+msgid "Connection failed: %s"
+msgstr "B³±d po³±czenia: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "B³±d po³±czenia"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Wyszukiwanie kontaktów"
+
+#: config/sources.php.dist:793
+msgid "Contacts"
+msgstr "Kontakty"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Wy¶wietlane kontakty:"
+
+#: lib/Views/Browse.php:330
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Kontakty na li¶cie: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopiuj"
+
+#: templates/addressbooks.inc:69
+msgid "Create"
+msgstr "Utwórz"
+
+#: templates/addressbooks.inc:56
+msgid "Create Address Book"
+msgstr "Utwórz ksi±¿kê adresow±"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Utwórz now± listê kontaktów w:"
+
+#: lib/Views/Contact.php:58
+msgid "Created"
+msgstr "Utworzono"
+
+#: contact.php:83
+msgid "De_lete"
+msgstr "Usuñ"
+
+#: templates/addressbooks.inc:94 templates/browse/actions.inc:3
+#: lib/Views/DeleteContact.php:58
+msgid "Delete"
+msgstr "Usuñ"
+
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Usuñ %s"
+
+#: templates/addressbooks.inc:76
+msgid "Delete Address Book"
+msgstr "Usuñ ksi±¿kê adresow±"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "B³±d przy usuwaniu: (%s) %s"
+
+#: lib/Driver.php:1356
+msgid "Deleting contacts is not available."
+msgstr "Usuwanie kontaktów jest niedostêpne."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Usuwanie nie powiod³o siê"
+
+#: config/attributes.php.dist:229
+msgid "Department"
+msgstr "Dzia³"
+
+#: templates/addressbooks.inc:134
+msgid "Description"
+msgstr "Opis"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Katalog"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Wy¶wietlanie"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Opcje wy¶wietlania"
+
+#: lib/Object.php:346
+msgid "Download"
+msgstr "Pobierz"
+
+#: templates/browse/row.inc:13
+msgid "Download vCard"
+msgstr "Pobierz vCard"
+
+#: config/attributes.php.dist:59
+msgid "Dr"
+msgstr "Dr"
+
+#: templates/addressbooks.inc:121 templates/browse/actions.inc:6
+#: templates/browse/column_headers.inc:10 templates/browse/row.inc:21
+msgid "Edit"
+msgstr "Edytuj"
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Edytuj \"%s\""
+
+#: lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Edycja %s"
+
+#: templates/addressbooks.inc:100
+msgid "Edit Address Books"
+msgstr "Edytuj ksi±¿ki adresowe"
+
+#: config/attributes.php.dist:62
+msgid "Email"
+msgstr "Adres email"
+
+#: config/attributes.php.dist:68
+msgid "Emails"
+msgstr "Adresy email"
+
+#: lib/Views/Browse.php:256 lib/Views/Browse.php:295
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "B³±d podczas dodawania %d kontaktu(ów) do listy."
+
+#: lib/Views/Browse.php:258 lib/Views/Browse.php:297
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "B³±d podczas dodawania %d z %d kontaktu(ów) do listy."
+
+#: lib/Views/Browse.php:133
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "B³±d podczas usuwania %d kontaktu(ów)."
+
+#: lib/Views/Browse.php:135
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "B³±d podczas usuwania %d z %d kontaktu(ów)."
+
+#: lib/Views/Browse.php:116
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "B³±d podczas usuwania %d kontaktu(ów) z listy."
+
+#: lib/Views/Browse.php:118
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "B³±d podczas usuwania %d z %d kontaktu(ów) z listy."
+
+#: lib/api.php:463
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "B³±d podczas wyszukiwania w ksi±¿ce adresowej: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Eksportuj"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Export ksi±¿ki adresowej"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Eksport tylko wybranych kontaktów."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Eksportuj w ca³o¶ci nastêpuj±c± ksi±¿kê adresow±."
+
+#: search.php:86 data.php:143 data.php:242 data.php:320 add.php:42
+#: lib/Views/Browse.php:83 lib/Views/Browse.php:151 lib/Views/Browse.php:179
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "B³±d podczas dostêpu do ksi±¿ki adresowej: %s"
+
+#: lib/Views/Browse.php:207
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "B³±d podczas dodawania %s do %s: %s"
+
+#: lib/Views/Browse.php:336
+msgid "Failed to browse list"
+msgstr "Nie mo¿na przegl±daæ listy"
+
+#: lib/Views/Browse.php:363
+msgid "Failed to browse the directory"
+msgstr "Nie mo¿na przegl±daæ katalogu"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Nie mo¿na zmieniæ nazwy: (%s) %s; Stary DN = %s, Nowy DN = %s, Korzeñ = %s"
+
+#: lib/Views/Browse.php:185
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Nie mo¿na odnale¼æ obiektów do dodania: %s"
+
+#: search.php:152
+msgid "Failed to search the address book"
+msgstr "Nie mo¿na przeszukiwaæ ksi±¿ki adresowej"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Nie mo¿na przeszukiwaæ katalogu: %s"
+
+#: config/attributes.php.dist:177
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/Forms/Contact.php:40
+msgid "Files"
+msgstr "Pliki"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Znajd¼"
+
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:155
+msgid "Finish"
+msgstr "Zakoñcz"
+
+#: config/attributes.php.dist:46
+msgid "First Name"
+msgstr "Imiê"
+
+#: config/attributes.php.dist:218
+msgid "Freebusy URL"
+msgstr "URL o dostêpno¶ci"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "W"
+
+#: config/sources.php.dist:723
+msgid "Global Address Book"
+msgstr "Globalna ksi±¿ka adresowa"
+
+#: templates/browse/row.inc:39
+msgid "Group"
+msgstr "Grupa"
+
+#: config/attributes.php.dist:92
+msgid "Home Address"
+msgstr "Adres domowy"
+
+#: config/attributes.php.dist:103
+msgid "Home City"
+msgstr "Miasto zamieszkania"
+
+#: config/attributes.php.dist:118
+msgid "Home Country"
+msgstr "Kraj zamieszkania"
+
+#: config/attributes.php.dist:160
+msgid "Home Phone"
+msgstr "Telefon domowy"
+
+#: config/attributes.php.dist:113
+msgid "Home Postal Code"
+msgstr "Kod pocztowy"
+
+#: config/attributes.php.dist:108
+msgid "Home State/Province"
+msgstr "Stan/prowincja"
+
+#: config/attributes.php.dist:98
+msgid "Home Street Address"
+msgstr "Ulica"
+
+#: config/sources.php.dist:614
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Import ksi±¿ki adresowej, krok %d"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Import/Eksport ksi±¿ki adresowej"
+
+#: config/attributes.php.dist:244
+msgid "Initials"
+msgstr "Inicja³y"
+
+#: lib/api.php:705 lib/api.php:792
+msgid "Invalid ID"
+msgstr "Nieprawid³owy ID"
+
+#: lib/api.php:274 lib/api.php:452 lib/api.php:501 lib/api.php:547
+#: lib/api.php:588 lib/api.php:701 lib/api.php:788 lib/api.php:845
+#: lib/api.php:1254
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Nieprawid³owa ksi±¿ka adresowa: %s"
+
+#: lib/api.php:1258 lib/api.php:1332 lib/api.php:1388
+msgid "Invalid email"
+msgstr "Nieprawid³owy adres email"
+
+#: lib/api.php:1266
+msgid "Invalid entry"
+msgstr "Nieprawid³owy wpis"
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "Podano nieprawid³owy klucz."
+
+#: lib/api.php:1262
+msgid "Invalid name"
+msgstr "Nieprawid³owa nazwa"
+
+#: lib/api.php:849
+msgid "Invalid objectId"
+msgstr "Nieprawid³owy objectId"
+
+#: lib/Driver/kolab.php:831 lib/Driver/kolab.php:853
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Kluczem do zapisu musi byæ UID a nie %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"Wsparcie dla LDAP jest wymagane, lecz odpowiedni modu³ LDAP jest niedostêpny "
+"lub nie za³adowany."
+
+#: data.php:65 templates/data/export.inc:16 templates/data/import.inc:18
+msgid "LDIF Address Book"
+msgstr "Ksi±¿ka adresowa LDIF"
+
+#: lib/Views/Contact.php:64
+msgid "Last Modified"
+msgstr "Ostatnio zmodyfikowano"
+
+#: config/attributes.php.dist:51
+msgid "Last Name"
+msgstr "Nazwisko"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Lista"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Pasuj±cy do"
+
+#: lib/api.php:249
+msgid "Maximum Number of Contacts"
+msgstr "Maksymalna liczba kontaktów"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Maksymalna liczba stron"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Lista menu"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "Brak DN w konfiguracji ¼ród³a LDAP."
+
+#: config/attributes.php.dist:172
+msgid "Mobile Phone"
+msgstr "Telefon komórkowy"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "B³±d podczas modyfikacji: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Wiêcej opcji..."
+
+#: lib/api.php:1373
+msgid "More than 1 entry found"
+msgstr "Znaleziono wiêcej ni¿ 1 wpis"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Przenie¶"
+
+#: templates/prefs/addressbookselect.inc:184
+#: templates/prefs/columnselect.inc:248
+msgid "Move left"
+msgstr "Przenie¶ w lewo"
+
+#: templates/prefs/addressbookselect.inc:186
+#: templates/prefs/columnselect.inc:250
+msgid "Move right"
+msgstr "Przenie¶ w prawo"
+
+#: config/attributes.php.dist:59
+msgid "Mr"
+msgstr "Pan"
+
+#: config/attributes.php.dist:59
+msgid "Mrs"
+msgstr "Pani"
+
+#: config/attributes.php.dist:59
+msgid "Ms"
+msgstr "Panna"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Ksi±¿ka adresowa Mulberry"
+
+#: lib/api.php:1290
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "Istnieje wiele osób z adresem [%s], ale ¿adna z nazw± [%s]"
+
+#: config/sources.php.dist:148
+msgid "My Address Book"
+msgstr "Moja ksi±¿ka adresowa"
+
+#: addressbooks.php:174
+msgid "My Address Books"
+msgstr "Moje ksi±¿ki adresowe"
+
+#: templates/addressbooks.inc:126 config/attributes.php.dist:40
+msgid "Name"
+msgstr "Nazwa"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Format nazwy"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nazwa:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Nowy kontakt"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:110
+#: lib/Forms/EditContact.php:117 lib/Forms/EditContact.php:170
+msgid "Next"
+msgstr "Dalej"
+
+#: config/attributes.php.dist:234
+msgid "Nickname"
+msgstr "Pseudonim"
+
+#: lib/api.php:1376 lib/api.php:1425
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Nie znaleziono wpisu w %s dla %s"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Brak dostêpnych obecnie ksi±¿ek adresowych. Import i ekspors jest "
+"niedostêpny."
+
+#: search.php:72
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr ""
+"Brak dostêpnych obecnie ksi±¿ek adresowych. Wyszukiwanie jest niedostêpne."
+
+#: lib/api.php:1341
+msgid "No address books found."
+msgstr "Nie znaleziono ksi±¿ek adresowych."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Nie znaleziono kontaktów"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Nie dopasowano kontaktów do bie¿±cego filtra."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Brak pasuj±cych kontaktów"
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Nie istniej± ¼ród³a dla ulubionych odbiorców."
+
+#: lib/api.php:614 lib/api.php:881
+msgid "No vCard data was found."
+msgstr "Nie znaleziono danych vCard."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Brak"
+
+#: lib/Views/DeleteContact.php:26 lib/Views/EditContact.php:33
+#: lib/Views/Contact.php:33
+msgid "Not Found"
+msgstr "Nie znaleziono"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Nie znaleziono"
+
+#: config/attributes.php.dist:200
+msgid "Notes"
+msgstr "Notatki"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Liczba pozycji na stronie"
+
+#: lib/api.php:721 lib/api.php:861
+msgid "Object not found"
+msgstr "Nie znaleziono obiektu"
+
+#: config/attributes.php.dist:239
+msgid "Office"
+msgstr "Biuro"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Je¶li zapiszesz tê stronê opcji, ksi±¿ka adresowa zostanie trwale usuniêta."
+"Je¶li nie o to Ci chodzi³o, musisz zmieniæ swój wybór na \"Brak\"."
+
+#: lib/api.php:889
+msgid "Only one vcard supported."
+msgstr "Wspierana jest tylko jedna wizytówka vcard"
+
+#: config/attributes.php.dist:206
+msgid "PGP Public Key"
+msgstr "Klucz publiczny PGP"
+
+#: config/attributes.php.dist:183
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Bezpowrotnie usun±æ ten kontakt?"
+
+#: deletefile.php:36 lib/Driver.php:600 lib/api.php:597 lib/api.php:714
+#: lib/api.php:801 lib/api.php:1074 lib/api.php:1275 lib/Driver/sql.php:470
+msgid "Permission denied"
+msgstr "Brak uprawnieñ"
+
+#: templates/addressbooks.inc:118
+msgid "Permissions"
+msgstr "Uprawnienia"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Ksi±¿ka adresowa Pine"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Wprowad¼ nazwê nowej listy kontaktów:"
+
+#: lib/Forms/EditContact.php:113 lib/Forms/EditContact.php:116
+#: lib/Forms/EditContact.php:162
+msgid "Previous"
+msgstr "Poprzedni"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Zapytanie nie powiod³o siê: (%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Odczyt zakoñczony niepowodzeniem: (%s) %s"
+
+#: lib/Driver.php:1340
+msgid "Reading contacts is not available."
+msgstr "Odczyt kontaktów nie jest dostêpny."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Usuñ ksi±¿kê adresow±"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Usuñ kolumnê"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Usuñ z tej listy"
+
+#: lib/Driver.php:1378 lib/Driver/share.php:167
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Usuwanie danych u¿ytkownika nie jest wspierane przez bie¿±cy sterownik "
+"obs³ugi ksi±¿ki adresowej."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Zamieniæ istniej±c± ksi±¿kê adresow± importowan±? <strong>Uwaga: Spowoduje "
+"to usuniêcie wszystkich wpisów w Twojej obecneje ksi±¿ce adresowej.</strong>"
+
+#: lib/Driver.php:497
+msgid "Requested object not found."
+msgstr "Za¿±dany obiekt nie zosta³ znaleziony."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Przywróæ domy¶lne"
+
+#: config/attributes.php.dist:212
+msgid "S/MIME Public Certificate"
+msgstr "Certyfikat publiczny S/MIME"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "B³±d podczas wywo³ania STARTTLS: (%s) %s"
+
+#: config/attributes.php.dist:56 config/attributes.php.dist:249
+msgid "Salutation"
+msgstr "Zwrot grzeczno¶ciowy"
+
+#: templates/addressbooks.inc:143 lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "Zapisz"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Zapisaæ wyszukiwanie jako wirtualn± ksi±¿kê adresow±?"
+
+#: lib/Driver.php:1366
+msgid "Saving contacts is not available."
+msgstr "Zapis kontaktów nie jest dostêpny."
+
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:49 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Szukaj"
+
+#: lib/api.php:1151
+msgid "Search failed"
+msgstr "Wyszukiwanie nie powiod³o siê"
+
+#: lib/api.php:1280 lib/api.php:1286 lib/api.php:1295 lib/api.php:1308
+#, php-format
+msgid "Search failed: %s"
+msgstr "Wyszukiwanie nie powiod³o siê: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Szukaj: "
+
+#: lib/Driver.php:1325
+msgid "Searching is not available."
+msgstr "Wyszukiwanie nie jest dostêpne."
+
+#: templates/block/minisearch.inc:28
+msgid "Searching..."
+msgstr "Szukam..."
+
+#: templates/addressbooks.inc:84
+msgid "Select an address book to delete"
+msgstr "Wybierz ksi±¿kê adresow± do usuniêcia"
+
+#: templates/addressbooks.inc:109
+msgid "Select an address book to edit"
+msgstr "Wybierz ksi±¿kê adresow± do edycji"
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Wybierz kontakt"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Wybierz ksi±¿kê adresow± do wyeksportowania:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Wybierz ksi±¿kê adresow± do której odbêdzie siê import:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Wybierz kodowanie znaków pliku ¼ród³owego:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Wybierz format eksportu:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Wybierz plik do zaimportowania:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Wybierz format pliku ¼ród³owego:"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Wybierz format u¿ywany do wy¶wietlania nazw:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Wybierz domy¶lny widok, opcje sortowania i stronicowania."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Wybierz, które pola wy¶wietlaæ na li¶cie adresów."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Wybierz, którego formatu u¿ywaæ do wy¶wietlania nazw."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Wybrana ksi±¿ka adresowa \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Poka¿ %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Poka¿ oba"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Poka¿ kontakty"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Poka¿ listy"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "Kierunek sortowania"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Sortuj po %s"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Sortuj tylko po %s"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Sortuj po %s, a nastêpnie po %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "¬ród³o"
+
+#: lib/api.php:242
+msgid "Sources"
+msgstr "¬ród³a"
+
+#: config/attributes.php.dist:260
+msgid "Spouse"
+msgstr "Wspó³ma³¿onek"
+
+#: lib/Views/Browse.php:254 lib/Views/Browse.php:293
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Pomy¶lnie dodano %d kontaktów do listy."
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Pomy¶lnie dodano %s do %s"
+
+#: lib/Views/Browse.php:283
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Pomy¶lnie utworzono listê kontaktow± \"%s\"."
+
+#: search.php:127
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Pomy¶lnie utworzono wirtualn± ksi±¿kê adresow± \"%s\""
+
+#: lib/Views/Browse.php:131
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Pomy¶lnie usuniêto %d kontaktów."
+
+#: lib/Views/Browse.php:114
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Pomy¶lnie usuniêto %d kontaktów z listy."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/export.inc:14 templates/data/import.inc:14
+msgid "Tab separated values"
+msgstr "Warto¶ci oddzielane tabulatorem"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Docelowa ksi±¿ka adresowa"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Docelowa lista kontaktów"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Plik %s nie zawiera³ ¿adnych kontaktów."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "Aby wgrywaæ za³±czniki musi byæ skonfigurowany backend VFS."
+
+#: lib/Driver.php:1296
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Ksi±¿ka adresowa \"%s\" nie istnieje."
+
+#: addressbooks.php:103
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "Ksi±¿ka adresowa \"%s\" zosta³a pomy¶lnie utworzona."
+
+#: addressbooks.php:130
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Ksi±¿ka adresowa \"%s\" zosta³a pomy¶lnie usuniêta."
+
+#: addressbooks.php:151
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "Ksi±¿ka adresowa \"%s\" zosta³a pomy¶lnie zaktualizowana."
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Nie mo¿na wyczy¶ciæ ksi±¿ki adresowej: %s"
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "Taki kontakt nie istnieje."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Plik \"%s\" zosta³ usuniêty."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "Import mo¿e zostaæ zakoñczony niezale¿nie od ostrze¿eñ."
+
+#: lib/Views/DeleteContact.php:36 lib/Views/EditContact.php:43
+#: lib/Views/Contact.php:43
+msgid "The requested contact was not found."
+msgstr "Nie znaleziono takiego kontaktu."
+
+#: lib/Views/Browse.php:79
+msgid "There are no browseable address books."
+msgstr "Brak ksi±¿ek adresowych do przegl±dania."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Nie ma ksi±¿ek adresowych do zapisu. ¯adna z dostêpnych ksi±¿ek adresowych "
+"nie jest skonfigurowana tak, aby pozwalaæ na dodawanie do niej nowych "
+"wpisów. Je¶li s±dzisz, ¿e jest to b³±d skontaktuj siê z administratorem "
+"systemu."
+
+#: search.php:123
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Wyst±pi³ problem przy tworzeniu wirtualnej ksi±¿ki adresowej: %s"
+
+#: lib/Forms/AddContact.php:86
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Wyst±pi³ b³±d przy dodawaniu nowego kontaktu. Skontaktuj siê z "
+"administratorem systemu aby uzyskaæ dalsz± pomoc."
+
+#: lib/Views/Browse.php:302
+msgid "There was an error creating a new list."
+msgstr "Wyst±pi³ b³±d przy tworzeniu nowej listy."
+
+#: addressbooks.php:95 addressbooks.php:101
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Wyst±pi³ b³±d przy tworzeniu tej ksi±¿ki adresowej: %s"
+
+#: lib/Views/Browse.php:217
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Wyst±pi³ b³±d przy usuwaniu \"%s\" ze ¼ród³owej ksi±¿ki adresowej."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Wyst±pi³ b³±d przy usuwaniu tego kontaktu: %s"
+
+#: lib/Views/Browse.php:342
+msgid "There was an error displaying the list"
+msgstr "Wyst±pi³ b³±d przy wy¶wietlaniu listy"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Wyst±pi³ b³±d podczas importu danych: %s"
+
+#: lib/api.php:610 lib/api.php:876
+msgid "There was an error importing the iCalendar data."
+msgstr "Wyst±pi³ b³±d podczas importu danych w formacie iCalendar."
+
+#: lib/api.php:195
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Wyst±pi³ b³±d przy usuwaniu ksi±¿ki adresowej dla %s"
+
+#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Wyst±pi³ b³±d przy usuwaniu tej ksi±¿ki adresowej: %s"
+
+#: addressbooks.php:149
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Wyst±pi³ b³±d przy aktualizacji tej ksi±¿ki adresowej: %s"
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Brak adresów do wyeksportowania."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Te ksi±¿ki adresowe bêd± wy¶wietlane w nastêpuj±cej kolejno¶ci:"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Te kolumny bêd± wy¶wietlane w nastêpuj±cej kolejno¶ci:"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "Ten format pliku nie jest wspierany."
+
+#: lib/api.php:1299 lib/api.php:1312
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Ta osoba posiada ju¿ %s wpis w ksi±¿ce adresowej"
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"To bêdzie domy¶lna ksi±¿ka adresowa do dodawania lub importowania kontaktów."
+
+#: config/attributes.php.dist:80
+msgid "Title"
+msgstr "Stanowisko"
+
+#: lib/Driver.php:1231
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Nie mo¿na za³adowaæ definicji %s."
+
+#: lib/Driver/kolab.php:462
+msgid "Unable to search."
+msgstr "Nie mo¿na wyszukaæ."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:110
+#: lib/Forms/EditContact.php:113 lib/Forms/EditContact.php:116
+#: lib/Forms/EditContact.php:164
+msgid "Undo Changes"
+msgstr "Cofnij zmiany"
+
+#: lib/api.php:1180
+msgid "Unfiled"
+msgstr "Niewype³niona"
+
+#: lib/api.php:643 lib/api.php:746 lib/api.php:894
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Niewspierany rodzaj zawarto¶ci: %s"
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Wy¶wietl kontakt"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Domy¶lny widok do wy¶wietlenia:"
+
+#: config/attributes.php.dist:224
+msgid "Website URL"
+msgstr "URL strony www"
+
+#: config/attributes.php.dist:123
+msgid "Work Address"
+msgstr "Adres s³u¿bowy"
+
+#: config/attributes.php.dist:134
+msgid "Work City"
+msgstr "Miasto"
+
+#: config/attributes.php.dist:149
+msgid "Work Country"
+msgstr "Kraj"
+
+#: config/attributes.php.dist:166
+msgid "Work Phone"
+msgstr "Telefon s³u¿bowy"
+
+#: config/attributes.php.dist:144
+msgid "Work Postal Code"
+msgstr "Kod pocztowy"
+
+#: config/attributes.php.dist:139
+msgid "Work State/Province"
+msgstr "Województwo"
+
+#: config/attributes.php.dist:129
+msgid "Work Street Address"
+msgstr "Ulica"
+
+#: data.php:251 add.php:48 lib/Views/Browse.php:158 lib/Views/Browse.php:267
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Nie masz zezwolenia na utworzenie wiêcej ni¿ %d kontaktów w \"%s\"."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Nie mo¿esz dodaæ wpisu do wirtualnej ksi±¿ki adresowej."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Nie mo¿esz dodaæ nowych kontaktów do wirtualnej ksi±¿ki adresowej"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Nie mo¿esz usun±æ kontaktów z wirtualnej ksi±¿ki adresowej"
+
+#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
+#: lib/Views/EditContact.php:49
+msgid "You do not have permission to view this contact."
+msgstr "Nie masz uprawnieñ aby wy¶wietliæ dane tego kontaktu."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Nie masz uprawnieñ aby wy¶wietliæ ten obiekt."
+
+#: addressbooks.php:58
+msgid "You do not have permissions to delete this source."
+msgstr "Nie masz uprawnieñ aby usun±æ to ¼ród³o."
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Musisz posiadaæ zainstalowan± bibliotekê Net_LDAP z PEAR aby u¿ywaæ funkcji "
+"sprawdzania schematu."
+
+#: search.php:110
+msgid "You must provide a name for virtual address books."
+msgstr "Musisz wprowadziæ nazwê dla wirtualnej ksi±¿ki adresowej."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Musisz wybraæ docelow± ksi±¿kê adresow±."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Musisz wybraæ docelow± listê kontaktów."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Musisz wybraæ najpierw co najmniej jeden kontakt."
+
+#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+msgid "You only have permission to view this contact."
+msgstr "Masz uprawnienia tylko do przegl±dania tego kontaktu."
+
+#: lib/Views/Browse.php:349
+msgid "Your default address book is not browseable."
+msgstr "Nie mo¿na przegl±daæ Twojej domy¶lnej ksi±¿ki adresowej."
+
+#: lib/Turba.php:553
+msgid "_Browse"
+msgstr "Przegl±daj"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "Kontakty"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Usuñ"
+
+#: contact.php:79
+msgid "_Edit"
+msgstr "_Edytuj"
+
+#: lib/Turba.php:562
+msgid "_Import/Export"
+msgstr "_Import/Eksport"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Listy"
+
+#: lib/Turba.php:550
+msgid "_My Address Books"
+msgstr "_Moje ksi±¿ki adresowe"
+
+#: lib/Turba.php:556
+msgid "_New Contact"
+msgstr "_Nowy kontakt"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Usuñ z tej listy"
+
+#: lib/Turba.php:558
+msgid "_Search"
+msgstr "_Szukaj"
+
+#: contact.php:76
+msgid "_View"
+msgstr "Zobacz"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "rosn±co"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "kontakt"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "kontakty.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "kontaktyldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "kontakty.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "kontakty.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "malej±co"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "bez formatowania"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "brak"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "do listy kontaktów"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "do innej ksi±¿ki adresowej"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/export.inc:15 templates/data/import.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/pt_BR.po b/turba/po/pt_BR.po
new file mode 100644 (file)
index 0000000..886a14e
--- /dev/null
@@ -0,0 +1,1761 @@
+# translation of pt_BR.po to Português brasileiro
+# This file is distributed under the same license as the Turba package.
+# Copyright YEAR Horde Project.
+#
+# Fabio Gomes <flgoms@uol.com.br>, 2005.
+# Luis Felipe Marzagao <duli@fedoraproject.org>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: pt_BR\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-07-06 23:19-0300\n"
+"PO-Revision-Date: 2008-07-03 12:20-0300\n"
+"Last-Translator: Luis Felipe Marzagao <duli@fedoraproject.org>\n"
+"Language-Team: Português brasileiro <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=2; plural=(n > 1);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Adicionar Contatos  IMSP"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " Apagar Contatos IMSP"
+
+#: data.php:381
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" já existe e não foi importado."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" atualizado, mas a gravação do arquivo enviado falhou: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" atualizado."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" não foi copiado porque é uma lista."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" não foi movido porque é uma lista."
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Nome Sobrenome\"  (ex. João Silva)"
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Sobrenome, Nome\" (ex. Silva, João)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s adicionado."
+
+#: data.php:409
+#, php-format
+msgid "%s file successfully imported."
+msgstr "Arquivo %s importado com sucesso."
+
+#: lib/Driver.php:578
+#, php-format
+msgid "%s of %s"
+msgstr "%s a %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s a %s de %s"
+
+#: lib/Turba.php:560
+#, php-format
+msgid "%s's Address Book"
+msgstr "Contatos de %s"
+
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr "É necessário um navegador que suporte iFrames"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Acesso negado a %s"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Adicionar"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Adicionar Contato"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Adicionar contatos"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Adicionar arquivo"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Adicionar em"
+
+#: lib/Driver.php:1962 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Adicionar contatos não está disponível."
+
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr "Contatos"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Lista de Contatos"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Listagem de Contatos"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Contatos"
+
+#: data.php:361
+msgid "Address book successfully purged."
+msgstr "Contatos apagados com sucesso."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Contatos que não serão exibidos:"
+
+#: search.php:199 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Pesquisa Avançada"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Apelido"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Todos"
+
+#: lib/api.php:934
+msgid "Already Exists"
+msgstr "Já Existe"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Celebrações"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Celebração"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Deseja realmente excluir %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Deseja realmente excluir os contatos selecionados?"
+
+#: config/attributes.php.dist:392
+msgid "Assistant"
+msgstr "Assistente"
+
+#: search.php:196 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Pesquisa Simples"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Conexão falhou: (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Dia de Nascimento"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Aniversários"
+
+#: contact.php:106 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Nome em branco"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Ambos"
+
+#: addressbooks/index.php:39 templates/menu.inc:8
+#: templates/addressbook_list.php:29
+msgid "Browse"
+msgstr "Navegar"
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr "Categoria de Negócios"
+
+#: data.php:100
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Impossível adicionar um grupo a ele mesmo."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Impossível apagar todas as entradas de contatos para %s"
+
+#: config/attributes.php.dist:364
+msgid "Category"
+msgstr "Categoria"
+
+#: templates/browse/column_headers.inc:25
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Mudar %s ordenar para %s"
+
+#: addressbooks/index.php:41 templates/addressbook_list.php:33
+msgid "Change Permissions"
+msgstr "Alterar Permissões"
+
+#: templates/browse/column_headers.inc:8
+msgid "Check All/None"
+msgstr "Marcar Todos/Nenhum"
+
+#: templates/browse/column_headers.inc:8
+msgid "Check _All/None"
+msgstr "Marc_ar Todos/Nenhum"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Subordinadas"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Escolha os contatos"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Escolha quais contatos a exibir, e em que ordem:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Escolha quais contatos para usar."
+
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+"Clique nos contatos para ordenar as colunas deles. Arraste as colunas para "
+"reordená-las. Marque uma coluna para habilitá-la."
+
+#: templates/block/minisearch.inc:26
+msgid "Close"
+msgstr "Fechar"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Fechar Pesquisa"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Opções de Coluna"
+
+#: templates/data/export.inc:12 templates/data/import.inc:13
+msgid "Comma separated values"
+msgstr "Valores separados por vírgula"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Valores separados por vírgulas (Microsoft Outlook)"
+
+#: config/attributes.php.dist:490
+msgid "Common Address Extended"
+msgstr "Endereço Comum Estendido"
+
+#: config/attributes.php.dist:508
+msgid "Common City"
+msgstr "Cidade Comum"
+
+#: config/attributes.php.dist:526
+msgid "Common Country"
+msgstr "País Comum"
+
+#: config/attributes.php.dist:434
+msgid "Common Phone"
+msgstr "Telefone Comum"
+
+#: config/attributes.php.dist:502
+msgid "Common Post Office Box"
+msgstr "Caixa Postal Comum"
+
+#: config/attributes.php.dist:520
+msgid "Common Postal Code"
+msgstr "CEP Comum"
+
+#: config/attributes.php.dist:514
+msgid "Common State/Province"
+msgstr "Estado (Comum)"
+
+#: config/attributes.php.dist:496
+msgid "Common Street"
+msgstr "Endereço Comum"
+
+#: config/attributes.php.dist:459
+msgid "Common Video Call"
+msgstr "Video Conferência Comum"
+
+#: config/sources.php.dist:243 config/sources.php.dist:923
+msgid "Communications"
+msgstr "Comunicações"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "Empresa"
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr "Endereço (Comercial)"
+
+#: lib/api.php:541 lib/api.php:595 lib/api.php:648 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:860 lib/api.php:996
+#: lib/api.php:1088 lib/api.php:1154 lib/api.php:1273 lib/api.php:1506
+#: lib/api.php:1583 lib/api.php:1734 scripts/import_squirrelmail_abook.php:112
+#, php-format
+msgid "Connection failed: %s"
+msgstr "A conexão falhou: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Falha de conexão"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Procurar Contato"
+
+#: config/sources.php.dist:852
+msgid "Contacts"
+msgstr "Contatos"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Contatos exibidos:"
+
+#: lib/Views/Browse.php:339
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Contatos na lista: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Copiar"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Criar"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Criar Contatos"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Criar novos Contatos"
+
+#: lib/ListView.php:447
+msgid "Create a new Contact List in:"
+msgstr "Criar uma nova Lista de Contatos em:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "Criado"
+
+#: contact.php:89
+msgid "De_lete"
+msgstr "Exc_luir"
+
+#: addressbooks/index.php:42 templates/addressbook_list.php:35
+#: templates/browse/actions.inc:3 lib/Forms/DeleteAddressBook.php:45
+#: lib/Views/DeleteContact.php:58
+msgid "Delete"
+msgstr "Excluir"
+
+#: lib/Forms/DeleteAddressBook.php:40 lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Excluir %s"
+
+#: lib/api.php:639
+msgid "Delete denied."
+msgstr "Exclusão negada."
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "A exclusão falhou: (%s) %s"
+
+#: lib/Driver.php:1970 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Exclusão de contatos não está disponível."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "A exclusão falhou"
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr "Departamento"
+
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr "Descrição"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Diretório"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Exibir"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Opções de Exibição"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Baixar"
+
+#: templates/browse/contactrow.inc:25 templates/browse/row.inc:15
+#: templates/browse/row.inc:16
+msgid "Download vCard"
+msgstr "Baixar vCard"
+
+#: addressbooks/index.php:40 templates/addressbook_list.php:31
+#: templates/browse/actions.inc:6 templates/browse/contactrow.inc:33
+#: templates/browse/row.inc:28 templates/browse/row.inc:29
+#: templates/browse/column_headers.inc:11
+msgid "Edit"
+msgstr "Editar"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Editar \"%s\""
+
+#: lib/Forms/EditAddressBook.php:40 lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Editar %s"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "E-mail"
+
+#: config/attributes.php.dist:243
+msgid "Emails"
+msgstr "E-mails"
+
+#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Erro ao adicionar contato(s) %d à lista."
+
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Erro ao adiconar %d de %d contato(s) requisitado(s) à lista."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Erro ao apagar o(s) contato(s) %d."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Erro ao apagar %d de %d contato(s) requisitado(s)."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Erro ao remover %d contato(s) da lista."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Erro ao remover %d de %d contato(s) requisitado(s) da lista."
+
+#: lib/api.php:702
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Erro ao procurar nos contatos: %s"
+
+#: templates/data/export.inc:42 templates/browse/actions.inc:10
+msgid "Export"
+msgstr "Exportar"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Exportar Contatos"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Exportar somente os contatos selecionados."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Exportar os seguintes contatos completamente."
+
+#: data.php:173 data.php:272 data.php:350 search.php:121 add.php:42
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Falha ao acessar os contatos: %s"
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Falha ao adicionar %s em %s: %s"
+
+#: lib/Views/Browse.php:345
+msgid "Failed to browse list"
+msgstr "Falha ao exibir a listagem"
+
+#: lib/Views/Browse.php:376
+msgid "Failed to browse the directory"
+msgstr "Falha ao exibir o diretório"
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Falha ao alterar o nome: (%s) %s; Antigo DN = %s, Novo DN = %s, Raiz = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Falhou em encontrar o objeto a ser adicionado: %s"
+
+#: search.php:190
+msgid "Failed to search the address book"
+msgstr "Falha ao procurar nos contatos"
+
+#: data.php:188
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Falhou em pesquisar no diretório: %s"
+
+#: config/sources.php.dist:551
+msgid "Favourite Recipients"
+msgstr "Destinatários Favoritos"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Arquivos"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Procurar"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+msgid "Finish"
+msgstr "Finalizar"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "Primeiro Nome"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "URL Livre/Ocupado"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "De"
+
+#: config/attributes.php.dist:398
+msgid "Gender"
+msgstr "Gênero"
+
+#: config/sources.php.dist:777
+msgid "Global Address Book"
+msgstr "Contatos Globais"
+
+#: templates/browse/contactrow.inc:44 templates/browse/row.inc:49
+msgid "Group"
+msgstr "Grupo"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Endereço (Residencial)"
+
+#: config/attributes.php.dist:560
+msgid "Home Address Extended"
+msgstr "Endereço Estendido (Residencial)"
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr "Cidade (Residencial)"
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr "País (Residencial)"
+
+#: config/attributes.php.dist:428
+msgid "Home Email"
+msgstr "E-mail (Residencial)"
+
+#: config/attributes.php.dist:444
+msgid "Home Fax"
+msgstr "Fax (Residencial)"
+
+#: config/attributes.php.dist:566
+msgid "Home Latitude"
+msgstr "Latitude (Residencial)"
+
+#: config/attributes.php.dist:571
+msgid "Home Longitude"
+msgstr "Longitude (Residencial)"
+
+#: config/attributes.php.dist:454
+msgid "Home Mobile Phone"
+msgstr "Telefone Celular (Residencial)"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Telefone (Residencial)"
+
+#: config/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr "Caixa Postal (Residencial)"
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "CEP (Residencial)"
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "Estado (Residencial)"
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "Endereço (Residencial)"
+
+#: config/attributes.php.dist:469
+msgid "Home Video Call"
+msgstr "Video Conferência (Residencial)"
+
+#: config/attributes.php.dist:554
+msgid "Home Website URL"
+msgstr "URL do Website (Residencial)"
+
+#: config/sources.php.dist:668
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importar Contatos, Passo %d"
+
+#: data.php:427
+msgid "Import/Export Address Books"
+msgstr "Importar/Exportar Contatos"
+
+#: config/attributes.php.dist:374
+msgid "Initials"
+msgstr "Iniciais"
+
+#: config/attributes.php.dist:380
+msgid "Instant Messenger"
+msgstr "Mensageiro Instantâneo"
+
+#: lib/api.php:991 lib/api.php:1083
+msgid "Invalid ID"
+msgstr "ID Inválido"
+
+#: lib/api.php:363 lib/api.php:691 lib/api.php:746 lib/api.php:805
+#: lib/api.php:853 lib/api.php:987 lib/api.php:1079 lib/api.php:1144
+#: lib/api.php:1717 scripts/import_squirrelmail_abook.php:105
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Contatos inválidos: %s"
+
+#: lib/api.php:1148
+msgid "Invalid contact unique ID"
+msgstr "Contato inválido ID único"
+
+#: lib/api.php:1721 lib/api.php:1807 lib/api.php:1868
+msgid "Invalid email"
+msgstr "E-mail inválido"
+
+#: lib/api.php:1729
+msgid "Invalid entry"
+msgstr "Registro inválido"
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr "Chave especificada inválida."
+
+#: lib/api.php:1725
+msgid "Invalid name"
+msgstr "Nome inválido"
+
+#: config/attributes.php.dist:276
+msgid "Job Title"
+msgstr "Cargo"
+
+#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Chave para gravar deve ser um UID não %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"É obrigatório suporte a LDAP mas o módulo LDAP não está disponível ou não "
+"foi carregado."
+
+#: data.php:105 templates/data/export.inc:16 templates/data/import.inc:18
+msgid "LDIF Address Book"
+msgstr "Contatos LDIF"
+
+#: config/attributes.php.dist:404
+msgid "Language"
+msgstr "Idioma"
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr "Última Modificação"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Sobrenome"
+
+#: config/attributes.php.dist:410
+msgid "Latitude"
+msgstr "Latitude"
+
+#: templates/browse/column_headers.inc:17
+msgid "List"
+msgstr "Lista"
+
+#: config/sources.php.dist:238 config/sources.php.dist:919
+msgid "Location"
+msgstr "Endereços"
+
+#: config/attributes.php.dist:415
+msgid "Longitude"
+msgstr "Longitude"
+
+#: lib/api.php:611
+msgid "Malformed request."
+msgstr "Pedido mal formado."
+
+#: addressbooks/index.php:46 templates/addressbook_list.php:2
+msgid "Manage Address Books"
+msgstr "Gerenciar Contatos"
+
+#: config/attributes.php.dist:386
+msgid "Manager"
+msgstr "Gerenciador"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Equivalente a"
+
+#: lib/api.php:324
+msgid "Maximum Number of Contacts"
+msgstr "Número Máximo de Contados"
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "Número máximo de páginas"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Lista de Menu"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Nomes do Meio"
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr "DN faltando na fonte de configuração de LDAP."
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Telefone Celular"
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "A alteração falhou: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Mais Opções..."
+
+#: lib/api.php:1845
+msgid "More than 1 entry found"
+msgstr "Mais de 1 registro encontrado"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Mover"
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Mover à esquerda"
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Mover à direita"
+
+#: data.php:103 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Contatos Mulberry"
+
+#: lib/api.php:1753
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"Múltiplas pessoas com o endereço [%s], mas nenhuma com nome [%s] já existe"
+
+#: config/sources.php.dist:162
+msgid "My Address Book"
+msgstr "Meus Contatos"
+
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "Nome"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Formato do Nome"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Prefixos de Nome"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Sufixos de Nome"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Nome:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Novo Contato"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Próxima"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "Apelido"
+
+#: lib/api.php:1848 lib/api.php:1908
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Nenhum registro %s foi encontrado para %s"
+
+#: data.php:92
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "Nenhum Contato está disponível. Importar e Exportar estão desativados."
+
+#: search.php:107
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Nenhum Contato está disponível. A busca está desativada."
+
+#: lib/api.php:685 lib/api.php:740 lib/api.php:800 lib/api.php:982
+#: lib/api.php:1074 lib/api.php:1139
+msgid "No address book specified"
+msgstr "Nenhum contato especificado"
+
+#: minisearch.php:80
+msgid "No contacts found"
+msgstr "Nenhum contato encontrado"
+
+#: templates/browse/column_headers.inc:44
+msgid "No contacts match the current filter."
+msgstr "Nenhum contato corresponde ao filtro atual."
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "Nenhum contato encontrado"
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr "Sem fonte para destinatários favoritos."
+
+#: lib/api.php:886 lib/api.php:1184
+msgid "No vCard data was found."
+msgstr "Nenhum dado vCard foi encontrado."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Nenhuma"
+
+#: lib/Views/DeleteContact.php:26 lib/Views/EditContact.php:33
+#: lib/Views/Contact.php:49
+msgid "Not Found"
+msgstr "Não Encontrado"
+
+#: deletefile.php:22 edit.php:48
+msgid "Not found"
+msgstr "Não encontrado"
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "Anotações"
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "Número de itens por página"
+
+#: lib/api.php:1033 lib/api.php:1209
+msgid "Object not found"
+msgstr "Objeto não encontrado"
+
+#: lib/Driver/kolab.php:1184
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Objeto com UID %s não existe!"
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr "Profissão"
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr "Escritório"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Ao gravar esta página de opções, os contatos serão permanentemente "
+"removidos. Se isso não for o que você deseja, então você deve mudar sua "
+"seleção para \"Nenhum\"."
+
+#: lib/api.php:1192
+msgid "Only one vcard supported."
+msgstr "Somente um vcard é suportado."
+
+#: config/sources.php.dist:245 config/sources.php.dist:925
+msgid "Organization"
+msgstr "Profissional"
+
+#: config/sources.php.dist:246 config/sources.php.dist:927
+msgid "Other"
+msgstr "Outro"
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "Chave Pública PGP"
+
+#: config/attributes.php.dist:485
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Excluir este evento permanentemente?"
+
+#: deletefile.php:36 lib/api.php:864 lib/api.php:1738 lib/Driver.php:759
+#: lib/Driver/sql.php:486
+msgid "Permission denied"
+msgstr "Permissão negada"
+
+#: config/sources.php.dist:235 config/sources.php.dist:915
+msgid "Personal"
+msgstr "Pessoal"
+
+#: data.php:104 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Contatos Pine"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Por favor nomeie a nova lista de contatos:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:167
+msgid "Previous"
+msgstr "Anterior"
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "A consulta falhou: (%s) %s"
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "A leitura falhou: (%s) %s"
+
+#: lib/Driver.php:1954 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "Leitura de contatos não está disponível."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Realmente apagar os contatos \"%s\"? Isso não pode ser desfeito e todos os "
+"contatos deste catálogo serão permanentemente removidos."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Remover contatos"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Remover desta lista"
+
+#: lib/Driver.php:1992
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Remoção de dados do usuário não é suportada no driver atual de armazenamento "
+"de contatos."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Substituir o catálogo de contatos existente pelo importado? <strong>Aviso: "
+"Isso apagará todos as entradas no seu catálogo de endereços atual.</strong>"
+
+#: lib/Driver.php:653
+msgid "Requested object not found."
+msgstr "O objeto solicitado não foi encontrado."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Retornar para os padrões"
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "Certificado Público S/MIME"
+
+#: config/attributes.php.dist:479
+msgid "SIP"
+msgstr "SIP"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "O STARTTLS falhou: (%s) %s"
+
+#: lib/Forms/EditAddressBook.php:46 lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "Gravar"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Gravar procura como contatos virtuais?"
+
+#: lib/Driver.php:1980 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Gravação de contatos não está disponível."
+
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+msgid "Search"
+msgstr "Pesquisar"
+
+#: lib/api.php:1511
+msgid "Search failed"
+msgstr "A pesquisa falhou"
+
+#: lib/api.php:1743 lib/api.php:1749 lib/api.php:1758 lib/api.php:1771
+#, php-format
+msgid "Search failed: %s"
+msgstr "A pesquisa falhou: %s"
+
+#: templates/block/minisearch.inc:23
+msgid "Search for: "
+msgstr "Procurar por: "
+
+#: lib/Driver.php:1939 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Pesquisa não está disponível."
+
+#: templates/browse/row.inc:40
+msgid "Select contact"
+msgstr "Selecionar contato"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Selecione os contatos de onde exportar:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Selecione os contatos para onde importar:"
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Selecione os contatos que serão usados para sincronização com dispositivos "
+"externos:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Selecione o conjunto de caracteres do arquivo de origem:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Selecione o formato para exportar:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Selecione o arquivo para importar:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Selecione o formato do arquivo de origem:"
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "Selecione o formato utilizado para exibir os nomes:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr "Selecione visão para exibir por padrão e opções de paginação."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Selecione quais campos exibir nas listas de endereços."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Selecione em qual formato exibir nomes."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Contatos selecionados \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Exibir %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Exibir Ambos"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Exibir Contatos"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Exibir Listas"
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "Direção de Ordenação"
+
+#: templates/browse/column_headers.inc:32
+#, php-format
+msgid "Sort by %s"
+msgstr "Ordenar por %s"
+
+#: templates/browse/column_headers.inc:27
+#, php-format
+msgid "Sort by %s only"
+msgstr "Ordenar por %s apenas"
+
+#: templates/browse/column_headers.inc:30
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Ordenar por %s, e então por %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Fonte:"
+
+#: lib/api.php:317
+msgid "Sources"
+msgstr "Fontes"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Esposa"
+
+#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d contato(s) adicionado(s) com sucesso à lista."
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s adicionado com sucesso à %s"
+
+#: lib/Views/Browse.php:291
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Lista de contatos \"%s\" criada com sucesso."
+
+#: search.php:165
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Contatos virtuais \"%s\" criados com sucesso"
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d contato(s) apagado(s) com sucesso."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d contato(s) apagado(s) com sucesso da lista."
+
+#: data.php:101
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/export.inc:14 templates/data/import.inc:14
+msgid "Tab separated values"
+msgstr "Valores separados por tabulações"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Contatos de Destino"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Lista de Contatos Destinatária"
+
+#: data.php:352
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "O arquivo %s não continha nenhum contato."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"O backend VFS necessita ser configurado para habilitar o envio de anexos."
+
+#: lib/Driver.php:1910
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Os contatos \"%s\" não existem."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Os contatos \"%s\" foram criados."
+
+#: data.php:359
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Os contatos não puderam ser apagados: %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Os contatos \"%s\" foram apagados."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "O contatos \"%s\" foram renomeados para \"%s\"."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "O contatoss \"%s\" foram gravados."
+
+#: vcard.php:19 view.php:28 contact.php:23
+msgid "The contact you requested does not exist."
+msgstr "O contato que você solicitou não existe."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "O arquivo \"%s\" foi apagado."
+
+#: data.php:332
+msgid "The import can be finished despite the warnings."
+msgstr "A importação pode ser finalizada independente dos avisos."
+
+#: lib/Views/DeleteContact.php:36 lib/Views/EditContact.php:43
+#: lib/Views/Contact.php:59
+msgid "The requested contact was not found."
+msgstr "O contato requisitado não foi encontrado."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Não existem contatos visíveis."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Não existem contatos com permissões de gravação. Nenhum dos contatos está "
+"configurado para permitir que você adicione novos registros. Se você "
+"acredita que isto é um erro, por favor entre em contato com o administrador "
+"do sistema."
+
+#: lib/Views/Browse.php:349
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "Há %d contato(s) nesta lista que não pode ser visto por você"
+msgstr[1] ""
+
+#: search.php:161
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Houve um problema na criação do catálogo de endereços virtual: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Houve um erro ao adicionar o novo contato. Entre em contato com o "
+"administrador do sistema para maiores detalhes."
+
+#: lib/Views/Browse.php:311
+msgid "There was an error creating a new list."
+msgstr "Houve um erro ao criar uma nova lista."
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Houve um erro ao apagar \"%s\" dos contatos de origem."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Houve um erro ao excluir este contato: %s"
+
+#: lib/Views/Browse.php:355
+msgid "There was an error displaying the list"
+msgstr "Houve um erro ao exibir a lista"
+
+#: data.php:395
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Houve um erro ao importar os dados: %s"
+
+#: lib/api.php:882 lib/api.php:1179
+msgid "There was an error importing the iCalendar data."
+msgstr "Houve um erro ao importar os dados do iCalendar."
+
+#: lib/api.php:253
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Houve um erro ao remover os contatos para %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Houve um erro ao gravar o contato. Entre em contato com o seu administrador "
+"para mais ajuda."
+
+#: data.php:218
+msgid "There were no addresses to export."
+msgstr "Não existiam endereços para exportar."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Estes contatos serão exibidos na seguinte ordem:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Estes contatos não podem ser apagados"
+
+#: data.php:317
+msgid "This file format is not supported."
+msgstr "Este formato de arquivo não é suportado."
+
+#: lib/api.php:1762 lib/api.php:1775
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Esta pessoa já tem um registro %s nos contatos"
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Estes serão os contatos padrão ao adicionar ou importar registros."
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "Fuso Horário"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Não é possível achar proprietário do contato."
+
+#: lib/Turba.php:676 lib/Driver.php:1832
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Impossível carregar a definição de %s."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Não foi possível garavar os contatos \"%s\": %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "Não é possível procurar."
+
+#: config/attributes.php.dist:367
+msgid "Unfiled"
+msgstr "Normal"
+
+#: lib/api.php:920 lib/api.php:1030 lib/api.php:1197
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Tipo de Conteúdo não suportado: %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Ver \"%s\""
+
+#: minisearch.php:72 minisearch.php:73
+msgid "View Contact"
+msgstr "Visualizar Contato"
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "Visualização para exibir por padrão:"
+
+#: config/attributes.php.dist:474
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr "URL do Website"
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Endereço (Comercial)"
+
+#: config/attributes.php.dist:538
+msgid "Work Address Extended"
+msgstr "Endereço Estendido (comercial)"
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr "Cidade (Comercial)"
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr "País (Comercial)"
+
+#: config/attributes.php.dist:422
+msgid "Work Email"
+msgstr "E-mail (Comercial)"
+
+#: config/attributes.php.dist:439
+msgid "Work Fax"
+msgstr "Fax (Comercial)"
+
+#: config/attributes.php.dist:544
+msgid "Work Latitude"
+msgstr "Latitude (Comercial)"
+
+#: config/attributes.php.dist:549
+msgid "Work Longitude"
+msgstr "Longitude (Comercial)"
+
+#: config/attributes.php.dist:449
+msgid "Work Mobile Phone"
+msgstr "Celular (Comercial)"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Telefone (Comercial)"
+
+#: config/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr "Caixa Postal (Comercial)"
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "CEP (Comercial)"
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "Estado (Comercial)"
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "Endereço (Comercial)"
+
+#: config/attributes.php.dist:464
+msgid "Work Video Call"
+msgstr "Vídeo Conferência (Comercial)"
+
+#: config/attributes.php.dist:532
+msgid "Work Website URL"
+msgstr "URL do Website (Comercial)"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Você não tem permissão para alterar esses contatos."
+
+#: data.php:281 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Você não tem permissão para criar mais do que %d contatos em \"%s\"."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Você não tem permissão para apagar esses contatos."
+
+#: lib/api.php:199
+msgid "You are not allowed to remove user data."
+msgstr "Você não tem permissão para remover dados do usuário."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Você não pode adicionar uma entrada em contatos virtuais."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Você não pode adicionar novos registros em contatos virtuais"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Você não pode apagar registros de contatos virtuais"
+
+#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
+#: lib/Views/EditContact.php:49
+msgid "You do not have permission to view this contact."
+msgstr "Você não tem permissão para ver este contato."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Você não tem permissão para ver este objeto."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Você não tem permissão para apagar estes contatos."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"You deve ter a biblioteca Net_LDAP PEAR instalada para usar a função de "
+"esquema de checagem."
+
+#: search.php:148
+msgid "You must provide a name for virtual address books."
+msgstr "Você deve fornecer um nome para os contatos virtuais."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Você deve selecionar os contatos de destino."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Você deve selecionar uma lista de contatos destinatária."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Você deve selecionar pelo menos um contato primeiro."
+
+#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+msgid "You only have permission to view this contact."
+msgstr "Você somente tem permissão de ver este contato."
+
+#: lib/Views/Browse.php:362
+msgid "Your default address book is not browseable."
+msgstr "Não é possível navegar nos seus contatos padrão"
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[sem valor]"
+
+#: lib/Turba.php:618
+msgid "_Browse"
+msgstr "_Exibir"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Contatos"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Exc_luir"
+
+#: contact.php:85
+msgid "_Edit"
+msgstr "_Editar"
+
+#: lib/Turba.php:627
+msgid "_Import/Export"
+msgstr "Importar/E_xportar"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Listas"
+
+#: lib/Turba.php:615
+msgid "_My Address Books"
+msgstr "_Meus Contatos"
+
+#: lib/Turba.php:621
+msgid "_New Contact"
+msgstr "_Novo Contato"
+
+#: lib/Turba.php:632
+msgid "_Print"
+msgstr "Im_primir"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Remover desta lista"
+
+#: lib/Turba.php:623
+msgid "_Search"
+msgstr "Pe_squisar"
+
+#: contact.php:82
+msgid "_View"
+msgstr "_Ver"
+
+#: templates/browse/column_headers.inc:25
+msgid "ascending"
+msgstr "ascendente"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "por %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "por mim"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "contato"
+
+#: data.php:238 data.php:243 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contatos.csv"
+
+#: data.php:263
+msgid "contacts.ldif"
+msgstr "contatos.ldif"
+
+#: data.php:248
+msgid "contacts.tsv"
+msgstr "contatos.tsv"
+
+#: data.php:258
+msgid "contacts.vcf"
+msgstr "contatos.vcf"
+
+#: templates/browse/column_headers.inc:25
+msgid "descending"
+msgstr "descendente"
+
+#: config/attributes.php.dist:401
+msgid "female"
+msgstr "feminino"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "em %s"
+
+#: config/attributes.php.dist:401
+msgid "male"
+msgstr "masculino"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "sem formatação"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "nenhum"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "para uma Lista de Contatos"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "para contatos diferentes"
+
+#: data.php:102 templates/data/export.inc:15 templates/data/import.inc:15
+#: templates/browse/column_headers.inc:14
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/pt_PT.po b/turba/po/pt_PT.po
new file mode 100644 (file)
index 0000000..6311c3c
--- /dev/null
@@ -0,0 +1,1334 @@
+# TURBA Portugal Portuguese translation.
+# Manuel Menezes de Sequeira <Manuel.Sequeira>, 2005.
+# Based on a previous
+# Turba Portugal Portuguese translation.
+# Nuno Loureiro <nuno@eth.pt>, 2002.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.0-cvs\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2006-12-26 23:59+0000\n"
+"PO-Revision-Date: 2007-01-06 11:07-0000\n"
+"Last-Translator: Manuel Menezes de Sequeira <Manuel.Sequeira@iscte.pt>\n"
+"Language-Team: Portuguese of Portugal <dev@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Adicionar um Livro de Endereços IMSP"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Remover um Livro de Endereços IMSP"
+
+#: data.php:333
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" já existe e, por isso, não foi importado."
+
+#: browse.php:140
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" não foi copiado por ser uma lista."
+
+#: browse.php:138
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" não foi movido por ser uma lista."
+
+#: config/prefs.php.dist:137
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Próprio Apelido\" (e.g., José Silva)"
+
+#: config/prefs.php.dist:136
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Apelido, Próprio\" (e.g., Silva, José)"
+
+#: add.php:112
+#, php-format
+msgid "%s added."
+msgstr "%s adicionado."
+
+#: data.php:357
+#, php-format
+msgid "%s file successfully imported"
+msgstr "Ficheiro %s importado com sucesso"
+
+#: templates/browse/footer.inc:5
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s a %s de %s"
+
+#: lib/Turba.php:458
+#, php-format
+msgid "%s's Address Book"
+msgstr "Contactos de %s"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "É necessário um navegador que suporte iFrames"
+
+#: config/prefs.php.dist:160
+msgid "Above search form"
+msgstr "Sobre o formulário de procura"
+
+#: view.php:52
+#, php-format
+msgid "Access denied to %s"
+msgstr "Acesso a %s negado"
+
+#: add.php:56 templates/browse/actions.inc:29
+msgid "Add"
+msgstr "Adicionar"
+
+#: templates/prefs/addressbookselect.inc:174
+msgid "Add address book"
+msgstr "Adicionar livro de endereços"
+
+#: config/prefs.php.dist:48
+msgid "Add and Delete IMSP address books"
+msgstr "Adicionar e Remover livros de endereços IMSP"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Adicionar coluna"
+
+#: edit.php:135
+msgid "Add file"
+msgstr "Adicionar arquivo"
+
+#: templates/browse/actions.inc:29
+msgid "Add to"
+msgstr "Adicionar a"
+
+#: lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Adição de contactos indisponível."
+
+#: templates/addressbooks.inc:93
+msgid "Address Book"
+msgstr "Livro de Endereços"
+
+#: browse.php:28 config/prefs.php.dist:125
+msgid "Address Book Listing"
+msgstr "Listagem dos Contactos"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Livros de Endereços"
+
+#: add.php:111
+msgid "Address book entry"
+msgstr "Contacto"
+
+#: data.php:313
+msgid "Address book successfully purged."
+msgstr "Livro de endereços purgado com sucesso."
+
+#: templates/addressbooks.inc:69
+msgid "Address book to delete "
+msgstr "Livro de endereços a remover"
+
+#: templates/prefs/addressbookselect.inc:170
+msgid "Address books that will not be displayed:"
+msgstr "Livros de endereços que não serão mostrados:"
+
+#: search.php:88 templates/browse/search.inc:38
+msgid "Advanced Search"
+msgstr "Pesquisa Avançada"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "Alcunha"
+
+#: templates/browse/footerAlpha.inc:7 templates/browse/footerAlpha.inc:10
+#: templates/browse/actions.inc:48
+msgid "All"
+msgstr "Tudo"
+
+#: lib/api.php:607
+msgid "Already Exists"
+msgstr "Já Existe"
+
+#: templates/browse/javascript.inc:93
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Quer mesmo remover %s?"
+
+#: templates/browse/javascript.inc:67
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "Quer mesmo remover as entradas seleccionadas?"
+
+#: config/prefs.php.dist:96
+msgid "Ascending"
+msgstr "Crescente"
+
+#: search.php:85 templates/browse/search.inc:37
+msgid "Basic Search"
+msgstr "Procura Básica"
+
+#: config/prefs.php.dist:159
+msgid "Below search form"
+msgstr "Sob o formulário de procura"
+
+#: lib/Driver/ldap.php:77 lib/Driver/ldap.php:80
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Ligação falhou: (%s) %s"
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "Aniversário"
+
+#: templates/menu.inc:7
+msgid "Browse"
+msgstr "Navegar"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr "Categoria de Negócio"
+
+#: data.php:49
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:57
+msgid "Can't add a group to itself."
+msgstr "Não se pode adicionar um grupo a si mesmo."
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Marcar _Tudo/Nada"
+
+#: templates/addressbooks.inc:51
+msgid "Choose a name"
+msgstr "Escolha um nome"
+
+#: add.php:48
+msgid "Choose an address book"
+msgstr "Escolha o livro de endereços"
+
+#: templates/prefs/columnselect.inc:221
+msgid "Choose an address book:"
+msgstr "Escolha um livro de endereços:"
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "Escolha os livros de endereços a mostrar e a sua ordem:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Escolha os livros de endereços a usar."
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose which columns to display and in what order:"
+msgstr "Escolha as colunas a mostrar e a sua ordem:"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Opções de Coluna"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Colunas que não serão mostradas:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Valores separados por vírgulas"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Valores separados por vírgulas (Microsoft Outlook)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "Empresa"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "Morada na Empresa"
+
+#: lib/api.php:319 lib/api.php:364 lib/api.php:414 lib/api.php:546
+#: lib/api.php:660 lib/api.php:747 lib/api.php:805 lib/api.php:886
+#: lib/api.php:1086 lib/api.php:1175
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Ligação falhou: %s"
+
+#: lib/Driver/ldap.php:58
+msgid "Connection failure"
+msgstr "Falha de ligação"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Procura de Contactos"
+
+#: browse.php:306
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Contactos na lista: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Copiar"
+
+#: templates/addressbooks.inc:60
+msgid "Create"
+msgstr "Criar"
+
+#: templates/addressbooks.inc:47
+msgid "Create Address Book"
+msgstr "Criar Livro de Endereços"
+
+#: lib/ListView.php:348
+msgid "Create a new Contact List in:"
+msgstr "Criar uma nova Lista de Contactos em:"
+
+#: lib/ObjectView.php:133
+msgid "Created"
+msgstr "Criado"
+
+#: config/prefs.php.dist:98
+msgid "Default sorting direction:"
+msgstr "Direcção de ordenação por omissão:"
+
+#: templates/addressbooks.inc:83 templates/browse/actions.inc:3
+#: lib/Object.php:328 lib/Renderer.php:47 lib/Renderer.php:50
+msgid "Delete"
+msgstr "Remover"
+
+#: templates/addressbooks.inc:65
+msgid "Delete Address Book"
+msgstr "Remover Livro de Endereços"
+
+#: config/prefs.php.dist:38
+msgid "Delete Confirmation"
+msgstr "Confirmação de Remoção"
+
+#: config/prefs.php.dist:39
+msgid "Delete button behaviour"
+msgstr "Comportamento do botão de remoção."
+
+#: lib/Driver/ldap.php:270
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Remoção falhou: (%s) %s"
+
+#: lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Remoção de contactos indisponível."
+
+#: delete.php:38
+msgid "Deletion failed"
+msgstr "Remoção falhou"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "Departamento"
+
+#: config/prefs.php.dist:97
+msgid "Descending"
+msgstr "Decrescente"
+
+#: templates/addressbooks.inc:122
+msgid "Description"
+msgstr "Descrição"
+
+#: templates/browse/search.inc:119
+msgid "Directory"
+msgstr "Directório"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Mostrar"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Opções de Visualização"
+
+#: config/prefs.php.dist:177
+msgid "Do you want to confirm deleting entries?"
+msgstr "Deseja confirmar a remoção de entradas?"
+
+#: lib/Object.php:297
+msgid "Download"
+msgstr "Receber"
+
+#: templates/browse/row.inc:17 templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Descarregar vCard"
+
+#: templates/addressbooks.inc:109 templates/browse/row.inc:25
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+#: templates/browse/contactrow.inc:33 lib/Renderer.php:42
+msgid "Edit"
+msgstr "Editar"
+
+#: templates/browse/row.inc:25 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Editar \"%s\""
+
+#: templates/addressbooks.inc:88
+msgid "Edit Address Books"
+msgstr "Editar Livros de Endereços"
+
+#: edit.php:85 edit.php:161
+#, php-format
+msgid "Edit entry for %s"
+msgstr "Editar entrada de %s"
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "Correio Electrónico"
+
+#: edit.php:154
+#, php-format
+msgid "Entry for %s updated, but saving the uploaded file failed: %s"
+msgstr ""
+"Entrada de %s actualizada, mas o arquivo carregado não foi guardado: %s"
+
+#: edit.php:156 edit.php:159
+#, php-format
+msgid "Entry for %s updated."
+msgstr "Entrada de %s actualizada."
+
+#: browse.php:216 browse.php:264
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Erro ao adicionar à lista %d contacto(s)."
+
+#: browse.php:218 browse.php:266
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Erro ao adicionar à lista %d contacto(s) de %d pretendidos(s)."
+
+#: browse.php:86
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Erro ao remover %d contacto(s)."
+
+#: browse.php:88
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Erro ao remover %d contacto(s) de %d pretendidos(s)."
+
+#: browse.php:66
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Erro ao remover da lista %d contacto(s)."
+
+#: browse.php:68
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Erro ao remover da lista %d contacto(s) de %d pretendidos(s)."
+
+#: lib/api.php:420
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Erro ao procurar no livro de endereços: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:41
+msgid "Export"
+msgstr "Exportar"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Exportar Livro de Endereços"
+
+#: templates/data/export.inc:21
+msgid "Export only the selected contacts."
+msgstr "Exportar apenas os contactos seleccionados"
+
+#: templates/data/export.inc:27
+msgid "Export the following address book completely."
+msgstr "Exportar na íntegrar o livro de endereços que se segue."
+
+#: data.php:134 data.php:228 data.php:302 browse.php:35 browse.php:103
+#: browse.php:130 add.php:67 search.php:37
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Falhou acesso ao livro de endereços: %s"
+
+#: browse.php:158
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Falhou adição de %s a %s: %s"
+
+#: browse.php:312
+msgid "Failed to browse list"
+msgstr "Falhou navegação da lista"
+
+#: browse.php:350
+msgid "Failed to browse the directory"
+msgstr "Falhou navegação do directório"
+
+#: lib/Driver/ldap.php:303
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr "Falhou a mudança do nome: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+
+#: browse.php:134
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Procura do objecto a adicionar falhou: %s"
+
+#: search.php:79
+msgid "Failed to search the address book"
+msgstr "Procura no livro de endereços falhada"
+
+#: data.php:149
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Pesquisa no directório falhou: %s"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "Fax"
+
+#: edit.php:131 display.php:99
+msgid "Files"
+msgstr "Arquivos"
+
+#: templates/browse/search.inc:71
+msgid "Find"
+msgstr "Procurar"
+
+#: edit.php:104 edit.php:195
+msgid "Finish"
+msgstr "Terminar."
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "Nome Próprio"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr "URL de livre/ocupado"
+
+#: templates/browse/search.inc:84
+msgid "From"
+msgstr "De"
+
+#: config/sources.php.dist:589
+msgid "Global Address Book"
+msgstr "Lista de Endereços Global"
+
+#: templates/browse/row.inc:43 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Grupo"
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "Morada de Casa"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "Cidade de Casa"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "País de Casa"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "Telefonei de Casa"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "Código Postal de Casa"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "Estado/Província de Casa"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "Rua de Casa"
+
+#: config/sources.php.dist:491
+msgid "IMSP"
+msgstr "IMSP"
+
+#: config/prefs.php.dist:47
+msgid "IMSP Address Book Administration"
+msgstr "Administração de Livros de Endereços IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importar Lista de Endereços, Passo %d"
+
+#: data.php:375
+msgid "Import/Export Address Books"
+msgstr "Importar/Exportar Listas de Endereços"
+
+#: lib/api.php:655 lib/api.php:742
+msgid "Invalid ID"
+msgstr "ID Inválido."
+
+#: lib/api.php:231 lib/api.php:1158
+msgid "Invalid address book"
+msgstr "Livro de endereços inválido."
+
+#: lib/api.php:409 lib/api.php:541 lib/api.php:651 lib/api.php:738
+#: lib/api.php:795
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Livro de endereços inválido: %s"
+
+#: lib/api.php:1162 lib/api.php:1236 lib/api.php:1292
+msgid "Invalid email"
+msgstr "Endereço de correio electrónico inválido."
+
+#: lib/api.php:1170
+msgid "Invalid entry"
+msgstr "Entrada Inválida."
+
+#: lib/Driver/ldap.php:266
+msgid "Invalid key specified."
+msgstr "Chave inválida especificada."
+
+#: lib/api.php:1166
+msgid "Invalid name"
+msgstr "Nome Inválido."
+
+#: lib/api.php:799
+msgid "Invalid objectId"
+msgstr "objectID Inválido."
+
+#: lib/Driver/ldap.php:30
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"Suporte LDAP é necessário mas o módulo LDAP não está disponível ou não está "
+"carregado."
+
+#: lib/ObjectView.php:138
+msgid "Last Modified"
+msgstr "Modificado"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Último Nome"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Lista"
+
+#: templates/browse/search.inc:78
+msgid "Matching"
+msgstr "Correspondente"
+
+#: lib/api.php:206
+msgid "Maximum Number of Contacts"
+msgstr "Número Máximo de Contactos"
+
+#: config/prefs.php.dist:107
+msgid "Maximum number of pages"
+msgstr "Número máximo de páginas"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Lista de Menus"
+
+#: lib/Driver/ldap.php:296
+msgid "Missing DN in LDAP source configuration."
+msgstr "Falta DN na configuração do LDAP fonte"
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "Telemóvel"
+
+#: lib/Driver/ldap.php:325 lib/Driver/ldap.php:341
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Modificação falhou: (%s) %s"
+
+#: lib/api.php:1277
+msgid "More than 1 entry found"
+msgstr "Encontrada mais que uma entrada."
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Mover"
+
+#: templates/prefs/columnselect.inc:247
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Mover à esquerda"
+
+#: templates/prefs/columnselect.inc:249
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Mover à direita"
+
+#: data.php:52 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Livro de Endereços Mulberry"
+
+#: lib/api.php:1194
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "Há várias pessoas com o endereço [%s], mas nenhuma com o nome [%s]"
+
+#: config/sources.php.dist:114
+msgid "My Address Book"
+msgstr "O Meu Livro de Endereços"
+
+#: addressbooks.php:119
+msgid "My Address Books"
+msgstr "Os Meus Livros de Endereços"
+
+#: templates/addressbooks.inc:114 config/attributes.php.dist:42
+msgid "Name"
+msgstr "Nome"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Formato do Nome"
+
+#: add.php:36 add.php:127 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Novo Contacto"
+
+#: edit.php:95 edit.php:102 edit.php:210 templates/data/import.inc:45
+msgid "Next"
+msgstr "Próxima"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "Alcunha"
+
+#: lib/api.php:1280 lib/api.php:1329
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Não se encontrou entrada %s para %s"
+
+#: lib/api.php:1245
+msgid "No address books found."
+msgstr "Não se encontrou livros de endereços."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Não se encontrou contactos"
+
+#: lib/api.php:566 lib/api.php:830
+msgid "No vCard data was found."
+msgstr "Não se encontrou dados vCard."
+
+#: templates/browse/footer.inc:7
+msgid "None"
+msgstr "Nenhuma"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "Notas"
+
+#: config/prefs.php.dist:115
+msgid "Number of items per page"
+msgstr "Número de itens por página"
+
+#: lib/api.php:671 lib/api.php:811
+msgid "Object not found"
+msgstr "Objecto não encontrado."
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr "Escritório"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Logo que guarde esta página de opções o livro de endereços será "
+"permanentemente removido. Se não é isso que deseja, deverá alterar a sua "
+"selecção para \"Nenhum\"."
+
+#: lib/api.php:838
+msgid "Only one vcard supported."
+msgstr "Apenas um vcard suportado."
+
+#: config/prefs.php.dist:37 config/prefs.php.dist:46
+msgid "Other Options"
+msgstr "Outras Opções"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr "Chave Pública PGP"
+
+#: lib/api.php:550 lib/api.php:664 lib/api.php:751 lib/api.php:1014
+#: lib/api.php:1179
+msgid "Permission Denied"
+msgstr "Permissão Negada"
+
+#: lib/Driver.php:554
+msgid "Permission denied"
+msgstr "Permissão Negada"
+
+#: templates/addressbooks.inc:106
+msgid "Permissions"
+msgstr "Permissões"
+
+#: data.php:53 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Livro de Endereços Pine"
+
+#: templates/browse/javascript.inc:28
+msgid "Please name the new contact list:"
+msgstr "Por favor dê um nome à nova lista de contactos:"
+
+#: edit.php:98 edit.php:101 edit.php:202
+msgid "Previous"
+msgstr "Anterior"
+
+#: lib/Driver/ldap.php:147
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "A interrogação falhou: (%s) %s"
+
+#: templates/block/minisearch.inc:15
+msgid "Quick Search"
+msgstr "Procura Rápida"
+
+#: lib/Driver/ldap.php:191 lib/Driver/ldap.php:199 lib/Driver/ldap.php:435
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "A leitura falhou: (%s) %s"
+
+#: lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "Leitura de contactos indisponível."
+
+#: lib/Renderer.php:49
+msgid "Really delete this contact?"
+msgstr "Deseja mesmo remover este contacto?"
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr "Registos mostrados:"
+
+#: templates/prefs/addressbookselect.inc:176
+msgid "Remove address book"
+msgstr "Remover livro de endereços"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Remover coluna"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Remover desta lista"
+
+#: templates/data/import.inc:21
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Substituir livro de endereços existente pelo importado? <strong>Aviso: Isso "
+"removerá todas as entradas no seu livro de endereços corrente.</strong>"
+
+#: lib/Driver.php:442
+msgid "Requested object not found."
+msgstr "Objecto pedido não encontrado."
+
+#: add.php:37 templates/browse/search.inc:114
+msgid "Reset to Defaults"
+msgstr "Voltar a Valores por Omissão"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr "Certificado Público S/MIME"
+
+#: lib/Driver/ldap.php:69
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTLS falhou: (%s) %s"
+
+#: edit.php:106 add.php:37 templates/addressbooks.inc:131
+msgid "Save"
+msgstr "Guardar"
+
+#: lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Não é possível guardar contactos."
+
+#: templates/browse/search.inc:97 templates/browse/search.inc:113
+#: templates/block/minisearch.inc:18 lib/Block/tree_menu.php:49
+#: config/prefs.php.dist:126
+msgid "Search"
+msgstr "Procurar"
+
+#: lib/api.php:1091
+msgid "Search failed"
+msgstr "Procura falhou"
+
+#: lib/api.php:1184 lib/api.php:1190 lib/api.php:1199 lib/api.php:1212
+#, php-format
+msgid "Search failed: %s"
+msgstr "Procura falhou: %s"
+
+#: lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Procura indisponível."
+
+#: templates/block/minisearch.inc:19
+msgid "Searching..."
+msgstr "Procurando..."
+
+#: templates/addressbooks.inc:73
+msgid "Select an address book to delete"
+msgstr "Seleccione o livro de endereços a remover"
+
+#: templates/addressbooks.inc:97
+msgid "Select an address book to edit"
+msgstr "Seleccione o livro de endereços a modificar"
+
+#: templates/data/export.inc:32
+msgid "Select the address book to export from:"
+msgstr "Seleccione o livro de endereços do qual exportar:"
+
+#: templates/data/import.inc:26
+msgid "Select the address book to import to:"
+msgstr "Seleccione o livro de endereços para o qual importar:"
+
+#: templates/data/import.inc:35
+msgid "Select the charset of the source file:"
+msgstr "Seleccione o conjunto de caracteres (charset) do ficheiro fonte:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Seleccione o formato de exportação:"
+
+#: templates/data/import.inc:43
+msgid "Select the file to import:"
+msgstr "Seleccione o ficheiro a importar:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Seleccione o formato do ficheiro fonte:"
+
+#: config/prefs.php.dist:135
+msgid "Select the format used to display names:"
+msgstr "Seleccione o formato usado para mostrar nomes:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr ""
+"Escolha a vizualização por omissão e as opções de ordenação e paginação."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Escolher os campos visíveis nas listas de contactos."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Escolher com que formato mostrar os nomes."
+
+#: add.php:54
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Seleccionado o livro de endereços \"%s\"."
+
+#: templates/browse/actions.inc:46
+#, php-format
+msgid "Show %s"
+msgstr "Mostrar %s"
+
+#: templates/browse/actions.inc:48
+msgid "Show All"
+msgstr "Mostrar Tudo"
+
+#: templates/browse/actions.inc:47
+msgid "Show Contacts"
+msgstr "Mostrar Contactos"
+
+#: templates/browse/actions.inc:46
+msgid "Show Lists"
+msgstr "Mostrar Listas"
+
+#: templates/browse/column_headers.inc:21
+#: templates/browse/column_headers.inc:36
+msgid "Sort Direction"
+msgstr "Direcção de Ordenação"
+
+#: lib/api.php:199
+msgid "Sources"
+msgstr "Fontes"
+
+#: config/prefs.php.dist:158
+msgid "Specify where you want advanced search results to appear."
+msgstr "Especifique onde pretende que apareçam os resultados da procura."
+
+#: browse.php:214 browse.php:262
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "A adição de %d contactos à lista teve sucesso."
+
+#: browse.php:160
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Adicação de %s a %s teve sucesso"
+
+#: browse.php:248
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "A criação da lista de contactos \"%s\" teve sucesso."
+
+#: browse.php:84
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "A remoção de %d contactos teve sucesso."
+
+#: browse.php:64
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "A remoção de %d contactos da lista teve sucesso."
+
+#: data.php:50
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Valores separados por tabulações"
+
+#: data.php:304
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "O ficheiro %s não continha quaisquer contactos."
+
+#: view.php:15
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"O mecanismo VFS precisa de ser configurado para suportar o carregamento de "
+"anexos."
+
+#: lib/Driver.php:1157
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "O livro de endereços \"%s\" não existe."
+
+#: addressbooks.php:48
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "O livro de endereços \"%s\" foi criado com sucesso."
+
+#: addressbooks.php:71
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "O livro de endereços \"%s\" foi removido com sucesso."
+
+#: addressbooks.php:89
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "O livro de endereços \"%s\" foi actualizado com sucesso."
+
+#: data.php:311
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "O livro de endereços não pôde ser purgado: %s"
+
+#: edit.php:51 vcard.php:22 display.php:23 view.php:26
+msgid "The contact you requested does not exist."
+msgstr "O contacto pedido não existe."
+
+#: edit.php:123
+#, php-format
+msgid "The file \"%s\" has successfully been deleted."
+msgstr "O arquivo \"%s\" foi removido com sucesso."
+
+#: data.php:284
+msgid "The import can be finished despite the warnings."
+msgstr "A importação pode ser concluída apesar dos avisos."
+
+#: browse.php:31
+msgid "There are no browseable address books."
+msgstr "Não há livros de endereços navegáveis."
+
+#: add.php:29
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Não há livros de endereços alteráveis. Nenhum dos livros de endereços "
+"disponíveis está configurado para permitir a adição de novas entradas. Se "
+"achar que isto é um erro, por favor contacte o administrador do sistema."
+
+#: add.php:124
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Ocorreu um erro ao adicionar este contacto. Contacte o seu administrador de "
+"sistema para obter ajuda."
+
+#: browse.php:271
+msgid "There was an error creating a new list."
+msgstr "Ocorreu um erro ao criar uma nova lista."
+
+#: addressbooks.php:38
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Ocorreu um erro ao criar o livro de endereços: %s"
+
+#: browse.php:166
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Ocorreu um erro ao remover \"%s\" do livro de endereços de origem."
+
+#: delete.php:37
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Ocorreu um erro ao remover este contacto: %s"
+
+#: browse.php:318
+msgid "There was an error displaying the list"
+msgstr "Ocorreu um erro ao mostrar a lista"
+
+#: data.php:343
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Ocorreu um erro na importação de dados: %s"
+
+#: lib/api.php:562 lib/api.php:825
+msgid "There was an error importing the iCalendar data."
+msgstr "Ocorreu um erro na importação de dados iCalendar."
+
+#: addressbooks.php:58 addressbooks.php:63 addressbooks.php:69
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Ocorreu um erro ao remover o livro de endereços: %s"
+
+#: addressbooks.php:87
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Ocorreu um erro ao actualizar o livro de endereços: %s"
+
+#: edit.php:165
+#, php-format
+msgid "There was an error updating this entry: %s"
+msgstr "Ocorreu um erro ao actualizar esta entrada: %s"
+
+#: data.php:179
+msgid "There were no addresses to export."
+msgstr "Não havia endereços a exportar."
+
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Os livros de endereços serão mostrados por esta ordem:"
+
+#: templates/prefs/columnselect.inc:243
+msgid "These columns will display in this order:"
+msgstr "As colunas serão mostradas por esta ordem:"
+
+#: data.php:269
+msgid "This file format is not supported."
+msgstr "Este formato de ficheiro não é suportado."
+
+#: lib/api.php:1203 lib/api.php:1216
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Esta pessoa já tem uma entrada %s no seu livro de endereços."
+
+#: config/prefs.php.dist:148
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Este será o livro de endereços a usar, por omissão, quando adicionando ou "
+"importando contactos."
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "Título"
+
+#: lib/Turba.php:443
+#, php-format
+msgid "Unable to create new share. Missing source type."
+msgstr "Impossível criar a nova partilha. Tipo da fonte em falta."
+
+#: lib/Driver.php:1081
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Impossível ler a definição de %s."
+
+#: edit.php:95 edit.php:98 edit.php:101 edit.php:106 edit.php:204
+msgid "Undo Changes"
+msgstr "Voltar atrás nas alterações"
+
+#: lib/api.php:595 lib/api.php:696 lib/api.php:843
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Tipo de conteúdo (Content-Type) não é suportado: %s"
+
+#: templates/browse/row.inc:19 templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Ver \"%s\""
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Ver Contacto"
+
+#: config/prefs.php.dist:124
+msgid "View to display by default:"
+msgstr "Visualização a mostrar por defeito:"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr "URL da página Web"
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "Endereço do Emprego"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "Cidade do Emprego"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "País do Emprego"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "Telefone do Emprego"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "Código Postal do Emprego"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "Estado/Província do Emprego"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "Rua do Emprego"
+
+#: data.php:237 browse.php:106 browse.php:227 add.php:73
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Não está autorizado a criar mais do que %d contactos em \"%s\"."
+
+#: edit.php:73 display.php:52 view.php:36
+msgid "You do not have permission to view this contact."
+msgstr "Não tem permissão para ver este contacto."
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr "Não tem permissão para ver este objecto."
+
+#: lib/Turba.php:534
+msgid "You do not have permissions to delete this source."
+msgstr "Não tem permissão para remover esta fonte."
+
+#: templates/browse/javascript.inc:55
+msgid "You must select a target address book."
+msgstr "Tem de seleccionar um livro de endereços alvo."
+
+#: templates/browse/javascript.inc:23
+msgid "You must select a target list."
+msgstr "Tem de seleccionar uma lista alvo."
+
+#: edit.php:32
+msgid "You must select at least one contact first."
+msgstr "Tem de seleccionar primeiro pelo menos um contacto."
+
+#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:49
+#: templates/browse/javascript.inc:72
+msgid "You must select at least one entry first."
+msgstr "Tem de seleccionar primeiro pelo menos uma entrada."
+
+#: edit.php:77
+msgid "You only have permission to view this contact."
+msgstr "Só tem permissão para ver este contacto."
+
+#: browse.php:325
+msgid "Your default address book is not browseable."
+msgstr "O seu livro de endereços por omissão não é navegável."
+
+#: templates/browse/row.inc:6 templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[sem valor]"
+
+#: lib/Turba.php:557
+msgid "_Browse"
+msgstr "_Navegar"
+
+#: templates/browse/actions.inc:47
+msgid "_Contacts"
+msgstr "_Contactos"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_Remover"
+
+#: lib/Turba.php:566
+msgid "_Import/Export"
+msgstr "_Importar/Exportar"
+
+#: templates/browse/actions.inc:46
+msgid "_Lists"
+msgstr "_Listas"
+
+#: lib/Turba.php:554
+msgid "_My Address Books"
+msgstr "Os _Meus Livros de Endereços"
+
+#: lib/Turba.php:560
+msgid "_New Contact"
+msgstr "_Novo Contacto"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Remov_er desta lista"
+
+#: lib/Turba.php:562
+msgid "_Search"
+msgstr "_Procurar"
+
+#: vcard.php:46
+msgid "contact.vcf"
+msgstr "contacto.vcf"
+
+#: data.php:199 data.php:204 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contactos.csv"
+
+#: data.php:209
+msgid "contacts.tsv"
+msgstr "contactos.tsv"
+
+#: data.php:219
+msgid "contacts.vcf"
+msgstr "contactos.vcf"
+
+#: config/prefs.php.dist:138
+msgid "no formatting"
+msgstr "sem formatação"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "nenhum"
+
+#: templates/browse/actions.inc:31
+msgid "to a Contact List"
+msgstr "a uma Lista Contactos"
+
+#: templates/browse/actions.inc:21
+msgid "to a different Address Book"
+msgstr "a um outro Livro de Endereços"
+
+#: data.php:51 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/ro_RO.po b/turba/po/ro_RO.po
new file mode 100644 (file)
index 0000000..8d62b29
--- /dev/null
@@ -0,0 +1,405 @@
+# TURBA Romanian Translation.
+# Copyright 2003-2009 The Horde Project
+# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003.
+# Marius Dragulescu <mariusd@urban-grafx.ro>, 2003.
+#
+
+msgid ""
+msgstr ""
+
+"Project-Id-Version: TURBA 1.1\n"
+"POT-Creation-Date: 2003-02-24 14:50+0200\n"
+"PO-Revision-Date: 2003-03-01 12:00+0200\n"
+"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n"
+"Language-Team: Romanian <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#, c-format
+msgid "%s file successfully imported"
+msgstr "Fisierul %s a fost importat cu succes"
+
+msgid "Add Contact ..."
+msgstr "Adauga contact ..."
+
+msgid "Add a new contact"
+msgstr "Adauga contact nou"
+
+msgid "Add failed"
+msgstr "Adaugare esuata"
+
+msgid "Add"
+msgstr "Adaugare"
+
+msgid "Address Book Listing"
+msgstr "Listare agenda"
+
+msgid "Addressbook is read-only."
+msgstr "Agenda doar in citire"
+
+msgid "Advanced Search"
+msgstr "Cautare avansata"
+
+msgid "Alias"
+msgstr "Alias"
+
+msgid "An illegal value was specified."
+msgstr "S-a specificat o valoare invalida."
+
+msgid "Available Columns:"
+msgstr "Coloane disponibile:"
+
+msgid "Browse"
+msgstr "Rasfoire"
+
+msgid "Cancel"
+msgstr "Renuntare"
+
+msgid "Cell Phone"
+msgstr "Telefon mobil"
+
+msgid "Choose the order of the columns to display in the address list."
+msgstr "Alege ordinea afisarii coloanelor in lista de adrese."
+
+msgid "Clear Search"
+msgstr "Sterge cautare"
+
+msgid "Column Options"
+msgstr "Optiuni coloana"
+
+msgid "Company"
+msgstr "Companie"
+
+#, c-format
+msgid "Contents of %s"
+msgstr "Continut %s"
+
+msgid "Default Display"
+msgstr "Afisaj implicit"
+
+msgid "Delete"
+msgstr "Stergere"
+
+msgid "Deletion failed"
+msgstr "Stergere esuata"
+
+msgid "Directory"
+msgstr "Director"
+
+msgid "Display Options"
+msgstr "Optiuni afisaj "
+
+#, c-format
+msgid "Edit '%s'"
+msgstr "Editare '%s'"
+
+msgid "Edit"
+msgstr "Editare"
+
+msgid "Email"
+msgstr "E-mail"
+
+msgid "Error"
+msgstr "Eroare"
+
+msgid "Export Addressbook"
+msgstr "Exportare agenda"
+
+msgid "Export"
+msgstr "Exportare"
+
+msgid "Failed to access the specified address book."
+msgstr "Nu s-a putut accesa agenda specificata."
+
+#, c-format
+msgid "Failed to browse %s."
+msgstr "Rasfoire esuata pentru %s."
+
+msgid "Failed to connect to the specified directory."
+msgstr "Conectare esuata la directorul specificat."
+
+#, c-format
+msgid "Failed to search the directory: %s"
+msgstr "Cautare esuata in directorul: %s"
+
+msgid "Fax"
+msgstr "Fax"
+
+msgid "Find"
+msgstr "Cautare"
+
+msgid "From"
+msgstr "De la"
+
+msgid "Help"
+msgstr "Ajutor"
+
+msgid "Home Address"
+msgstr "Adresa acasa"
+
+msgid "Home Phone"
+msgstr "Telefon acasa"
+
+msgid "If importing CSV data: does the first row contain the field names?"
+msgstr "Daca se importa date CSV: contine primul rand numele campului?"
+
+msgid "Illegal or malformed form data."
+msgstr "Data invalida sau corupta."
+
+msgid "Import Addressbook"
+msgstr "Importare agenda"
+
+msgid "Import"
+msgstr "Importare"
+
+msgid "Import/Export Addressbooks"
+msgstr "Importare/Exportare agende"
+
+msgid "Import/Export"
+msgstr "Importare/Exportare"
+
+msgid "Invalid addressbook."
+msgstr "Agenda invalida."
+
+msgid "Invalid e-mail address."
+msgstr "Adresa de e-mail invalida."
+
+msgid "Invalid name."
+msgstr "Nume invalid."
+
+msgid "Language"
+msgstr "Limba"
+
+msgid "List"
+msgstr "Lista"
+
+msgid "Matching"
+msgstr "Corespunzator(oare)"
+
+msgid "Message"
+msgstr "Mesaj"
+
+msgid "Name"
+msgstr "Nume"
+
+msgid ""
+"None of the available address books are configured to allow you to add new "
+"entries to them. If you believe this is an error, please contact your system "
+"administrator."
+msgstr ""
+"Mici una din agendele disponibile nu e configurata pentru adaugare de noi "
+"intrari. Daca se considera ca este o greseala, contactati administratorul "
+"de sistem."
+
+msgid "Notes"
+msgstr "Notite"
+
+msgid "Options"
+msgstr "Optiuni"
+
+msgid "Please choose an address book to add a contact to."
+msgstr "Alege o agenda in care sa se adauge contactul."
+
+msgid "Please select a directory:"
+msgstr "Selectati un director:"
+
+msgid "Problem?"
+msgstr "Problema?"
+
+msgid "Reset"
+msgstr "Resetare"
+
+msgid "Save Changes"
+msgstr "Salvare schimbari"
+
+msgid "Save"
+msgstr "Salvare"
+
+msgid "Search Results"
+msgstr "Rezultate cautare"
+
+msgid "Search"
+msgstr "Cautare"
+
+msgid "Search&nbsp;Results"
+msgstr "Cautare&nbsp;Rezultate"
+
+msgid "Select the destination to import to:"
+msgstr "Selecteaza destinatia spre care se importa:"
+
+msgid "Select the file to import:"
+msgstr "Selecteaza fisierul care se importa:"
+
+msgid "Select the format to export to:"
+msgstr "Selecteaza formatul in care se exporta:"
+
+msgid "Select the format to import from:"
+msgstr "Selecteaza formatul din care se importa:"
+
+msgid "Select the source to export from:"
+msgstr "Selecteaza sursa din care se exporta:"
+
+msgid "Select view to display by default."
+msgstr "Selecteaza vizualizarea implicita."
+
+msgid "Select which fields to display in the address lists."
+msgstr "Selecteaza campurile ce vor fi afisate in listele de adrese."
+
+msgid "Select your preferred language:"
+msgstr "Selecteaza limba preferata:"
+
+msgid "Selected Columns:"
+msgstr "Coloane selectate:"
+
+#, c-format
+msgid "Send mail to %s"
+msgstr "Trimitere mail catre %s"
+
+msgid "Set your preferred display language."
+msgstr "Setare limbaj pentru afisare."
+
+msgid "Some of Turba's configuration files are missing:"
+msgstr "Anumite fisiere de configurare Turba lipsesc:"
+
+msgid "Success"
+msgstr "Succes"
+
+msgid "The data got lost"
+msgstr "Datele au fost pierdute"
+
+msgid "The data got lost."
+msgstr "Datele au fost pierdute"
+
+msgid "The file contained no data."
+msgstr "Fisierul nu contine date"
+
+msgid "There are no browseable address books."
+msgstr "Nu exista agende pentru rasfoit."
+
+#, c-format
+msgid "There are no entries in %s."
+msgstr "Nu exista intrari in %s."
+
+msgid "There are no writeable address books."
+msgstr "Nu exista agende in care sa se scrie."
+
+msgid ""
+"There was a problem with the file upload. The file may have been larger than "
+"the maximum allowed size."
+msgstr ""
+"A aparut o problema cu uploadul fisierului. Fisierul s-ar putea sa fie mai "
+"mare decat este acceptat."
+
+msgid ""
+"There was an error adding this object. Contact your system administrator for "
+"further help."
+msgstr ""
+"A aparut o problema la aceasta adaugare. Contactati administratorul de "
+"sistem pentru asistenta."
+
+msgid ""
+"There was an error deleting this object. Contact your system administrator "
+"for further help."
+msgstr ""
+"A aparut o eroare la aceasta stergere. Contactati administratorul de "
+"sistem pentru asistenta."
+
+msgid "There was an error importing the data."
+msgstr "A aparut o eroare la importarea datelor."
+
+msgid "There was an error importing the uploaded file"
+msgstr "A aparut o eroare la uploadul fisierului"
+
+msgid ""
+"This file controls the default preferences for Turba, and also controls "
+"which preferences users can alter."
+msgstr ""
+"Acest fisier controleaza preferintele implicite ale Turba, precum si "
+"alte preferinte pentru utilizatori."
+
+msgid ""
+"This file controls the stylesheet that is used to set colors and fonts in "
+"addition to or overriding Horde defaults."
+msgstr ""
+"Acest fisier controleaza schema de culori si fonturi diferite de cele "
+"implicite Horde."
+
+msgid ""
+"This file defines the Turba global attribute names and types - names, email "
+"addresses, etc."
+msgstr ""
+"Acest fisier defineste atributele globale Turba, nume si tipuri - nume, "
+"e-mail, adrese, etc."
+
+msgid "This file defines the list of available sources for Turba."
+msgstr "Acest fisier defineste o lista cu sursele disponibile pentru Turba."
+
+msgid ""
+"This is the main Turba configuration file. It contains paths and options for "
+"the Turba scripts."
+msgstr ""
+"Acesta e principalul fisier de configurare Turba. Contine caile si optiunile "
+"pentru scripturile Turba."
+
+msgid "This number must be at least one."
+msgstr "Acest numar trebuie sa fie minim 1."
+
+msgid "This person is already in your addressbook."
+msgstr "Aceasta persoana este deja in agenda ta. "
+
+msgid "This value must be a number."
+msgstr "Aceasta valoare trebuie sa fie numerica."
+
+msgid "Title"
+msgstr "Titlu"
+
+msgid "Turba is not properly configured"
+msgstr "Turba nu este configurat corect"
+
+#, c-format
+msgid "Unable to load the definition of %s."
+msgstr "Nu se pot incarca definitiile %s."
+
+msgid "User Options"
+msgstr "Optiuni utilizator"
+
+msgid "View to display by default:"
+msgstr "Afisare implicita:"
+
+msgid "Warning"
+msgstr "Avertisment"
+
+msgid "Work Address"
+msgstr "Adresa birou"
+
+msgid "Work Phone"
+msgstr "Telefon birou"
+
+msgid ""
+"You didn't map any fields from the imported file to the corresponding fields "
+"in Turba."
+msgstr ""
+"Nu ati mapat campurile din fisierul importat cu campurile corespunzatoare "
+"in Turba"
+
+msgid "Your Information"
+msgstr "Detalii personale"
+
+msgid "Your options have been updated."
+msgstr "Optiunile tale au fost salvate."
+
+msgid "[Edit]"
+msgstr "[Editare]"
+
+msgid "add column"
+msgstr "adaugare coloana"
+
+msgid "move left"
+msgstr "mutare stanga"
+
+msgid "move right"
+msgstr "mutare dreapta"
+
+msgid "remove column"
+msgstr "stergere coloana"
diff --git a/turba/po/ru_RU.po b/turba/po/ru_RU.po
new file mode 100644 (file)
index 0000000..f357a42
--- /dev/null
@@ -0,0 +1,1227 @@
+# Russian Turba Translation
+# Copyright
+# Ignat Ikryanov <iignat@newmail.ru>, 2001
+# Anton Nekhoroshih <anton@valuehost.ru>, 2001
+# Fedor A. Fetisov <faf@ssc.ru>, 2002
+# Alexey Zakharov <baber@mosga.net>, 2008
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba H3 v2.2\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-02-02 19:43+0200\n"
+"PO-Revision-Date: 2008-02-02 20:00+0200\n"
+"Last-Translator: Alexey Zakharov <baber@mosga.net>\n"
+"Language-Team: Russian <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CP1251\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr ""
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Èìÿ Ôàìèëèÿ\" (Âàñÿ Ïóïêèí)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Ôàìèëèÿ, Èìÿ\" (Ïóïêèí, Âàñÿ)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr ""
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Äîñòóï çàïðåùåí äëÿ %s"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Äîáàâèòü"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Äîáàâèòü Êîíòàêò"
+
+#: templates/prefs/addressbookselect.inc:173
+#, fuzzy
+msgid "Add address book"
+msgstr "Àäðåñíàÿ êíèãà"
+
+#: templates/prefs/columnselect.inc:237
+#, fuzzy
+msgid "Add column"
+msgstr "äîáàâèòü ñòîëáåö"
+
+# fuzzy
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "çàãðóçèòü"
+
+# fuzzy
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Äîáàâèòü"
+
+#: lib/Driver.php:1561 lib/Driver/null.php:57
+#, fuzzy
+msgid "Adding contacts is not available."
+msgstr "Íåò äîñòóïíûõ íàñòðîåê."
+
+#: templates/addressbooks.inc:87 templates/addressbook_list.php:15
+msgid "Address Book"
+msgstr "Àäðåñíàÿ êíèãà"
+
+#: templates/addressbook_list.php:12
+#, fuzzy
+msgid "Address Book List"
+msgstr "Ñîäåðæàíèå àäðåñíîé êíèãè"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Ñîäåðæàíèå àäðåñíîé êíèãè"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Àäðåñíûå êíèãè"
+
+#: data.php:331
+#, fuzzy
+msgid "Address book successfully purged."
+msgstr "Ôàéë %s óñïåøíî èìïîðòèðîâàí"
+
+#: templates/addressbooks.inc:63
+#, fuzzy
+msgid "Address book to delete "
+msgstr "Àäðåñíàÿ êíèãà äîñòóïíà òîëüêî äëÿ ÷òåíèÿ."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Ýòè àäðåñíûå êíèãè ÍÅ áóäóò îòîáðàæåíû:"
+
+#: search.php:160 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Ðàñøèðåííûé Ïîèñê"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Ïñåâäîíèì"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+#: templates/browse/footerAlpha.inc:7 templates/browse/footerAlpha.inc:10
+msgid "All"
+msgstr "Âñå"
+
+#: lib/api.php:729
+msgid "Already Exists"
+msgstr ""
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr ""
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr ""
+
+# fuzzy, php-format
+#: templates/browse/javascript.inc:85
+#, fuzzy, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Âû óâåðåíû, ÷òî õîòèòå ñäåëàòü ýòî?"
+
+# fuzzy
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Âû óâåðåíû, ÷òî õîòèòå óäàëèòü ýòè êîíòàêòû?"
+
+#: config/attributes.php.dist:377
+#, fuzzy
+msgid "Assistant"
+msgstr "Íàñòðîéêè ïîëüçîâàòåëÿ"
+
+# fuzzy
+#: search.php:157 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Ïîèñê"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, fuzzy, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Îøèáêà ïðè óäàëåíèè"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Äåíü ðîæäåíèÿ"
+
+#: config/attributes.php.dist:99
+#, fuzzy
+msgid "Birthdays"
+msgstr "Äåíü ðîæäåíèÿ"
+
+#: contact.php:103 templates/browse/row.inc:6
+#, fuzzy
+msgid "Blank name"
+msgstr "Èìÿ çàäà÷è"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Âìåñòå"
+
+# fuzzy
+#: templates/menu.inc:8
+#, fuzzy
+msgid "Browse"
+msgstr "Âûáðàòü"
+
+#: config/attributes.php.dist:288
+#, fuzzy
+msgid "Business Category"
+msgstr "Íîâàÿ êàòåãîðèÿ"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV-ôàéë"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr ""
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Îòìåíà"
+
+# fuzzy, php-format
+# php-format
+#: lib/Driver/kolab.php:620
+#, fuzzy, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Äîáàâèòü â àäðåñíóþ êíèãó (%s)"
+
+# fuzzy
+#: config/attributes.php.dist:349
+msgid "Category"
+msgstr "Êàòåãîðèÿ"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Âûäåëèòü âñå"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Êàêèå àäðåñíûå êíèãè áóäóò îòîáðàæåíû, è â êàêîì ïîðÿäêå:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Âûáîð àäðåñíûõ êíèã äëÿ èñïîëüçîâàíèÿ"
+
+# fuzzy
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Âûáåðèòå ñâîéñòâà, êîòîðûé áóäóò îòîáðàæåíû"
+
+# fuzzy
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Çàêðûòü"
+
+#: templates/browse/header.inc:7
+#, fuzzy
+msgid "Close Search"
+msgstr "Î÷èñòèòü"
+
+# fuzzy
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Ñòîëáöû"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Íåîòîáðàæàåìûå ñâîéñòâà:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "CSV-ôàéë (ðàçäåëåííûé çàïÿòûìè)"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "CSV-ôàéë (ôîðìàò Microsoft Outlook)"
+
+#: config/sources.php.dist:229 config/sources.php.dist:905
+#, fuzzy
+msgid "Communications"
+msgstr "Íàñòðîéêè"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "Êîìïàíèÿ"
+
+#: config/attributes.php.dist:223
+#, fuzzy
+msgid "Company Address"
+msgstr "Äîìàøíèé àäðåñ"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:398 lib/api.php:443
+#: lib/api.php:494 lib/api.php:529 lib/api.php:578 lib/api.php:624
+#: lib/api.php:665 lib/api.php:782 lib/api.php:869 lib/api.php:928
+#: lib/api.php:1020 lib/api.php:1229 lib/api.php:1301 lib/api.php:1386
+#, fuzzy, php-format
+msgid "Connection failed: %s"
+msgstr "Îøèáêà ïðè óäàëåíèè"
+
+#: lib/Driver/ldap.php:68
+#, fuzzy
+msgid "Connection failure"
+msgstr "Îøèáêà ïðè óäàëåíèè"
+
+# fuzzy
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Íàéòè êîíòàêò"
+
+#: config/sources.php.dist:837
+#, fuzzy
+msgid "Contacts"
+msgstr "Ïîêàçàòü Êîíòàêòû"
+
+#: templates/list/numPager.inc:3
+#, fuzzy
+msgid "Contacts displayed:"
+msgstr "Íåò çàìå÷àíèé äëÿ îòîáðàæåíèÿ"
+
+# fuzzy, php-format
+#: lib/Views/Browse.php:338
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Êîíòàêòû â ãðóïïå: %s"
+
+#: templates/browse/actions.inc:18
+#, fuzzy
+msgid "Copy"
+msgstr "Êîìïàíèÿ"
+
+#: templates/addressbooks.inc:54 lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Ñîçäàòü"
+
+#: templates/addressbooks.inc:41 lib/Forms/CreateAddressBook.php:34
+#, fuzzy
+msgid "Create Address Book"
+msgstr "Ñîäåðæàíèå àäðåñíîé êíèãè"
+
+#: templates/addressbook_list.php:8
+#, fuzzy
+msgid "Create a new Address Book"
+msgstr "Ñîäåðæàíèå àäðåñíîé êíèãè"
+
+# fuzzy
+# fuzzy
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Ñîçäàòü íîâóþ ãðóïïó â:"
+
+#: lib/ObjectView.php:133 lib/Views/Contact.php:74
+#, fuzzy
+msgid "Created"
+msgstr "Ñîçäàòü"
+
+#: contact.php:86
+#, fuzzy
+msgid "De_lete"
+msgstr "Óäàëèòü"
+
+#: addressbooks/index.php:41 templates/addressbooks.inc:77
+#: templates/addressbook_list.php:33 templates/browse/actions.inc:3
+#: lib/Renderer.php:47 lib/Renderer.php:50 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
+msgid "Delete"
+msgstr "Óäàëèòü"
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "Óäàëèòü %s"
+
+#: config/attributes.php.dist:300
+#, fuzzy
+msgid "Department"
+msgstr "Ïðèêðåïëÿåìîå"
+
+# fuzzy
+#: templates/addressbooks.inc:116 lib/Forms/EditAddressBook.php:44
+#: lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr "Îïèñàíèå"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Êàòàëîã"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Îáîëî÷êà"
+
+# fuzzy
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Îñíîâíûå íàñòðîéêè"
+
+# fuzzy
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Çàãðóçèòü"
+
+# fuzzy
+#: templates/browse/row.inc:13 templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Çàãðóçèòü vCard"
+
+#: addressbooks/index.php:39 templates/addressbooks.inc:103
+#: templates/addressbook_list.php:29 templates/browse/row.inc:21
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+#: templates/browse/contactrow.inc:33 lib/Renderer.php:42
+msgid "Edit"
+msgstr "Ðåäàêòèðîâàíèå"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, fuzzy, php-format
+msgid "Edit \"%s\""
+msgstr "Ðåäàêòèðîâàíèå '%s'"
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "Ðåäàêòèðîâàíèå %s"
+
+# fuzzy
+#: templates/addressbooks.inc:82
+#, fuzzy
+msgid "Edit Address Books"
+msgstr "Àäðåñíûå êíèãè"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "E-mail"
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr ""
+
+#: lib/Views/Browse.php:264 lib/Views/Browse.php:304
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr ""
+
+#: lib/Views/Browse.php:134
+#, fuzzy, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Îøèáêà ïðè èìïîðòå äàííûõ."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr ""
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr ""
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr ""
+
+#: lib/api.php:535
+#, fuzzy, php-format
+msgid "Error searching the address book: %s"
+msgstr "Îøèáêà ïðè äîñòóïå ê óêàçàííîé àäðåñíîé êíèãå."
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Ýêñïîðò"
+
+# fuzzy
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Ýêñïîðò àäðåñíîé êíèãè"
+
+#: templates/data/export.inc:22
+#, fuzzy
+msgid "Export only the selected contacts."
+msgstr "Horde íå ïðàâèëüíî íàñòðîåí"
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr ""
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+
+#: lib/Views/Browse.php:186
+#, fuzzy, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Îøèáêà ïðè ïîèñêå â êàòàëîãå: %s"
+
+#: search.php:151
+#, fuzzy
+msgid "Failed to search the address book"
+msgstr "Îøèáêà ïðè äîñòóïå ê óêàçàííîé àäðåñíîé êíèãå."
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Îøèáêà ïðè ïîèñêå â êàòàëîãå: %s"
+
+#: config/sources.php.dist:536
+#, fuzzy
+msgid "Favourite Recipients"
+msgstr "Íåðàñêðûòûå ïîëó÷àòåëè"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "Ôàêñ"
+
+# fuzzy
+# fuzzy
+#: display.php:99 lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Ôàéëû"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Íàéòè"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+#, fuzzy
+msgid "Finish"
+msgstr "Íàéòè"
+
+#: config/attributes.php.dist:53
+#, fuzzy
+msgid "First Name"
+msgstr "Ïåðâàÿ ñòðàíèöà"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr ""
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Îò"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Äîìàøíèé àäðåñ"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Äîìàøíèé òåëåôîí"
+
+#: config/sources.php.dist:653
+msgid "IMSP"
+msgstr ""
+
+# fuzzy, php-format
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Èìïîðò àäðåñíîé êíèãè, Øàã %d"
+
+# fuzzy
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Èìïîðò/Ýêñïîðò àäðåñíîé êíèãè"
+
+# fuzzy
+#: lib/api.php:777 lib/api.php:864
+msgid "Invalid ID"
+msgstr "Íåêîððåêòíîå èìÿ."
+
+# fuzzy
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:310 lib/api.php:524
+#: lib/api.php:573 lib/api.php:619 lib/api.php:660 lib/api.php:773
+#: lib/api.php:860 lib/api.php:918 lib/api.php:1369
+#, fuzzy, php-format
+msgid "Invalid address book: %s"
+msgstr "Íåêîððåêòíàÿ àäðåñíàÿ êíèãà."
+
+# fuzzy
+#: lib/api.php:1373 lib/api.php:1447 lib/api.php:1503
+msgid "Invalid email"
+msgstr "Íåêîððåêòíûé e-mail."
+
+# fuzzy
+#: lib/api.php:1381
+msgid "Invalid entry"
+msgstr "Íåêîððåêòíîå èìÿ."
+
+#: lib/Driver/ldap.php:281
+#, fuzzy
+msgid "Invalid key specified."
+msgstr "Áûëà óêàçàíà íåêîððåêòíàÿ âåëè÷èíà."
+
+# fuzzy
+#: lib/api.php:1377
+msgid "Invalid name"
+msgstr "Íåêîððåêòíîå èìÿ."
+
+#: lib/api.php:922
+#, fuzzy
+msgid "Invalid objectId"
+msgstr "Íåêîððåêòíîå èìÿ."
+
+#: config/attributes.php.dist:276
+#, fuzzy
+msgid "Job Title"
+msgstr "Çàãîëîâîê"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr ""
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "Àäðåñíàÿ êíèãà LDIF"
+
+#: config/attributes.php.dist:389
+msgid "Language"
+msgstr "ßçûê"
+
+#: config/attributes.php.dist:395
+msgid "Latitude"
+msgstr ""
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Ñïèñîê"
+
+#: config/sources.php.dist:224 config/sources.php.dist:901
+msgid "Location"
+msgstr "Ðàñïîëîæåíèå"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Ñîâïàäåíèå"
+
+#: lib/api.php:285
+#, fuzzy
+msgid "Maximum Number of Contacts"
+msgstr "Ìàêñèìàëüíîå êîëè÷åñòâî ñòðàíèö"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Ìàêñèìàëüíîå êîëè÷åñòâî ñòðàíèö"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr ""
+
+#: config/attributes.php.dist:65
+#, fuzzy
+msgid "Middle Names"
+msgstr "Èìÿ ôàéëà"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr ""
+
+# fuzzy
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Ìîáèëüíûé òåëåôîí"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, fuzzy, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Îøèáêà ïðè óäàëåíèè"
+
+#: templates/browse/header.inc:8
+#, fuzzy
+msgid "More Options..."
+msgstr "Íàñòðîéêè ïîëüçîâàòåëÿ"
+
+#: lib/api.php:1489
+msgid "More than 1 entry found"
+msgstr ""
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Ïåðåìåñòèòü"
+
+#: templates/prefs/columnselect.inc:248
+#: templates/prefs/addressbookselect.inc:184
+#, fuzzy
+msgid "Move left"
+msgstr "ñìåñòèòü âëåâî"
+
+#: templates/prefs/columnselect.inc:250
+#: templates/prefs/addressbookselect.inc:186
+#, fuzzy
+msgid "Move right"
+msgstr "ñìåñòèòü âïðàâî"
+
+# fuzzy
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Àäðåñíàÿ êíèãà Mulberry"
+
+#: lib/api.php:1405
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+
+# fuzzy
+# fuzzy
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "Àäðåñíàÿ êíèãà"
+
+# fuzzy
+# fuzzy
+#: addressbooks.php:119
+#, fuzzy
+msgid "My Address Books"
+msgstr "Àäðåñíàÿ êíèãà"
+
+#: templates/addressbooks.inc:108 lib/Forms/EditAddressBook.php:43
+#: lib/Forms/CreateAddressBook.php:36 config/attributes.php.dist:47
+msgid "Name"
+msgstr "Èìÿ"
+
+# fuzzy
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Èìåíà"
+
+#: config/attributes.php.dist:71
+#, fuzzy
+msgid "Name Prefixes"
+msgstr "Êëåòî÷íàÿ ðàäèîñâÿçü"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr ""
+
+# fuzzy
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Èìÿ"
+
+# fuzzy
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Äîáàâèòü íîâóþ çàïèñü"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Äàëåå"
+
+#: config/attributes.php.dist:89
+#, fuzzy
+msgid "Nickname"
+msgstr "Èìÿ"
+
+#: lib/api.php:1492 lib/api.php:1543
+#, php-format
+msgid "No %s entry found for %s"
+msgstr ""
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+
+#: search.php:71
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr ""
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr ""
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "Çàìåòêè"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Êîë-âî çàïèñåé íà ñòðàíèöå"
+
+#: lib/api.php:793 lib/api.php:937
+#, fuzzy
+msgid "Object not found"
+msgstr "Îòìåíèòü èçìåíåíèÿ"
+
+#: config/attributes.php.dist:282
+#, fuzzy
+msgid "Occupation"
+msgstr "Íàñòðîéêè"
+
+#: config/attributes.php.dist:306
+#, fuzzy
+msgid "Office"
+msgstr "Çàãîëîâîê"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+
+#: config/sources.php.dist:232 config/sources.php.dist:909
+msgid "Other"
+msgstr ""
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "Ïóáëè÷íûé êëþ÷ PGP"
+
+#: config/attributes.php.dist:269
+#, fuzzy
+msgid "Pager"
+msgstr "Âñòàâèòü"
+
+# fuzzy
+# fuzzy
+#: lib/Views/DeleteContact.php:57
+#, fuzzy
+msgid "Permanently delete this contact?"
+msgstr "Óäàëèòü çòó çàäà÷ó"
+
+#: deletefile.php:36 lib/Driver.php:701 lib/api.php:669 lib/api.php:786
+#: lib/api.php:873 lib/api.php:931 lib/api.php:1390 lib/Driver/sql.php:481
+#, fuzzy
+msgid "Permission denied"
+msgstr "Íàñòðîéêè ïîëüçîâàòåëÿ"
+
+# fuzzy
+#: templates/addressbooks.inc:100
+msgid "Permissions"
+msgstr "Ïðàâà äîñòóïà"
+
+#: config/sources.php.dist:221 config/sources.php.dist:897
+msgid "Personal"
+msgstr "Ëè÷íûå"
+
+# fuzzy
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Àäðåñíàÿ êíèãà Pine"
+
+# fuzzy
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Ïîæàëóéñòà ââåäèòå íîâîå èìÿ:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+#, fuzzy
+msgid "Previous"
+msgstr "Ïðåäûäóùàÿ ñòðàíèöà"
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr ""
+
+# fuzzy
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Óäàëèòü èç ãðóïïû"
+
+#: lib/Driver.php:1591
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+
+# fuzzy
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Ïîëíîñòüþ çàìåíèòü ñóùåñòâóþùóþ àäðåñíóþ êíèãó. <b>Ïðè ýòîì áóäóò óäàëåíû "
+"ÂÑÅ çàïèñè èç òåêóùåé àäðåñíîé êíèãè</b>"
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Ñáðîñèòü"
+
+#: templates/addressbooks.inc:125 lib/Forms/EditContact.php:26
+#: lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr "Ñîõðàíèòü"
+
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:58 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Ïîèñê"
+
+# fuzzy
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Âûáåðèòå àäðåñíóþ êíèãó äëÿ ýêñïîðòà:"
+
+# fuzzy
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Êóäà Âû õîòèòå èìïîðòèðîâàòü:"
+
+# fuzzy
+# fuzzy
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Óêàæèòå êîäèðîâêó èìïîðòèðóåìîãî ôàéëà:"
+
+# fuzzy
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Âûáåðèòå ôîðìàò ýêñïîðòèðóåìîãî ôàéëà:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Èìïîðòèðóåìûé ôàéë:"
+
+# fuzzy
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Âûáåðèòå ôîðìàò èìïîðòèðóåìîãî ôàéëà:"
+
+# fuzzy
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Âûáåðèòå ôîðìàò îòîáðàæåíèÿ èìåí:"
+
+# fuzzy
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Íàñòðîéêà ðåæèìà îòîáðàæåíèÿ ïî óìîë÷àíèþ"
+
+# fuzzy
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Âûáîð ïîðÿäêà îòîáðàæåíèÿ ñòîëáöîâ â ñïèñêå àäðåñîâ."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Âûáîð ôîðìàòà îòîáðàæåíèÿ èìåí"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Ïîêàçàòü Êîíòàêòû"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Ïîêàçàòü Ãðóïïû"
+
+# fuzzy, php-format
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d áûë óñïåøíî äîáàâëåí"
+
+# fuzzy, php-format
+#: lib/Views/Browse.php:214
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Äîáàâëåíî \"%s\" â \"%s\"."
+
+# fuzzy, php-format
+#: lib/Views/Browse.php:290
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Ñîçäàíà ãðóïïà '%s'"
+
+#: search.php:126
+#, fuzzy, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Íåêîððåêòíàÿ àäðåñíàÿ êíèãà."
+
+# fuzzy, php-format
+# fuzzy, php-format
+# fuzzy, php-format
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Óäàëåíî %d êîíòàêòîâ"
+
+# fuzzy, php-format
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Óäàëåíî %d êîíòàêòîâ èç ãðóïïû"
+
+#: data.php:61
+msgid "TSV"
+msgstr ""
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "TSV-ôàéë (ðàçäåëåííûé òàáóëÿöèåé)"
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+
+#: addressbooks.php:71
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Ïàïêà \"%s\" áûëà óñïåøíî óäàëåíà."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr ""
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+#, fuzzy
+msgid "The requested contact was not found."
+msgstr "Ïðèêðåïëåííûå"
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Íåò àäðåñíûõ êíèã, äîñòóïíûõ äëÿ âûáîðà."
+
+# fuzzy
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Ýòè êíèãè áóäóò îòîáðàæåíû â ñëåäóþùåì ïîðÿäêå:"
+
+# fuzzy
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Ýòè ñâîéñòâà áóäóò îòîáðàæåíû"
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Àäðåñíàÿ êíèãà ïî óìîë÷àíèþ äëÿ äîáàâëåíèÿ èëè èìïîðòà êîíòàêòîâ"
+
+#: lib/Driver.php:1431 lib/Turba.php:643
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Íåâîçìîæíî çàãðóçèòü îïðåäåëåíèå %s."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "Îòìåíèòü èçìåíåíèÿ"
+
+# fuzzy
+#: config/attributes.php.dist:352
+msgid "Unfiled"
+msgstr "Ïóñòîé"
+
+#: lib/api.php:715 lib/api.php:818 lib/api.php:970
+#, fuzzy, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Íåêîððåêòíîå èìÿ."
+
+# fuzzy, php-format
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Ïðîñìîòð %s"
+
+#: minisearch.php:76
+#, fuzzy
+msgid "View Contact"
+msgstr "Äîáàâèòü íîâóþ çàïèñü"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Ðåæèì ïî óìîë÷àíèþ:"
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr ""
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Ðàáî÷èé àäðåñ"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Ðàáî÷èé òåëåôîí"
+
+#: edit.php:66 display.php:52 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr ""
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr ""
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr ""
+
+#: lib/Views/Browse.php:357
+msgid "Your default address book is not browseable."
+msgstr ""
+
+#: templates/browse/contactrow.inc:12
+#, fuzzy
+msgid "[no value]"
+msgstr "Çàìåòêè"
+
+# fuzzy
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "Âûáðàòü"
+
+#: templates/browse/actions.inc:50
+#, fuzzy
+msgid "_Contacts"
+msgstr "Ïîêàçàòü Êîíòàêòû"
+
+# fuzzy
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Óäàëèòü"
+
+# fuzzy
+#: contact.php:82
+msgid "_Edit"
+msgstr "Ðåäàêòèðîâàòü"
+
+# fuzzy
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "Èìïîðò/Ýêñïîðò"
+
+#: templates/browse/actions.inc:49
+#, fuzzy
+msgid "_Lists"
+msgstr "Ñïèñîê"
+
+# fuzzy
+# fuzzy
+#: lib/Turba.php:582
+#, fuzzy
+msgid "_My Address Books"
+msgstr "Àäðåñíàÿ êíèãà"
+
+# fuzzy
+# fuzzy
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "Äîáàâèòü"
+
+# fuzzy
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "Ïå÷àòü"
+
+#: templates/browse/actions.inc:3
+#, fuzzy
+msgid "_Remove from this list"
+msgstr "Óäàëèòü ïàðó"
+
+# fuzzy
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "Ïîèñê"
+
+# fuzzy
+#: contact.php:79
+#, fuzzy
+msgid "_View"
+msgstr "Ïðîñìîòð"
+
+#: templates/browse/column_headers.inc:24
+#, fuzzy
+msgid "ascending"
+msgstr "Ïî âîçðàñòàíèþ"
+
+#: vcard.php:45
+#, fuzzy
+msgid "contact"
+msgstr "Ïîêàçàòü Êîíòàêòû"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr ""
+
+#: data.php:233
+#, fuzzy
+msgid "contacts.ldif"
+msgstr "Ïîêàçàòü Êîíòàêòû"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr ""
+
+#: lib/Block/tree_menu.php:37
+msgid "in %s"
+msgstr "â %s"
+
+#: config/attributes.php.dist:386
+#, fuzzy
+msgid "male"
+msgstr "Çàãîëîâîê"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "áåç ôîðìàòèðîâàíèÿ"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "íåò"
+
+# fuzzy
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "â ãðóïïó"
+
+#: templates/browse/actions.inc:22
+#, fuzzy
+msgid "to a different Address Book"
+msgstr "Ýêñïîðò àäðåñíîé êíèãè"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/sk_SK.po b/turba/po/sk_SK.po
new file mode 100644 (file)
index 0000000..ab2f2af
--- /dev/null
@@ -0,0 +1,1824 @@
+# Turba Slovak translation.
+# Copyright 2002 Leo Mrafko. <leo@oel.sk> (original translator)
+# (C) 2002, 2003 Ivan Noris <vix@vazka.sk>
+# Martin Matu¹ka <martin@matuska.org>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.0\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-05-12 11:43+0200\n"
+"PO-Revision-Date: 2008-03-19 12:00+0100\n"
+"Last-Translator: Ivan Noris <vix@vazka.sk>\n"
+"Language-Team: Slovak <vix@vazka.sk>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-2\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Prida» adresár IMSP"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " Vymaza» adresár IMSP"
+
+#: data.php:350
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" u¾ existuje a preto nebol importovaný."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"\"%s\" aktualizovaný, ale nastala chyba pri ukladaní poslaného súboru: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" aktualizované."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" sa nepodarilo skopírova», preto¾e je to skupina."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" sa nepodarilo presunú», preto¾e je to skupina."
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Meno, Priezvisko\" (napr. John Doe)"
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Priezvisko, Meno\" (napr. Doe, John)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s bol(a) pridaný(á)."
+
+#: data.php:369
+#, php-format
+msgid "%s file successfully imported."
+msgstr "Súbor %s bol úspe¹ne importovaný."
+
+#: lib/Driver.php:555
+#, php-format
+msgid "%s of %s"
+msgstr "%s z %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s a¾ %s z %s"
+
+#: lib/Turba.php:560
+#, php-format
+msgid "%s's Address Book"
+msgstr "Adresár pou¾ívateµa %s"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Prehliadaè musí podporova» iFrames"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Prístup do %s bol odporetý"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Prida»"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Prida» kontakt"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Prida» adresár"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Prida» súbor"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Prida» do"
+
+#: lib/Driver.php:1876 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Pridávanie kontaktov nie je k dispozícii."
+
+#: templates/addressbook_list.php:16 templates/addressbooks.inc:105
+msgid "Address Book"
+msgstr "Adresár"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Zooznam adresárov"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Zobrazi» adresár"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Adresáre"
+
+#: data.php:330
+msgid "Address book successfully purged."
+msgstr "Adresár bol úspe¹ne vymazaný."
+
+#: templates/addressbooks.inc:80
+msgid "Address book to delete "
+msgstr "Adresár, ktorý má by» zmazaný "
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Adresáre, ktoré nebudú zobrazené:"
+
+#: search.php:199 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Roz¹írené vyhµadávanie"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Prezývka"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "V¹etky"
+
+#: lib/api.php:810
+msgid "Already Exists"
+msgstr "U¾ existuje"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Výroèia"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Výroèie"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Naozaj chcete vymaza» %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Naozaj chcete vymaza» vybrané adresy?"
+
+#: templates/addressbooks.inc:45
+msgid "Are you sure you want to delete the addressbook: "
+msgstr "Naozaj chcete vymaza» adresár: "
+
+#: config/attributes.php.dist:378
+msgid "Assistant"
+msgstr "Asistent/ka"
+
+#: search.php:196 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Základné hµadanie"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Pripojenie (bind) zlyhalo: (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Narodeniny"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Narodeniny"
+
+#: contact.php:106 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Prázdne meno"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Obe"
+
+#: addressbooks/index.php:39 templates/menu.inc:8
+#: templates/addressbook_list.php:29
+msgid "Browse"
+msgstr "Prezera»"
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr "Obchodné zameranie"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV (hodnoty oddelené èiarkou)"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Nemo¾né prida» skupinu do samej saba."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Zru¹i»"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Nemo¾né vymaza» v¹etky záznamy v adresári pre %s"
+
+#: config/attributes.php.dist:350
+msgid "Category"
+msgstr "Kategória"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Zmeni» %s zoraïovanie podµa %s"
+
+#: addressbooks/index.php:41 templates/addressbook_list.php:33
+msgid "Change Permissions"
+msgstr "Zmeni» prístupové práva"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Vybra» v¹etky/¾iadne"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Vybra» _v¹etky/¾iadne"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Deti"
+
+#: templates/addressbooks.inc:60
+msgid "Choose a name"
+msgstr "Zvoµte názov"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Vyberte si adresár"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Vyberte, ktoré adresáre sa majú zobrazi» a v akom poradí:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Vyberte adresár, ktorý chcete pou¾i»."
+
+#: templates/prefs/columnselect.inc:43
+msgid "Click an address book to sort its columns:"
+msgstr "Kliknite na adresár na zoradenie jeho prieèinkov:"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Zavrie»"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Zavrie» výsledok hµadania"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Nastavenia ståpcov"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Hodnoty oddelené èiarkou"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Hodnoty oddelené èiarkou (Microsoft Outlook)"
+
+#: config/attributes.php.dist:476
+msgid "Common Address Extended"
+msgstr "Roz¹írená adresa (v¹eobecné)"
+
+#: config/attributes.php.dist:494
+msgid "Common City"
+msgstr "Mesto (v¹eobecné)"
+
+#: config/attributes.php.dist:512
+msgid "Common Country"
+msgstr "©tát (v¹eobecné)"
+
+#: config/attributes.php.dist:420
+msgid "Common Phone"
+msgstr "Telefón (v¹eobecné)"
+
+#: config/attributes.php.dist:488
+msgid "Common Post Office Box"
+msgstr "P.O.Box (v¹eobecné)"
+
+#: config/attributes.php.dist:506
+msgid "Common Postal Code"
+msgstr "Smerovacie èíslo (v¹eobecné)"
+
+#: config/attributes.php.dist:500
+msgid "Common State/Province"
+msgstr "©tát/provincia (v¹eobecné)"
+
+#: config/attributes.php.dist:482
+msgid "Common Street"
+msgstr "Ulica (v¹eobecné)"
+
+#: config/attributes.php.dist:445
+msgid "Common Video Call"
+msgstr "Videohovor (v¹eobecné)"
+
+#: config/sources.php.dist:243 config/sources.php.dist:922
+msgid "Communications"
+msgstr "Komunikácia"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "Spoloènos»"
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr "Adresa spoloènosti"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:433 lib/api.php:478
+#: lib/api.php:529 lib/api.php:572 lib/api.php:627 lib/api.php:686
+#: lib/api.php:736 lib/api.php:872 lib/api.php:964 lib/api.php:1030
+#: lib/api.php:1136 lib/api.php:1369 lib/api.php:1446 lib/api.php:1595
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Pokus o spojenie zlyhal: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Nastala chyba pri pokuse o spojenie"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Hµada» kontakt"
+
+#: config/sources.php.dist:851
+msgid "Contacts"
+msgstr "Kontakty"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Zobrazené kontakty:"
+
+#: lib/Views/Browse.php:339
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Kontakty v zozname: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopírova»"
+
+#: templates/addressbooks.inc:69 lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Vytvori»"
+
+#: templates/addressbooks.inc:56 lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Vytvori» adresár"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Vytvori» nový adresár"
+
+#: lib/ListView.php:447
+msgid "Create a new Contact List in:"
+msgstr "Vytvori» nový zoznam kontaktov v:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "Vytvorené"
+
+#: contact.php:89
+msgid "De_lete"
+msgstr "Vy_maza»"
+
+#: addressbooks/index.php:42 templates/addressbook_list.php:35
+#: templates/addressbooks.inc:94 templates/browse/actions.inc:3
+#: lib/Views/DeleteContact.php:58 lib/Forms/DeleteAddressBook.php:45
+msgid "Delete"
+msgstr "Vymaza»"
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "Vymaza» %s"
+
+#: templates/addressbooks.inc:76
+msgid "Delete Address Book"
+msgstr "Vymaza» adresár"
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Vymazávanie zlyhalo: (%s) %s"
+
+#: lib/Driver.php:1884 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Vymazávanie kontaktov nie je k dispozícii."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Vymazávanie zlyhalo"
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr "Oddelenie"
+
+#: templates/addressbooks.inc:138 lib/Forms/CreateAddressBook.php:37
+#: lib/Forms/EditAddressBook.php:44
+msgid "Description"
+msgstr "Popis"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Adresár"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Zobrazenie"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Nastavenie zobrazenia"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Stiahnu»"
+
+#: templates/browse/row.inc:15 templates/browse/row.inc:16
+#: templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Stiahnu» vCard"
+
+#: templates/prefs/columnselect.inc:52
+msgid "Drag columns to re-arrange them. Check a column to enable it."
+msgstr ""
+"Presunte ståpce na zmenu ich poradia. Kliknite na ståpec na jeho zapnutie."
+
+#: addressbooks/index.php:40 templates/addressbook_list.php:31
+#: templates/addressbooks.inc:123 templates/browse/actions.inc:6
+#: templates/browse/row.inc:28 templates/browse/row.inc:29
+#: templates/browse/column_headers.inc:10 templates/browse/contactrow.inc:33
+msgid "Edit"
+msgstr "Upravi»"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Upravi» \"%s\""
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "Upravi» %s"
+
+#: templates/addressbooks.inc:100
+msgid "Edit Address Books"
+msgstr "Upravi» adresáre"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "Email"
+
+#: config/attributes.php.dist:243
+msgid "Emails"
+msgstr "E-Maily"
+
+#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Nastala chyba pri pridávaní %d kontaktov do zoznamu."
+
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Nastala chyba pri pridávaní %d z %d po¾adovaných kontaktov do zoznamu."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Nastala chyba pri vymazávaní %d kontaktov."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Nastala chyba pri vymazávaní %d z %d po¾adovaných kontaktov."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Nastala chyba pri vymazávaní %d kontaktov zo zoznamu."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr ""
+"Nastala chyba pri vymazávaní %d z %d po¾adovaných kontaktov zo zoznamu."
+
+#: lib/api.php:578
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Nastala chyba pri prehµadávaní adresára: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Export"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Exportova» adresár"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Exportova» iba vybrané kontakty."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Exportova» celý nasledujúci adresár."
+
+#: data.php:142 data.php:241 data.php:319 add.php:42 search.php:121
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Nastala chyba pri prístupe k adresáru: %s"
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Nastala chyba pri pridávaní %s do %s: %s"
+
+#: lib/Views/Browse.php:345
+msgid "Failed to browse list"
+msgstr "Nemo¾no zobrazi» zoznam"
+
+#: lib/Views/Browse.php:376
+msgid "Failed to browse the directory"
+msgstr "Nastala chyba pri prehµadávaní adresára."
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Nepodarilo sa zmeni» meno: (%s) %s; staré DN = %s, nové DN = %s, root = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Nemo¾no nájs» objekt na pridanie: %s"
+
+#: search.php:190
+msgid "Failed to search the address book"
+msgstr "Nastala chyba pri hµadaní adresára"
+
+#: data.php:157
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Nastala chyba pri prehµadávaní adresára: %s"
+
+#: config/sources.php.dist:550
+msgid "Favourite Recipients"
+msgstr "Obµúbení adresáti"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "Fax"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Súbory"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Nájs»"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+msgid "Finish"
+msgstr "Ukonèi»"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "Krstné meno"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "URL s informáciou o voµnosti/obsadenosti"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Z"
+
+#: config/attributes.php.dist:384
+msgid "Gender"
+msgstr "Pohlavie"
+
+#: config/sources.php.dist:776
+msgid "Global Address Book"
+msgstr "Globálny adresár"
+
+#: templates/browse/row.inc:49 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Skupina"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Adresa (domov)"
+
+#: config/attributes.php.dist:546
+msgid "Home Address Extended"
+msgstr "Roz¹írená adresa (domov)"
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr "Mesto (domov)"
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr "Krajina (domov)"
+
+#: config/attributes.php.dist:414
+msgid "Home Email"
+msgstr "E-mail (domov)"
+
+#: config/attributes.php.dist:430
+msgid "Home Fax"
+msgstr "Fax (domov)"
+
+#: config/attributes.php.dist:552
+msgid "Home Latitude"
+msgstr "Zemepisná ¹írka (domov)"
+
+#: config/attributes.php.dist:557
+msgid "Home Longitude"
+msgstr "Zemepisná då¾ka (domov)"
+
+#: config/attributes.php.dist:440
+msgid "Home Mobile Phone"
+msgstr "Mobilný telefón (domov)"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Telefón (domov)"
+
+#: config/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr "P.O.Box (domov)"
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "Smerovacie èíslo (domov)"
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "©tát/provincia (domov)"
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "Ulica a èíslo (domov)"
+
+#: config/attributes.php.dist:455
+msgid "Home Video Call"
+msgstr "Videohobor (domov)"
+
+#: config/attributes.php.dist:540
+msgid "Home Website URL"
+msgstr "URL WWW stránky (domov)"
+
+#: config/sources.php.dist:667
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Importova» adresár, krok %d"
+
+#: data.php:387
+msgid "Import/Export Address Books"
+msgstr "Importova»/Exportova» adresáre"
+
+#: config/attributes.php.dist:360
+msgid "Initials"
+msgstr "Iniciály"
+
+#: config/attributes.php.dist:366
+msgid "Instant Messenger"
+msgstr "Instantný messenger"
+
+#: lib/api.php:867 lib/api.php:959
+msgid "Invalid ID"
+msgstr "Neplatné ID"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:345 lib/api.php:567
+#: lib/api.php:622 lib/api.php:681 lib/api.php:729 lib/api.php:863
+#: lib/api.php:955 lib/api.php:1020 lib/api.php:1578
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Neplatný adresár: %s"
+
+#: lib/api.php:1024
+msgid "Invalid contact unique ID"
+msgstr "Neplatné unikátne ID kontaktu"
+
+#: lib/api.php:1582 lib/api.php:1668 lib/api.php:1729
+msgid "Invalid email"
+msgstr "Neplatná e-mailová adresa"
+
+#: lib/api.php:1590
+msgid "Invalid entry"
+msgstr "Neplatná polo¾ka"
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr "Bol zadaný neplatný kµúè."
+
+#: lib/api.php:1586
+msgid "Invalid name"
+msgstr "Neplatné meno"
+
+#: config/attributes.php.dist:276
+msgid "Job Title"
+msgstr "Funkcia"
+
+#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Kµúè pre ulo¾enie musí by» UID a nie %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"Je po¾adovaná podpora LDAP, ale LDAP modul nie je dostupný alebo nahratý."
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "Adresár LDIF"
+
+#: config/attributes.php.dist:390
+msgid "Language"
+msgstr "Jazyk"
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr "Posledná aktualizácia"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Priezvisko"
+
+#: config/attributes.php.dist:396
+msgid "Latitude"
+msgstr "Zemepisná ¹írka"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Zoznam"
+
+#: config/sources.php.dist:238 config/sources.php.dist:918
+msgid "Location"
+msgstr "Adresa"
+
+#: config/attributes.php.dist:401
+msgid "Longitude"
+msgstr "Zemepisná då¾ka"
+
+#: addressbooks/index.php:46 templates/addressbook_list.php:2
+msgid "Manage Address Books"
+msgstr "Spravova» adresáre"
+
+#: config/attributes.php.dist:372
+msgid "Manager"
+msgstr "Mana¾ér"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Obsahujúce"
+
+#: lib/api.php:306
+msgid "Maximum Number of Contacts"
+msgstr "Maximálny poèet kontaktov"
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "Maximálny poèet strán"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Zoznam menu"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Prostredné mená"
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr "Chýba DN v konfigurácii LDAP zdroja."
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Mobilný telefón"
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Úprava zlyhala: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Ïal¹ie nastavenia..."
+
+#: lib/api.php:1706
+msgid "More than 1 entry found"
+msgstr "Vyhovuje viac ako 1 polo¾ka"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Presunú»"
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Presunú» vµavo"
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Presunú» vpravo"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Adresár z Mulberry"
+
+#: lib/api.php:1614
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "Existuje viacero osôb s adresou [%s], ale ¾iadna s menom [%s]"
+
+#: config/sources.php.dist:162
+msgid "My Address Book"
+msgstr "Môj adresár"
+
+#: addressbooks.php:174
+msgid "My Address Books"
+msgstr "Moje adresáre"
+
+#: templates/addressbooks.inc:130 lib/Forms/CreateAddressBook.php:36
+#: lib/Forms/EditAddressBook.php:43 config/attributes.php.dist:47
+msgid "Name"
+msgstr "Meno"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Formát mena"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Predpony mien"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Prípony mien"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Meno:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Nový kontakt"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Ïalej"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "Prezývka"
+
+#: lib/api.php:1709 lib/api.php:1769
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Pre %s neexistuje nijaká polo¾ka %s"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"®iadne adresáre nie sú momentálne dostupné. Import a export sú vypnuté."
+
+#: search.php:107
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "®iadne adresáre nie sú momentálne dostupné. Hµadanie je vypnuté."
+
+#: lib/api.php:561 lib/api.php:616 lib/api.php:676 lib/api.php:858
+#: lib/api.php:950 lib/api.php:1015
+msgid "No address book specified"
+msgstr "Nebol zadaný ¾iaden adresár"
+
+#: minisearch.php:77
+msgid "No contacts found"
+msgstr "Neboli nájdené ¾iadne kontakty"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "®iadne kontakty neodpovedajú aktuálnemu filtru."
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "®iadne odpovedajúce kontakty."
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr "Neexistuje ¾iaden zdroj pre obµúbených adresátov."
+
+#: lib/api.php:762 lib/api.php:1060
+msgid "No vCard data was found."
+msgstr "Neboli nájdené údaje vCard."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "®iadne"
+
+#: lib/Views/DeleteContact.php:26 lib/Views/EditContact.php:33
+#: lib/Views/Contact.php:49
+msgid "Not Found"
+msgstr "Nenájdené"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Nenájdené"
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "Poznámky"
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "Poèet polo¾iek na stránku"
+
+#: lib/api.php:909 lib/api.php:1085
+msgid "Object not found"
+msgstr "Objekt nebol nájdený"
+
+#: lib/Driver/kolab.php:1184
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Objekt s UID %s neexistuje!"
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr "Povolanie"
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr "Pracovisko"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Po ulo¾ení tejto stránky s nastaveniami bude Vá¹ adresár trvale vymazaný. Ak "
+"toto nechcete, musíte zmeni» Vá¹ výber na \"®iaden\"."
+
+#: lib/api.php:1068
+msgid "Only one vcard supported."
+msgstr "Iba jedna vcard je podporovaná"
+
+#: config/sources.php.dist:245 config/sources.php.dist:924
+msgid "Organization"
+msgstr "Organizácia"
+
+#: config/sources.php.dist:246 config/sources.php.dist:926
+msgid "Other"
+msgstr "Iné"
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "PGP verejný kµúè"
+
+#: config/attributes.php.dist:471
+msgid "PTT"
+msgstr "PTT"
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Trvale vymaza» tento kontakt?"
+
+#: deletefile.php:36 lib/Driver.php:721 lib/api.php:740 lib/api.php:1599
+#: lib/Driver/sql.php:486
+msgid "Permission denied"
+msgstr "Prístup zamietnutý"
+
+#: templates/addressbooks.inc:120
+msgid "Permissions"
+msgstr "Práva"
+
+#: config/sources.php.dist:235 config/sources.php.dist:914
+msgid "Personal"
+msgstr "Osobné"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Adresár z Pine"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Zadajte prosím meno pre nový zoznam:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:167
+msgid "Previous"
+msgstr "Predo¹lé"
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Chybná po¾iadavka: (%s) %s"
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Chyba pri èítaní: (%s) %s"
+
+#: lib/Driver.php:1868 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "Èitanie kontaktov nie je k dispozícii."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Naozaj chcete vymaza» adresár \"%s\"? Toto nie je mo¾né vrátit spä» a v¹etky "
+"kontakty v adresári budú trvale odstránené."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Vzdialený adresár"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Odstráni» zo zoznamu"
+
+#: lib/Driver.php:1906
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Odstránenie u¾ívateµských údajov nie je podporované ovladaèom aktuálneho "
+"adresára."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Prepísa» existujúci adresár importovaným adresárom? <strong>Varovanie: toto "
+"vyma¾e v¹etky polo¾ky vo Va¹om aktuálnom adresári.</strong>"
+
+#: lib/Driver.php:615
+msgid "Requested object not found."
+msgstr "Po¾adovaný objekt nebol nájdený"
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Obnovi» na prednastavené hodnoty"
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "Verejný S/MIME certifikát"
+
+#: config/attributes.php.dist:465
+msgid "SIP"
+msgstr "SIP"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "Chyba pri STARTTLS: (%s) %s"
+
+#: templates/addressbooks.inc:147 lib/Forms/EditAddressBook.php:46
+#: lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "Ulo¾i»"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Ulo¾i» hµadanie ako virtuálny adresár?"
+
+#: lib/Driver.php:1894 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Ukladanie kontaktov nie je k dispozícii."
+
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+msgid "Search"
+msgstr "Hµada»"
+
+#: lib/api.php:1374
+msgid "Search failed"
+msgstr "Hµadanie zlyhalo"
+
+#: lib/api.php:1604 lib/api.php:1610 lib/api.php:1619 lib/api.php:1632
+#, php-format
+msgid "Search failed: %s"
+msgstr "Hµadanie zlyhalo: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Hµada»: "
+
+#: lib/Driver.php:1853 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Hµadanie nie je k dispozícii."
+
+#: templates/addressbooks.inc:84
+msgid "Select an address book to delete"
+msgstr "Zvoµte adresár na vymazanie"
+
+#: templates/addressbooks.inc:109
+msgid "Select an address book to edit"
+msgstr "Zvoµte adresár na úpravu"
+
+#: templates/browse/row.inc:40
+msgid "Select contact"
+msgstr "Zvoµte kontakt"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Zvoµte adresár, z ktorého chcete exportova»:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Zvoµte adresár, do ktorého chcete importova»:"
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+"Vyberte adresáre, ktoré majú by» pou¾ité na synchronizáciu s externými "
+"zariadeniami:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Vyberte znakovú sadu zdrojového súboru:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Vyberte formát exportu:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Zvoµte súbor pre import:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Zvoµte formát exportu:"
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "Zvoµte formát zobrazovania mien:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr ""
+"Vyberte nastavenie ¹tandardného spôsobu zobrazenia a nastavenia notifikácie."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Nastavenie polí, ktoré sa budú zobrazova» v zozname adries."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Nastavenie formátu zobrazovania mien."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Bol vybraný adresár \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Zobrazi» %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Zobrazi» obidvoje"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Zobrazi» kontakty"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Zobrazi» zoznamy"
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "Smer triedenia"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Zoradi» podµa %s"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Zoradi» iba podµa %s"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Zoradi» podµa %s, potom podµa %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Zdroj:"
+
+#: lib/api.php:299
+msgid "Sources"
+msgstr "Zdroje"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Partner"
+
+#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Do zoznamu bol(o) úspe¹ne pridaný(ch) %d kontakt(ov)."
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Pridanie %s do %s bolo úspe¹né"
+
+#: lib/Views/Browse.php:291
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Úspe¹ne vytvorený adresár \"%s\"."
+
+#: search.php:165
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Úspe¹ne vytvorený virtuálny adresár \"%s\""
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Úspe¹ne vymazaný(ch) %d kontakt(ov)."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Zo zoznamu bolo úspe¹ne vymazaný(ch) %d kontakt(ov)."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV (hodnoty oddelené tabulátorom)"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Hodnoty oddelené tabulátorom"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Cieµový adresár"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Cieµový zoznam kontaktov"
+
+#: data.php:321
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Súbor %s neobsahuje ¾iadne kontakty."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "Backend VFS musí by» nastavený aby bolo mo¾né priklada» súbory."
+
+#: lib/Driver.php:1824
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Adresár \"%s\" neexistuje."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Adresár \"%s\" bol vytvorený."
+
+#: addressbooks.php:104
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "Adresár \"%s\" bol úspe¹ne vytvorený."
+
+#: addressbooks.php:130
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Adresár \"%s\" bol úspe¹ne zmazaný."
+
+#: addressbooks.php:151
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "Adresár \"%s\" bol úspe¹ne aktualizovaný."
+
+#: data.php:328
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Nepodarilo sa vymaza» kontakty z adresára: %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Adresár \"%s\" bol vymazaný."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "Adresár \"%s\" bol premenovaný na \"%s\"."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Adresár \"%s\" bol ulo¾ený."
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "Po¾adovaný kontakt neexistuje."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Súbor \"%s\" bol vymazaný."
+
+#: data.php:301
+msgid "The import can be finished despite the warnings."
+msgstr "Importovanie mô¾e by» ukonèené napriek varovaniam."
+
+#: lib/Views/DeleteContact.php:36 lib/Views/EditContact.php:43
+#: lib/Views/Contact.php:59
+msgid "The requested contact was not found."
+msgstr "Po¾adovaný kontakt nebol nájdený."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "®iadne adresáre nie sú prístupné na prezeranie."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"®iaden z dostupných adresárov neumo¾òuje vkladanie nových polo¾iek. Ak "
+"predpokladáte, ¾e ide o chybu, kontaktujte prosím správcu Vá¹ho systému."
+
+#: lib/Views/Browse.php:349
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: search.php:161
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Nastala chyba pri vytváraní virtuálneho adresára: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Nastala chyba pri pridávaní tohto kontaktu. Prosím kontaktujte správcu Vá¹ho "
+"systému."
+
+#: lib/Views/Browse.php:311
+msgid "There was an error creating a new list."
+msgstr "Nastala chyba pri vytváraní nového zoznamu."
+
+#: addressbooks.php:96 addressbooks.php:102
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Nastala chyba pri vytváraní tohto adresára: %s"
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Nastala chyba pri vymazávaní \"%s\" zo zdrojového adresára."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Nastala chyba pri vymazávaní tohto kontaktu: %s."
+
+#: lib/Views/Browse.php:355
+msgid "There was an error displaying the list"
+msgstr "Nastala chyba pri zobrazovaní zoznamu"
+
+#: data.php:355
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Nastala chyba pri importe údajov: %s"
+
+#: lib/api.php:758 lib/api.php:1055
+msgid "There was an error importing the iCalendar data."
+msgstr "Nastala chyba pri importe údajov iCalendar."
+
+#: lib/api.php:235
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Nastala chyba pri vymazávaní adresára %s"
+
+#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Nastala chyba pri vymazávaní tohto adresára: %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Nastala chyba pri ukladaní kontaktu. Prosím kontaktujte správcu Vá¹ho "
+"systému."
+
+#: addressbooks.php:149
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Nastala chyba pri aktualizácii tohto adresára: %s"
+
+#: data.php:187
+msgid "There were no addresses to export."
+msgstr "Neexistujú ¾iadne adresáre na export."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Adresáre budú zoradené v nasledovnom poradí:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Tento adresár nemô¾e by» vymazaný"
+
+#: data.php:286
+msgid "This file format is not supported."
+msgstr "Tento formát súboru nie je podporovaný."
+
+#: lib/api.php:1623 lib/api.php:1636
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Táto osoba u¾ má záznam %s v adresári."
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Toto bude prednastavený adresár pre pridávanie alebo importovanie kontaktov."
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "Èasová zóna"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Nemo¾né nájs» vlastníka kontaktu."
+
+#: lib/Driver.php:1746 lib/Turba.php:672
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Nemo¾né nahra» definíciu %s."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Nedá sa ulo¾i» adresár \"%s\": %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "Nie je mo¾né hµada»."
+
+#: config/attributes.php.dist:353
+msgid "Unfiled"
+msgstr "Nenastavená"
+
+#: lib/api.php:796 lib/api.php:906 lib/api.php:1073
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Nepodporovaný typ obsahu (Content-Type): %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Zobrazi» \"%s\""
+
+#: minisearch.php:72
+msgid "View Contact"
+msgstr "Zobrazi» kontakt"
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "Prednastavený spôsob zobrazenia:"
+
+#: config/attributes.php.dist:460
+msgid "VoIP"
+msgstr "VoIP"
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr "URL WWW stránky"
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Adresa (práca)"
+
+#: config/attributes.php.dist:524
+msgid "Work Address Extended"
+msgstr "Roz¹írená adresa (práca)"
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr "Mesto (práca)"
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr "Krajina (práca)"
+
+#: config/attributes.php.dist:408
+msgid "Work Email"
+msgstr "Email (práca)"
+
+#: config/attributes.php.dist:425
+msgid "Work Fax"
+msgstr "Fax (práca)"
+
+#: config/attributes.php.dist:530
+msgid "Work Latitude"
+msgstr "Zemepisná ¹írka (práca)"
+
+#: config/attributes.php.dist:535
+msgid "Work Longitude"
+msgstr "Zemepisná då¾ka (práca)"
+
+#: config/attributes.php.dist:435
+msgid "Work Mobile Phone"
+msgstr "Mobilný telefón (práca)"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Telefón (práca)"
+
+#: config/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr "P.O. Box (práca)"
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "Smerovacie èíslo (práca)"
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "©tát/provincia (práca)"
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "Ulica a èíslo (práca)"
+
+#: config/attributes.php.dist:450
+msgid "Work Video Call"
+msgstr "Videohovor (práca)"
+
+#: config/attributes.php.dist:518
+msgid "Work Website URL"
+msgstr "URL WWW stránky (práca)"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Nemáte právo na úpravu tohto adresára."
+
+#: data.php:250 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Nemáte právo vytvori» viac ako %d kontaktov v \"%s\"."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Nemáte právo na vymazanie tohto adresára."
+
+#: lib/api.php:198
+msgid "You are not allowed to remove user data."
+msgstr "Nemáte právo na vymazanie u¾ívateµských údajov."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Do virtuálneho adresára nemô¾ete pridáva» záznamy."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Do virtuálneho adresára nemô¾ete pridáva» kontakty."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Z virtuálneho adresára nemô¾ete vymaza» kontakty."
+
+#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
+#: lib/Views/EditContact.php:49
+msgid "You do not have permission to view this contact."
+msgstr "Nemáte právo na zobrazenie tohto kontaktu."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Nemáte právo na zobrazenie tohto objektu."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Nemáte právo na vymazanie tohto adresára."
+
+#: addressbooks.php:59
+msgid "You do not have permissions to delete this source."
+msgstr "Nemáte právo na vymazanie tohto zdroja."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"Na pou¾itie funkcie skontrolova» schému musíte ma» nain¹talovanú kni¾nicu "
+"PEAR Net_LDAP."
+
+#: search.php:148
+msgid "You must provide a name for virtual address books."
+msgstr "Musíte uvies» názov pre virtuálne adresáre."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Musíte vybra» cieµový adresár."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Musíte vybra» cieµový zoznam kontaktov."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Musíte vybra» aspoò jeden kontakt."
+
+#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+msgid "You only have permission to view this contact."
+msgstr "Máte právo iba na zobrazenie tohto kontaktu."
+
+#: lib/Views/Browse.php:362
+msgid "Your default address book is not browseable."
+msgstr "Vá¹ prednastavený adresár nie je mo¾né prehliada»."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[¾iadna hodnota]"
+
+#: lib/Turba.php:614
+msgid "_Browse"
+msgstr "_Prezera»"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Kontakty"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_Vymaza»"
+
+#: contact.php:85
+msgid "_Edit"
+msgstr "_Upravi»"
+
+#: lib/Turba.php:623
+msgid "_Import/Export"
+msgstr "_Import/Export"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "Zobrazi» _zoznamy"
+
+#: lib/Turba.php:611
+msgid "_My Address Books"
+msgstr "_Môj adresár"
+
+#: lib/Turba.php:617
+msgid "_New Contact"
+msgstr "_Nový kontakt"
+
+#: lib/Turba.php:628
+msgid "_Print"
+msgstr "_Tlaèi»"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Odst_ráni» z tohto zoznamu"
+
+#: lib/Turba.php:619
+msgid "_Search"
+msgstr "_Hµada»"
+
+#: contact.php:82
+msgid "_View"
+msgstr "Ná_hµad"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "vzostupne"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "pou¾ívateµom %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "Vami"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "kontakt"
+
+#: data.php:207 data.php:212 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "kontakty.csv"
+
+#: data.php:232
+msgid "contacts.ldif"
+msgstr "kontakty.ldif"
+
+#: data.php:217
+msgid "contacts.tsv"
+msgstr "kontakty.tsv"
+
+#: data.php:227
+msgid "contacts.vcf"
+msgstr "kontakty.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "zostupne"
+
+#: config/attributes.php.dist:387
+msgid "female"
+msgstr "¾ena"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "v %s"
+
+#: config/attributes.php.dist:387
+msgid "male"
+msgstr "mu¾"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "bez formátovania"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "¾iadne"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "do zoznamu kontaktov"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "do iného adresára"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/sl_SI.po b/turba/po/sl_SI.po
new file mode 100644 (file)
index 0000000..42df9ef
--- /dev/null
@@ -0,0 +1,1538 @@
+# translation of sl_SI.po to Slovene
+# Slovenian translations for Turba packaga
+# Slovenski prevod Turba paketa
+# Copyright 2006-2009 The Horde Project
+# This file is distributed under the same license as the horde package.
+#
+# Automatically generated, 2006.
+# Marko Milost <marko.milost@obala.si>, 2007.
+msgid ""
+msgstr ""
+"Project-Id-Version: sl_SI\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2007-10-08 13:07+0200\n"
+"PO-Revision-Date: 2007-10-08 13:58+0200\n"
+"Last-Translator: Marko Milost <marko.milost@obala.si>\n"
+"Language-Team: Slovene <sl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms:  nplurals=3;\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Dodaj IMSP Imenik"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "Zbriši IMSP Imenik"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" že obstaja in ni bil vnešen."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+"Vnos \"%s\" je bil ažuriran, ampak pri shranjevanju datoteke je prišlo do "
+"napake: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "Vpis \"%s\" je bil posodobljen."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" ni bil kopiran, ker je seznam."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" ni bil premaknjen, ker je seznam."
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Ime Priimek\"  (npr. Janez Kranjski)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Priimek, Ime\" (npr. Kranjski, Janez)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s dodan."
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "Datoteka %s uspešno uvožena."
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s k %s od %s"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "Knjiga naslovov uporabnika %s"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "Zahtevan je brskalnik ki podpira iFrames"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Dostop do %s zavrnjen"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Dodaj"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Dodaj stik"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Dodaj imenik"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Dodaj stolpec"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Dodaj datoteko"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Dodaj v"
+
+#: lib/Driver.php:1413
+msgid "Adding contacts is not available."
+msgstr "Dodajanje stikov ni na voljo."
+
+#: templates/addressbooks.inc:105
+msgid "Address Book"
+msgstr "Imenik"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Seznam Imenikov"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Imeniki"
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "Imenik uspešno počiščen."
+
+#: templates/addressbooks.inc:80
+msgid "Address book to delete "
+msgstr "Imenik za brisanje "
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Imeniki, ki jih ne prikažem:"
+
+#: search.php:161 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Napredno Iskanje"
+
+#: config/attributes.php.dist:74
+msgid "Alias"
+msgstr "Psevdonim"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Vse"
+
+#: lib/api.php:677
+msgid "Already Exists"
+msgstr "Že obstaja"
+
+#: config/attributes.php.dist:254
+msgid "Anniversary"
+msgstr "Obletnica"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Si prepričan, da želiš izbrisati %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Si prepričan, da želiš izbrisati izbrane vnose?"
+
+#: templates/addressbooks.inc:45
+msgid "Are you sure you want to delete the addressbook: "
+msgstr "Si prepričan, da želiš izbrisati izbrano knjigo naslovov: "
+
+#: search.php:158 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Osnovno Iskanje"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Vezava spodletela: (%s) %s"
+
+#: config/attributes.php.dist:194
+msgid "Birthday"
+msgstr "Rojstni dan"
+
+#: lib/Driver.php:506
+#, php-format
+msgid "Birthday of %s"
+msgstr "Rojstni dan od %s"
+
+#: lib/api.php:1197
+msgid "Birthdays"
+msgstr "Rojstni dnevi"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Prazno ime"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Oboje"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Brskaj"
+
+#: config/attributes.php.dist:189
+msgid "Business Category"
+msgstr "Kategorija posla"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Ne morem dodati skupine v samo sebe."
+
+#: lib/Driver/kolab.php:620
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Ne morem izbrisati vseh vnosov imenika \"%s\""
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Spremeni %s razvrščanje v %s"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Izberi Vse/Nič"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Preveri _Vse/Nobenega"
+
+#: config/attributes.php.dist:265
+msgid "Children"
+msgstr "Otroci"
+
+#: templates/addressbooks.inc:60
+msgid "Choose a name"
+msgstr "Izberi ime"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Izberi imenik"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "Izberi imenik:"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Izberi imenik za prikaz in njegovo razvrščanje:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Izberi imenik katerega želiš uporabljati."
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Izberi stolpce, ki naj jih prikažem in v njihov vrstni red:"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Zapri"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Zapri iskanje"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Možnosti stolpcev"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Kolone, ki se naj ne prikažejo:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Vrednosti ločene z vejcami"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Vrednosti ločene z znaki (Microsoft Outlook)"
+
+#: config/attributes.php.dist:86
+msgid "Company"
+msgstr "Podjetje"
+
+#: config/attributes.php.dist:154
+msgid "Company Address"
+msgstr "Naslov podjetja"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:382 lib/api.php:427
+#: lib/api.php:477 lib/api.php:526 lib/api.php:572 lib/api.php:613
+#: lib/api.php:730 lib/api.php:817 lib/api.php:875 lib/api.php:964
+#: lib/api.php:1173 lib/api.php:1228 lib/api.php:1304
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Povezava spodletela: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Povezava spodletela"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Iskanje stika"
+
+#: config/sources.php.dist:802
+msgid "Contacts"
+msgstr "Stiki"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Prikazanih stikov:"
+
+#: lib/Views/Browse.php:336
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Stiki v seznamu: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopiraj"
+
+#: templates/addressbooks.inc:69
+msgid "Create"
+msgstr "Ustvari"
+
+#: templates/addressbooks.inc:56
+msgid "Create Address Book"
+msgstr "Ustvari imenik"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Ustvari nov spisek stikov v:"
+
+#: lib/Views/Contact.php:74
+msgid "Created"
+msgstr "Ustvarjeno"
+
+#: contact.php:86
+msgid "De_lete"
+msgstr "Izbriši"
+
+#: templates/addressbooks.inc:94 templates/browse/actions.inc:3
+#: lib/Views/DeleteContact.php:58
+msgid "Delete"
+msgstr "Izbriši"
+
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "Izbriši %s"
+
+#: templates/addressbooks.inc:76
+msgid "Delete Address Book"
+msgstr "Izbriši imenik"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Brisanje spodletelo: (%s) %s"
+
+#: lib/Driver.php:1421
+msgid "Deleting contacts is not available."
+msgstr "Brisanje stikov ni na voljo."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Brisanje spodletelo"
+
+#: config/attributes.php.dist:229
+msgid "Department"
+msgstr "Oddelek"
+
+#: templates/addressbooks.inc:138
+msgid "Description"
+msgstr "Opis"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Mapa"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Prikazovanje"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Možnosti prikaza"
+
+#: lib/Object.php:346
+msgid "Download"
+msgstr "Presnemi"
+
+#: templates/browse/row.inc:13
+msgid "Download vCard"
+msgstr "Presnemi vCard"
+
+#: config/attributes.php.dist:59
+msgid "Dr"
+msgstr "Dr"
+
+#: templates/addressbooks.inc:123 templates/browse/row.inc:21
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "Uredi"
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Uredi \"%s\""
+
+#: lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "Uredi %s"
+
+#: templates/addressbooks.inc:100
+msgid "Edit Address Books"
+msgstr "Uredi imenie"
+
+#: config/attributes.php.dist:62
+msgid "Email"
+msgstr "E-pošta"
+
+#: config/attributes.php.dist:68
+msgid "Emails"
+msgstr "Elektronski naslovi"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Napaka pri dodajanju %d stikov v listo."
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Napaka pri dodajanju %d od %d stikov v listo."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Napaka pri brisanju %d stikov."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Napaka pri brisanju %d od %d stikov."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Napaka pri brisanju %d stikov iz imenika."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Napaka pri brisanju %d od %d stikov z liste stikov."
+
+#: lib/api.php:483
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Napaka pri iskanju v imeniku: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Izvozi"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Izvozi Imenik"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Izvozi samo izbrane stike."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Izvozi izbran imenik v celoti."
+
+#: data.php:143 data.php:242 data.php:320 add.php:42 search.php:86
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Dostop do imenikja ni uspel: %s"
+
+#: lib/Views/Browse.php:208
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Dodajanje %s v %s ni uspelo: %s"
+
+#: lib/Views/Browse.php:342
+msgid "Failed to browse list"
+msgstr "Brskanje po seznamu ni uspelo"
+
+#: lib/Views/Browse.php:369
+msgid "Failed to browse the directory"
+msgstr "Brskanje po mapi ni uspelo"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Napaka pri spremembi imena: (%s) %s; Stari DN = %s, Novi DN = %s, Koren = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Iskanje objektov za dodajanje ni uspelo: %s"
+
+#: search.php:152
+msgid "Failed to search the address book"
+msgstr "Napaka pri iskanju v imeniku"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Iskanje po mapi ni uspelo: %s"
+
+#: config/sources.php.dist:505
+msgid "Favourite Recipients"
+msgstr "Priljubljeni prejemniki"
+
+#: config/attributes.php.dist:177
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/Forms/Contact.php:40
+msgid "Files"
+msgstr "Datoteke"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Najdi"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+msgid "Finish"
+msgstr "Končaj"
+
+#: config/attributes.php.dist:46
+msgid "First Name"
+msgstr "Ime"
+
+#: config/attributes.php.dist:218
+msgid "Freebusy URL"
+msgstr "Freebusy URL"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Od"
+
+#: config/sources.php.dist:731
+msgid "Global Address Book"
+msgstr "Globalni Imenik"
+
+#: templates/browse/row.inc:39
+msgid "Group"
+msgstr "Skupina"
+
+#: config/attributes.php.dist:92
+msgid "Home Address"
+msgstr "Domači naslov"
+
+#: config/attributes.php.dist:103
+msgid "Home City"
+msgstr "Domače mesto"
+
+#: config/attributes.php.dist:118
+msgid "Home Country"
+msgstr "Domača džrava"
+
+#: config/attributes.php.dist:160
+msgid "Home Phone"
+msgstr "Domači telefon"
+
+#: config/attributes.php.dist:113
+msgid "Home Postal Code"
+msgstr "Domača poštna številka"
+
+#: config/attributes.php.dist:108
+msgid "Home State/Province"
+msgstr "Domača država/okraj"
+
+#: config/attributes.php.dist:98
+msgid "Home Street Address"
+msgstr "Domač naslov"
+
+#: config/sources.php.dist:622
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Uvozi Adresar, korak %d"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Uvoz/Izvoz Imenikov"
+
+#: config/attributes.php.dist:244
+msgid "Initials"
+msgstr "Začetnice"
+
+#: lib/api.php:725 lib/api.php:812
+msgid "Invalid ID"
+msgstr "Neveljavna ID"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:294 lib/api.php:472
+#: lib/api.php:521 lib/api.php:567 lib/api.php:608 lib/api.php:721
+#: lib/api.php:808 lib/api.php:865 lib/api.php:1287
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Neveljaven imenik: %s"
+
+#: lib/api.php:1291 lib/api.php:1365 lib/api.php:1421
+msgid "Invalid email"
+msgstr "Neveljavna e-pošta"
+
+#: lib/api.php:1299
+msgid "Invalid entry"
+msgstr "Neveljaven vpis"
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "Podan neveljaven ključ"
+
+#: lib/api.php:1295
+msgid "Invalid name"
+msgstr "Neveljavno ime"
+
+#: lib/api.php:869
+msgid "Invalid objectId"
+msgstr "Neveljaven objectId"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Ključ za shranjevanje mora biti UID ne %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr "Potrebna je podpora LDAP, vendar LDAP modul ni na voljo ali ni naloen."
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF Imenik"
+
+#: lib/Views/Contact.php:80
+msgid "Last Modified"
+msgstr "Zadnja sprememba"
+
+#: config/attributes.php.dist:51
+msgid "Last Name"
+msgstr "Priimek"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Seznam"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Ujemanje"
+
+#: lib/api.php:269
+msgid "Maximum Number of Contacts"
+msgstr "Največje število sikov"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Največje število strani"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Seznam"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "V konfiguraciji LDAP izvora manjka DN."
+
+#: config/attributes.php.dist:172
+msgid "Mobile Phone"
+msgstr "Mobilni telefon"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Spreminjanje ni uspelo: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Ostale možnosti..."
+
+#: lib/api.php:1406
+msgid "More than 1 entry found"
+msgstr "Več kot 1 vpis najden"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Premakni"
+
+#: templates/prefs/columnselect.inc:248
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Premakni levo"
+
+#: templates/prefs/columnselect.inc:250
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Premakni desno"
+
+#: config/attributes.php.dist:59
+msgid "Mr"
+msgstr "G"
+
+#: config/attributes.php.dist:59
+msgid "Mrs"
+msgstr "Ga"
+
+#: config/attributes.php.dist:59
+msgid "Ms"
+msgstr "G"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry Imenik"
+
+#: lib/api.php:1323
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "Obstaja več oseb z naslovom [%s], vendar nobena z imenom [%s]"
+
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "Moj Imenik"
+
+#: addressbooks.php:174
+msgid "My Address Books"
+msgstr "Moji Imeniki"
+
+#: templates/addressbooks.inc:130 config/attributes.php.dist:40
+msgid "Name"
+msgstr "Ime"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Oblika imena"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Ime:"
+
+#: add.php:70 lib/Block/tree_menu.php:28
+msgid "New Contact"
+msgstr "Nov stik"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Naprej"
+
+#: config/attributes.php.dist:234
+msgid "Nickname"
+msgstr "Nadimek"
+
+#: lib/api.php:1409 lib/api.php:1458
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Noben vpis %s ni bil najden za %s"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "Trenutno ni na voljo noben imenik. Uvoz in izvoz sta onemogočena."
+
+#: search.php:72
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Trenutno ni na voljo noben imenik. Iskanje je onemogočeno."
+
+#: lib/api.php:1374
+msgid "No address books found."
+msgstr "Noben imenik ni bil najden."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Noben stik ni bil najden"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Ni stikov, ki bi ustrezali izbranim kriterijem."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Ni ujemajočih stikov."
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Vir priljubljenih povezav ne obstaja."
+
+#: lib/api.php:634 lib/api.php:901
+msgid "No vCard data was found."
+msgstr "Podatki vCard niso bili najdeni."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Noben"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "Ni najden"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Ni najden"
+
+#: config/attributes.php.dist:200
+msgid "Notes"
+msgstr "Beležke"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Število vpisov na stran"
+
+#: lib/api.php:741 lib/api.php:881
+msgid "Object not found"
+msgstr "Objekt ni bil najden"
+
+#: config/attributes.php.dist:239
+msgid "Office"
+msgstr "Pisarna"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Ko boš shranil te nastavitve, bo imenik izbrisan. Če si tega ne želiš moraš "
+"izbrati \"Noben\"."
+
+#: lib/api.php:909
+msgid "Only one vcard supported."
+msgstr "Samo ena vizitka (vcard) je podprta."
+
+#: config/attributes.php.dist:206
+msgid "PGP Public Key"
+msgstr "Javni PGP ključ"
+
+#: config/attributes.php.dist:183
+msgid "Pager"
+msgstr "Pager"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Resnično želiš izbrisati stik?"
+
+#: deletefile.php:36 lib/Driver.php:638 lib/api.php:617 lib/api.php:734
+#: lib/api.php:821 lib/api.php:1101 lib/api.php:1308 lib/Driver/sql.php:470
+msgid "Permission denied"
+msgstr "Dostop zavrnjen"
+
+#: templates/addressbooks.inc:120
+msgid "Permissions"
+msgstr "Pravice dostopa"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine Imenik"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Prosim poimenuj nov seznam stikov:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+msgid "Previous"
+msgstr "Prejšnji"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Poizvedba ni uspešna: (%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Branje ni uspešno: (%s) %s"
+
+#: lib/Driver.php:1405
+msgid "Reading contacts is not available."
+msgstr "Branje stikov ni na voljo."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Izbriši imenik"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Odstrani stolpec"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Odstrani s tega seznama"
+
+#: lib/Driver.php:1443
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr "Odstanitev podatkov ni podrto v izbranem gonilniku imenikov"
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Zamenjam obstoječi imenik z uvoženim? <b>Opozorilo: To dejanje bo izbrisalo "
+"vse zapise v vašem trenutnem imeniku.</b>"
+
+#: lib/Driver.php:535
+msgid "Requested object not found."
+msgstr "Zahtevan objekt ni bil najden."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Ponastavi na Privzeto"
+
+#: config/attributes.php.dist:212
+msgid "S/MIME Public Certificate"
+msgstr "Javno S/MIME Potrdilo"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS napaka: (%s) %s"
+
+#: config/attributes.php.dist:56 config/attributes.php.dist:249
+msgid "Salutation"
+msgstr "Pozdrav"
+
+#: templates/addressbooks.inc:147 lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "Shrani"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Shranim iskanje kot virtualni imenik?"
+
+#: lib/Driver.php:1431
+msgid "Saving contacts is not available."
+msgstr "Shranjevanje stikov ni na voljo."
+
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:59 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Išči"
+
+#: lib/api.php:1178
+msgid "Search failed"
+msgstr "Iskanje ni bilo uspešno"
+
+#: lib/api.php:1313 lib/api.php:1319 lib/api.php:1328 lib/api.php:1341
+#, php-format
+msgid "Search failed: %s"
+msgstr "Iskanje ni bilo uspešno: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Išči za: "
+
+#: lib/Driver.php:1390
+msgid "Searching is not available."
+msgstr "Iskanje ni na voljo."
+
+#: templates/addressbooks.inc:84
+msgid "Select an address book to delete"
+msgstr "Izberi imenik za izbris"
+
+#: templates/addressbooks.inc:109
+msgid "Select an address book to edit"
+msgstr "Izberi imenik za urejanje:"
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Izberi stik"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Izberi imenik za izvoz:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Izberi imenik za uvoz:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Izberi kodno tabelo uvožene datoteke"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Izberi obliko izvoza:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Izberi datoteko za uvoz:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Izberi obliko izvorne datoteke:"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Izberi obliko za prikaz imen:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Privzeti način prikaza, razvrščanje in deljenje na podstrani."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Izberi katera polja se bodo prikazana v seznamih naslovov."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Izberi obliko za prikaz imen."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Izbran imenik \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Prikaži %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Prikaži oboje"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Prikaži stike"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Prikaži sezname"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "Smer razvrščanja"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "Razvsti po %s"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Razvrsit samo po %s"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Razrsti najprej po %s, nato še po %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Izvor:"
+
+#: lib/api.php:262
+msgid "Sources"
+msgstr "Izvori"
+
+#: config/attributes.php.dist:260
+msgid "Spouse"
+msgstr "Žena"
+
+#: lib/Views/Browse.php:258 lib/Views/Browse.php:298
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Uspešno dodanih %d stikov v spisek."
+
+#: lib/Views/Browse.php:212
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Uspešno dodani %s v %s"
+
+#: lib/Views/Browse.php:288
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Uspešno ustvarjena lista \"%s\"."
+
+#: search.php:127
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Uspešno ustvarjen virutalni imenik \"%s\"."
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Uspešno izbrisanih %d stikov."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Uspešno odstranjenih %d stikov s spiska."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Vrednosti ločite s Tab-i"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Namenski Imenik"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Namenski spisek stikov"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Datoteka %s ne vsebuje strikov."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "VFS podpora bora biti nastavljena za podpiranje priponk."
+
+#: lib/Driver.php:1361
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Imenik \"%s\" ne obstaja."
+
+#: addressbooks.php:104
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "Imenik \"%s\" uspešno ustvarjen."
+
+#: addressbooks.php:130
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "Imenik \"%s\" uspešno odstranjen."
+
+#: addressbooks.php:151
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "Imenik \"%s\" uspešno ažuriran."
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Imenika ni bilo mogoče počistiti: %s"
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "Zahtevan stik ne obstaja."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Datoteka \"%s\" je bila izbrisana."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "Uvoz se lahko zaključi neglede na opozorila."
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "Zahtevan stik ni bil najden."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Ni imenikov po katerih bi bilo mogoče brskati."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Ni imenikov, v katere bi bilo mogoče pisati. Noben izmed dostopnih imenikov "
+"ni nastavljen tako, da bi dovoljeval dodajanje vpisov. Če misliš, da gre za "
+"napako, prosim kontaktiraj svojega sistemskega skrbnika."
+
+#: search.php:123
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Prišlo je do napake pri ustvarjanju virtualnega imenika: %s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Pri dodajanju stika je prišlo do napake. Za nadaljno pomoč kontaktiraj "
+"svojega sistemskega skrbnika."
+
+#: lib/Views/Browse.php:308
+msgid "There was an error creating a new list."
+msgstr "Pri ustvarjanju novega seznama je prišlo do napake."
+
+#: addressbooks.php:96 addressbooks.php:102
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "Prišlo je do napake pri ustvarjanju imenika: %s"
+
+#: lib/Views/Browse.php:218
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Prišlo je do napake pri brisanjeu \"%s\" z izvornega imenika."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Pri brisanju stika je prišlo do napake: %s"
+
+#: lib/Views/Browse.php:348
+msgid "There was an error displaying the list"
+msgstr "Prišlo je do napake pri prikazovanju spiska"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Pri uvažanju podatkov je prišlo do napake: %s"
+
+#: lib/api.php:630 lib/api.php:896
+msgid "There was an error importing the iCalendar data."
+msgstr "Pri uvažanju iCalendar podatkov je prišlo do napake."
+
+#: lib/api.php:215
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Prišlo je do napake pri odstranjevanju imenika za %s"
+
+#: addressbooks.php:113 addressbooks.php:120 addressbooks.php:128
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "Prišlo je do napake pri odstranjevanju imenika: %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Pri dodajanju stika je prišlo do napake. Za nadaljno pomoč kontaktirajte "
+"svojega sistemskega skrbnika."
+
+#: addressbooks.php:149
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "Prišlo je do napake pri ažuriranju imenika: %s"
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Ni naslovov za izvoz."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Spodnji stiki bodo prikazani v sledečem vrstnem redu:"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Spodnje kolone bodo prikazane v sledečem vrstnem redu:"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "Oblika datoteke ni podprta."
+
+#: lib/api.php:1332 lib/api.php:1345
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Oseba že ima vpis %s v imeniku"
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "To bo privzeti imenik imenik ob dodajanju in uvozu stikov."
+
+#: config/attributes.php.dist:80
+msgid "Title"
+msgstr "Naziv"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Ne najdem lastnika stika."
+
+#: lib/Driver.php:1283 lib/Turba.php:643
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Definicije %s ni bilo mogoče naložiti."
+
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "Ne morem iskati."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "Prekliči spremembe"
+
+#: lib/api.php:1213
+msgid "Unfiled"
+msgstr "Nedoločen"
+
+#: lib/api.php:663 lib/api.php:766 lib/api.php:914
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Nepodprt tip datoteke: %s"
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Poglej stik"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Privzeti način prikaza:"
+
+#: config/attributes.php.dist:224
+msgid "Website URL"
+msgstr "Spletna stran"
+
+#: config/attributes.php.dist:123
+msgid "Work Address"
+msgstr "Slubženi naslov"
+
+#: config/attributes.php.dist:134
+msgid "Work City"
+msgstr "Mesto službe"
+
+#: config/attributes.php.dist:149
+msgid "Work Country"
+msgstr "Država službe"
+
+#: config/attributes.php.dist:166
+msgid "Work Phone"
+msgstr "Službeni telefon"
+
+#: config/attributes.php.dist:144
+msgid "Work Postal Code"
+msgstr "Poštna številka službe"
+
+#: config/attributes.php.dist:139
+msgid "Work State/Province"
+msgstr "Država/Okraj službe"
+
+#: config/attributes.php.dist:129
+msgid "Work Street Address"
+msgstr "Službeni naslov"
+
+#: data.php:251 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:271
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "NImaš pravice dodati več kot %d stikov v \"%s\"."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Ne morem dodati stika v virtualni imenik."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Ne morem dodati novega stika v virtualni imenik."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Ne morem izbrisati stika iz virtualnega imenika."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Za ogled stika nimaš dovoljenja."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Za ogled objekta nimaš dovoljenja."
+
+#: addressbooks.php:59
+msgid "You do not have permissions to delete this source."
+msgstr "Nimaš pravice izbrsa tega vira."
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+
+#: search.php:110
+msgid "You must provide a name for virtual address books."
+msgstr "Podati moraš ime za virtualni imenik."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Izbrati moraš ciljni imenik."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Ponovno moraš izbrati ciljni seznam."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Najprej moraš izbrati vsaj en stik."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Za ogled stika potrebuješ pravice."
+
+#: lib/Views/Browse.php:355
+msgid "Your default address book is not browseable."
+msgstr "Privzeti imenik za pregledovanje."
+
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "_Preglej"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "_Stiki"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_Izbriši"
+
+#: contact.php:82
+msgid "_Edit"
+msgstr "Uredi"
+
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "_Uvozi/Izvozi"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "_Seznami"
+
+#: lib/Turba.php:582
+msgid "_My Address Books"
+msgstr "_Moj imenik"
+
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "_Nov stik"
+
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "Natisni"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "_Odstrani s seznama"
+
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "_Išči"
+
+#: contact.php:79
+msgid "_View"
+msgstr "Preglej"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "naraščajoče"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "stik"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "contact.ldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "contact.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "padajoče"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "v %s"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "ni formatiranja"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "noben"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "v spisek stikov"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "v drugi imenik"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/sv_SE.po b/turba/po/sv_SE.po
new file mode 100644 (file)
index 0000000..0778957
--- /dev/null
@@ -0,0 +1,1175 @@
+# Turba Swedish translation
+# Copyright 2002-2005 Andreas Dahlén.
+# Andreas Dahlén <andreas@dahlen.ws>, 2005.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.0-cvs\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2005-06-14 22:08+0200\n"
+"PO-Revision-Date: 2005-06-16 08:48+0100\n"
+"Last-Translator: Andreas Dahlén <andreas@dahlen.ws>\n"
+"Language-Team: Swedish <dev@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: templates/prefs/imsp_opt.inc:45
+msgid " Add an IMSP Addressbook"
+msgstr "Lägg till en IMSP-adressbok"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid " Delete IMSP Addressbook"
+msgstr "Radera IMSP-adressbok"
+
+#: data.php:299
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "'%s' finns redan och importerades inte."
+
+#: config/prefs.php.dist:135
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Förnamn Efternamn\"  (ie. John Doe)"
+
+#: config/prefs.php.dist:134
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Efternamn, Förnamn\" (ie. Doe, John)"
+
+#: add.php:108
+#, php-format
+msgid "%s added."
+msgstr "%s lades till."
+
+#: data.php:312
+#, php-format
+msgid "%s file successfully imported"
+msgstr "%s filen är importerad"
+
+#: templates/browse/footer.inc:5
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s till %s av %s"
+
+#: browse.php:159
+#, php-format
+msgid "'%s' was not copied because it is a list."
+msgstr "'%s' kopierades inte eftersom det är en lista."
+
+#: browse.php:157
+#, php-format
+msgid "'%s' was not moved because it is a list."
+msgstr "'%s' flyttades inte eftersom det är en lista."
+
+#: lib/Block/minisearch.php:45
+msgid "A browser that supports iFrames is required"
+msgstr "En webläsare som stödjer iFrames krävs"
+
+#: config/prefs.php.dist:156
+msgid "Above search form"
+msgstr "Ovanför sökformulär"
+
+#: view.php:51
+#, php-format
+msgid "Access denied to %s"
+msgstr "Access nekades till %s"
+
+#: add.php:59 templates/browse/actions.inc:22
+msgid "Add"
+msgstr "Lägg till"
+
+#: templates/prefs/addressbookselect.inc:174
+msgid "Add address book"
+msgstr "Lägg till en adressbok:"
+
+#: config/prefs.php.dist:46
+msgid "Add and Delete IMSP addressbooks"
+msgstr "Lägg till och radera IMSP-adressböcker"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Lägg till kolumn"
+
+#: edit.php:125
+msgid "Add file"
+msgstr "Lägg till fil"
+
+#: templates/browse/actions.inc:22
+msgid "Add to"
+msgstr "Lägg till"
+
+#: browse.php:30 config/prefs.php.dist:123
+msgid "Address Book Listing"
+msgstr "Adressbok"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Adressböcker"
+
+#: add.php:107
+msgid "Address book entry"
+msgstr "Adressbokspost"
+
+#: data.php:281
+msgid "Address book successfully purged."
+msgstr "Adressbooken är tömd."
+
+#: templates/prefs/addressbookselect.inc:170
+msgid "Address books that will not be displayed:"
+msgstr "Adressböcker som inte visas:"
+
+#: search.php:102 templates/browse/search.inc:36
+msgid "Advanced Search"
+msgstr "Avancerad sökning"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "Alias"
+
+#: templates/browse/actions.inc:41 templates/browse/footerAlpha.inc:7
+#: templates/browse/footerAlpha.inc:10
+msgid "All"
+msgstr "Alla"
+
+#: lib/api.php:492
+msgid "Already Exists"
+msgstr "Existerar redan"
+
+#: templates/browse/javascript.inc:90
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Är det säkert att du vill radera %s?"
+
+#: templates/browse/javascript.inc:64
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "Är du säker att du vill radera vald post?"
+
+#: config/prefs.php.dist:94
+msgid "Ascending"
+msgstr "Stigande"
+
+#: search.php:99 templates/browse/search.inc:35
+msgid "Basic Search"
+msgstr "Sökning"
+
+#: config/prefs.php.dist:155
+msgid "Below search form"
+msgstr "Nedanför sökformuläret"
+
+#: lib/Driver/ldap.php:77 lib/Driver/ldap.php:80
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Bind misslyckades: (%s) %s"
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "Födelsedag"
+
+#: templates/menu.inc:7
+msgid "Browse"
+msgstr "Lista"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr "Affärskategori"
+
+#: data.php:28
+msgid "CSV"
+msgstr "CSV"
+
+#: templates/browse/actions.inc:45
+msgid "C_lear Search"
+msgstr "_Rensa sökning"
+
+#: lib/Object/Group.php:57
+msgid "Can't add a group to itself."
+msgstr "Kan inte lägga till grupp till sig själv."
+
+#: templates/browse/column_headers.inc:6
+msgid "Check _All/None"
+msgstr "Markera _Alla/Ingen"
+
+#: add.php:51
+msgid "Choose an address book"
+msgstr "Välj en adressbok"
+
+#: templates/prefs/columnselect.inc:221
+msgid "Choose an address book:"
+msgstr "Välj en adressbok:"
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "Välj adressböcker som skall visas och i vilken ordning:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Välj adressböcker som skall användas."
+
+#: templates/prefs/columnselect.inc:228
+msgid "Choose which columns to display and in what order:"
+msgstr "Välj kolumner som visas och i vilken ordning:"
+
+#: templates/browse/actions.inc:45
+msgid "Clear Search"
+msgstr "Rensa sökning"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Kolumn inställningar"
+
+#: templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Kolumner som inte visas:"
+
+#: templates/data/export.inc:12 templates/data/import.inc:13
+msgid "Comma separated values"
+msgstr "Kommaseparerade värden"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Kommaseparerade värden (Microsoft Outlook)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "Företag"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "Adress, företag"
+
+#: lib/api.php:299 lib/api.php:348 lib/api.php:481 lib/api.php:547
+#: lib/api.php:633 lib/api.php:679 lib/api.php:757 lib/api.php:944
+#: lib/api.php:1036
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Förbindelse till server misslyckades: %s"
+
+#: lib/Driver/ldap.php:58
+msgid "Connection failure"
+msgstr "Förbindelse till server misslyckades"
+
+#: browse.php:215 browse.php:249
+msgid "Contact added to list."
+msgstr "Kontakt lades till i listan."
+
+#: browse.php:89
+msgid "Contact removed from list."
+msgstr "Kontakt raderas från listan."
+
+#: browse.php:344
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Kontakter i listan: %s"
+
+#: templates/browse/actions.inc:12
+msgid "Copy"
+msgstr "Kopiera"
+
+#: browse.php:309
+msgid "Create a new Contact List in:"
+msgstr "Skapa ny kontaktlista i:"
+
+#: lib/ObjectView.php:133
+msgid "Created"
+msgstr "Skapad"
+
+#: config/prefs.php.dist:96
+msgid "Default sorting direction:"
+msgstr "Förvald sorteringsriktning:"
+
+#: lib/Object.php:302 lib/Renderer.php:47 lib/Renderer.php:50
+#: templates/browse/actions.inc:2
+msgid "Delete"
+msgstr "Radera"
+
+#: config/prefs.php.dist:38
+msgid "Delete Confirmation"
+msgstr "Radera bekräftelse"
+
+#: config/prefs.php.dist:39
+msgid "Delete button behaviour"
+msgstr "Funktion för knappen Radera"
+
+#: lib/Driver/ldap.php:270
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Radering misslyckades: (%s) %s"
+
+#: delete.php:46
+msgid "Deletion failed"
+msgstr "Radering misslyckades"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "Avdelning"
+
+#: config/prefs.php.dist:95
+msgid "Descending"
+msgstr "Fallande"
+
+#: templates/browse/search.inc:117
+msgid "Directory"
+msgstr "Katalog"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Visa"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Visningsinställningar"
+
+#: config/prefs.php.dist:173
+msgid "Do you want to confirm deleting entries?"
+msgstr "Vill du bekräfta radering av poster?"
+
+#: lib/Object.php:271
+msgid "Download"
+msgstr "Hämta"
+
+#: templates/browse/row.inc:17
+msgid "Download vCard"
+msgstr "Ladda ner vCard"
+
+#: lib/Renderer.php:42 templates/browse/actions.inc:3
+#: templates/browse/column_headers.inc:9 templates/browse/row.inc:25
+msgid "Edit"
+msgstr "Ändra"
+
+#: templates/browse/row.inc:25
+#, php-format
+msgid "Edit '%s'"
+msgstr "Ändra '%s'"
+
+#: edit.php:75 edit.php:151
+#, php-format
+msgid "Edit entry for %s"
+msgstr "Ändra post för %s"
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "E-post"
+
+#: edit.php:144
+#, php-format
+msgid "Entry for %s updated, but saving the uploaded file failed: %s"
+msgstr ""
+"Posten för '%s' uppdaterades, men den uppladdade filen kunde inte sparas: %s"
+
+#: edit.php:146 edit.php:149
+#, php-format
+msgid "Entry for %s updated."
+msgstr "Posten för %s uppdaterad."
+
+#: browse.php:100
+msgid "Entry successfully deleted."
+msgstr "Posten raderades."
+
+#: templates/browse/actions.inc:6 templates/data/export.inc:41
+msgid "Export"
+msgstr "Exportera"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Exportera adressbok"
+
+#: templates/data/export.inc:21
+msgid "Export only the selected contacts."
+msgstr "Exportera enbart markerade kontakteri."
+
+#: templates/data/export.inc:27
+msgid "Export the following address book completely."
+msgstr "Exportera alla kontakter i adressboken."
+
+#: search.php:48 add.php:70 data.php:110 data.php:204 data.php:273
+#: browse.php:67 browse.php:126 browse.php:148
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Fel vid åtkomst av adressboken: %s"
+
+#: browse.php:167
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Misslyckades att lägga till %s till %s: %s"
+
+#: browse.php:350
+msgid "Failed to browse list"
+msgstr "Misslyckades att visa listan"
+
+#: browse.php:389
+msgid "Failed to browse the directory"
+msgstr "Misslyckades att visa katalogen"
+
+#: lib/Driver/ldap.php:308
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Misslyckades att ändra namn: (%s) %s; Gammalt DN = %s, Nytt DN = %s, Root = %"
+"s"
+
+#: browse.php:153
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Hittade inte objekt som skulle läggas till: %s"
+
+#: search.php:85 data.php:125
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Misslyckades att söka i katalogen: %s"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "Fax"
+
+#: display.php:100 edit.php:121
+msgid "Files"
+msgstr "Filer"
+
+#: templates/browse/search.inc:69
+msgid "Find"
+msgstr "Sök"
+
+#: edit.php:94 edit.php:184
+msgid "Finish"
+msgstr "Slutför"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "Förnamn"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr "Freebusy URL"
+
+#: templates/browse/search.inc:82
+msgid "From"
+msgstr "Från"
+
+#: config/sources.php.dist:666
+msgid "Global Address Book"
+msgstr "Global adressbok"
+
+#: templates/browse/row.inc:43
+msgid "Group"
+msgstr "Grupp"
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "Adress, hem"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "Ort, hem"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "Land, hem"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "Telefon, hem"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "Postnr, hem"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "Region, hem"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "Gatuadress, hem"
+
+#: config/prefs.php.dist:45
+msgid "IMSP Addressbook Administration"
+msgstr "Administration av IMSP-adressbok"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Import adressbok, steg %d"
+
+#: data.php:330
+msgid "Import/Export Address Books"
+msgstr "Importera/Exportera adressböcker"
+
+#: lib/api.php:536 lib/api.php:622
+msgid "Invalid ID"
+msgstr "Felaktigt ID"
+
+#: lib/api.php:220 lib/api.php:435 lib/api.php:532 lib/api.php:618
+#: lib/api.php:669 lib/api.php:1015
+msgid "Invalid address book"
+msgstr "Felaktig adressbok"
+
+#: lib/api.php:1019 lib/api.php:1091 lib/api.php:1144
+msgid "Invalid email"
+msgstr "Felaktig e-post"
+
+#: lib/api.php:1027
+msgid "Invalid entry"
+msgstr "Felaktigt värde"
+
+#: lib/Driver/ldap.php:266
+msgid "Invalid key specified."
+msgstr "Felaktig nyckel angiven."
+
+#: lib/api.php:1023
+msgid "Invalid name"
+msgstr "Felaktigt namn"
+
+#: lib/api.php:673
+msgid "Invalid objectId"
+msgstr "Felaktigt objektId"
+
+#: lib/Driver/ldap.php:30
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr "LDAP-stöd krävs, men LDAP-modulen är inte tillgänglig eller laddad."
+
+#: lib/ObjectView.php:138
+msgid "Last Modified"
+msgstr "Senast ändrad"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "Efternamn"
+
+#: templates/browse/column_headers.inc:15
+msgid "List"
+msgstr "Lista"
+
+#: templates/browse/search.inc:76
+msgid "Matching"
+msgstr "Matchar"
+
+#: lib/api.php:195
+msgid "Maximum Number of Contacts"
+msgstr "Maximalt antal kontakter"
+
+#: config/prefs.php.dist:105
+msgid "Maximum number of pages"
+msgstr "Maximalt antal sidor"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menylista"
+
+#: lib/Block/minisearch.php:3
+msgid "Mini Search"
+msgstr "Mini sök"
+
+#: lib/Driver/ldap.php:302
+msgid "Missing DN in LDAP source configuration."
+msgstr "Saknar DN i LDAP-konfigurationen."
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "Mobiltelefon"
+
+#: lib/Driver/ldap.php:331 lib/Driver/ldap.php:343
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Ändring misslyckades: (%s) %s"
+
+#: lib/api.php:1130
+msgid "More than 1 entry found"
+msgstr "Mer än 1 värde returnerades"
+
+#: templates/browse/actions.inc:11
+msgid "Move"
+msgstr "Flytta"
+
+#: templates/prefs/columnselect.inc:247
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Flytta vänster"
+
+#: templates/prefs/columnselect.inc:249
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Flytta höger"
+
+#: data.php:31 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry"
+
+#: lib/api.php:1050
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "Flera personer med adressen [%s], men ingen med namnet [%s] existerar"
+
+#: config/sources.php.dist:185
+msgid "My Addressbook"
+msgstr "Min adressbok"
+
+#: config/attributes.php.dist:42
+msgid "Name"
+msgstr "Namn"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Namnformatering"
+
+#: config/sources.php.dist:392
+msgid "Netcenter Member Directory"
+msgstr "Netcenter medlemskatalog"
+
+#: add.php:39 add.php:124 lib/Block/minisearch.php:27
+#: lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Ny kontakt"
+
+#: edit.php:85 edit.php:92 edit.php:199 templates/data/import.inc:45
+msgid "Next"
+msgstr "Nästa"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "Smeknamn"
+
+#: lib/api.php:1132 lib/api.php:1181
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Post %s saknas för %s"
+
+#: lib/api.php:1100
+msgid "No address books found."
+msgstr "Ingen dressbok hittades."
+
+#: minisearch.php:83
+msgid "No contacts found"
+msgstr "Inga kontakter hittades."
+
+#: lib/api.php:455 lib/api.php:704
+msgid "No vCard data was found."
+msgstr "Ingen information om vCard hittades."
+
+#: templates/browse/footer.inc:7
+msgid "None"
+msgstr "Ingen"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "Anteckningar"
+
+#: config/prefs.php.dist:113
+msgid "Number of items per page"
+msgstr "Antal poster per sida"
+
+#: lib/api.php:553 lib/api.php:685
+msgid "Object not found"
+msgstr "Objektet hittades inte"
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr "Kontor"
+
+#: lib/api.php:712
+msgid "Only one vcard supported."
+msgstr "Endast ett vCard stöds."
+
+#: config/prefs.php.dist:37 config/prefs.php.dist:44
+msgid "Other Options"
+msgstr "Andra inställningar"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr "Publik PGP-nyckel"
+
+#: lib/api.php:439 lib/api.php:540 lib/api.php:626 lib/api.php:872
+#: lib/api.php:1031
+msgid "Permission Denied"
+msgstr "Behörighet nekades"
+
+#: lib/Driver.php:512
+msgid "Permission denied"
+msgstr "Behörighet nekades"
+
+#: data.php:32 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine"
+
+#: templates/browse/javascript.inc:28
+msgid "Please name the new contact list:"
+msgstr "Skriv in ett namn på den nya kontaktlistan:"
+
+#: edit.php:88 edit.php:91 edit.php:191
+msgid "Previous"
+msgstr "Föregående"
+
+#: lib/Driver/ldap.php:147
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Sökning misslyckades: (%s) %s"
+
+#: templates/block/minisearch.inc:18
+msgid "Quick Search"
+msgstr "Snabbsök"
+
+#: lib/Driver/ldap.php:191 lib/Driver/ldap.php:199 lib/Driver/ldap.php:424
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Läsning misslyckades: (%s) %s"
+
+#: lib/Renderer.php:49
+msgid "Really delete this contact?"
+msgstr "Radera kontakten permanent?"
+
+#: templates/browse/footer.inc:2
+msgid "Records displayed:"
+msgstr "Poster visade:"
+
+#: templates/prefs/addressbookselect.inc:176
+msgid "Remove address book"
+msgstr "Radera adressbok"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Ta bort kolumn"
+
+#: templates/browse/actions.inc:2
+msgid "Remove from this list"
+msgstr "Ta bort från aktuell lista"
+
+#: templates/data/import.inc:21
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Ersätt befintlig adressbok med den importerade? <strong>Varning: Alla poster "
+"i aktuell adressbok kommer att raderas.</strong>"
+
+#: lib/Driver.php:414
+msgid "Requested object not found."
+msgstr "Efterfrågat objekt saknas."
+
+#: add.php:40 templates/browse/search.inc:112
+msgid "Reset to Defaults"
+msgstr "Återställ till grundinställningar"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr "Publikt S/MIME-certifikat"
+
+#: lib/Driver/ldap.php:69
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS misslyckades: (%s) %s"
+
+#: edit.php:96 add.php:40
+msgid "Save"
+msgstr "Spara"
+
+#: lib/Block/tree_menu.php:49 templates/block/minisearch.inc:23
+#: templates/browse/search.inc:95 templates/browse/search.inc:111
+#: config/prefs.php.dist:124
+msgid "Search"
+msgstr "Sök"
+
+#: browse.php:329
+msgid "Search Results"
+msgstr "Sökresultat"
+
+#: minisearch.php:63
+msgid "Search Results:"
+msgstr "Sökresultat:"
+
+#: lib/api.php:949
+msgid "Search failed"
+msgstr "Sökning misslyckades"
+
+#: lib/api.php:1040 lib/api.php:1046 lib/api.php:1055 lib/api.php:1068
+#, php-format
+msgid "Search failed: %s"
+msgstr "Sökning misslyckades: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Searching..."
+msgstr "Söker..."
+
+#: templates/data/export.inc:32
+msgid "Select the address book to export from:"
+msgstr "Välj adressbok att exportera från:"
+
+#: templates/data/import.inc:26
+msgid "Select the address book to import to:"
+msgstr "Välj adressbok att importera till:"
+
+#: templates/data/import.inc:35
+msgid "Select the charset of the source file:"
+msgstr "Välj teckensnitt på importfilen:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Välj exportformat:"
+
+#: templates/data/import.inc:43
+msgid "Select the file to import:"
+msgstr "Välj fil som skall importeras:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Välj format på importfilen:"
+
+#: config/prefs.php.dist:133
+msgid "Select the format used to display names:"
+msgstr "Välj format för visning av namn:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr ""
+"Välj vy som skall visas som default, sorterings- och sid inställningar."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Välj vilka fält som visas i adresslistan."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Välj hur namn visas."
+
+#: add.php:57
+#, php-format
+msgid "Selected address book '%s'."
+msgstr "Vald adressbok '%s'."
+
+#: templates/browse/actions.inc:39
+#, php-format
+msgid "Show %s"
+msgstr "Visa %s"
+
+#: templates/browse/actions.inc:41
+msgid "Show All"
+msgstr "Visa alla"
+
+#: templates/browse/actions.inc:40
+msgid "Show Contacts"
+msgstr "Visa kontakter"
+
+#: templates/browse/actions.inc:39
+msgid "Show Lists"
+msgstr "Visa listor"
+
+#: templates/browse/column_headers.inc:19
+#: templates/browse/column_headers.inc:30
+msgid "Sort Direction"
+msgstr "Sorteringsriktning"
+
+#: lib/api.php:188
+msgid "Sources"
+msgstr "Källor"
+
+#: config/prefs.php.dist:154
+msgid "Specify where you want advanced search results to appear."
+msgstr "Ange var resultat från avancerad sökning skall visas."
+
+#: browse.php:169
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s lades till i %s"
+
+#: browse.php:242
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Skapade kontaktlistan '%s'."
+
+#: data.php:29
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/export.inc:14 templates/data/import.inc:14
+msgid "Tab separated values"
+msgstr "Tabseparerade värden"
+
+#: view.php:15
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"VFS-backend behöver konfigureras för att aktivera uppladdning av bilagor."
+
+#: lib/Driver.php:984
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Adressbok '%s' finns inte."
+
+#: data.php:279
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Adressboken kunde inte tömmas: %s"
+
+#: display.php:23 edit.php:47 vcard.php:22 view.php:26
+msgid "The contact you requested does not exist."
+msgstr "Kontakten du söker existerar inte."
+
+#: edit.php:113
+#, php-format
+msgid "The file \"%s\" has successfully been deleted."
+msgstr "Filen '%s' raderades."
+
+#: data.php:260
+msgid "The import can be finished despite the warnings."
+msgstr "Importen kan avslutas trots varningar."
+
+#: browse.php:63
+msgid "There are no browseable address books."
+msgstr "Det finns inga adressböcker att visa."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Ingen av de tillgängliga adressböckerna är konfigurerade så att du får lägga "
+"till kontakter i dem, Om du tror att det är ett fel, kontakta din system "
+"administratör."
+
+#: add.php:120
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Det uppstod problem  när kontakten skulle läggas till. Kontakta din "
+"systemadministratör för ytterligare hjälp."
+
+#: browse.php:213 browse.php:247
+msgid "There was an error adding this object."
+msgstr "Det uppstod fel vid skapande av objektet."
+
+#: browse.php:255
+msgid "There was an error creating a new list."
+msgstr "Det uppstod fel vid skapande av ny lista."
+
+#: browse.php:175
+#, php-format
+msgid "There was an error deleting %s from the source address book."
+msgstr "Det uppstod fel vid radering av %s från adressboken."
+
+#: delete.php:45
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Det uppstod fel vid radering av kontakten: %s"
+
+#: browse.php:98
+msgid "There was an error deleting this object."
+msgstr "Det uppstod fel vid radering av objektet."
+
+#: browse.php:357
+msgid "There was an error displaying the list"
+msgstr "Det uppstod fel vid visning av listan"
+
+#: data.php:304
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Det uppstod fel vid import av data: %s."
+
+#: lib/api.php:451 lib/api.php:699
+msgid "There was an error importing the iCalendar data."
+msgstr "Fel vid import av iCalendar data."
+
+#: browse.php:87
+msgid "There was an error removing a contact from the list."
+msgstr "Det uppstod fel när kontakter skulle raderas från listan."
+
+#: edit.php:155
+#, php-format
+msgid "There was an error updating this entry: %s"
+msgstr "Det uppstod fel vid uppdatering av posten: %s."
+
+#: data.php:155
+msgid "There were no addresses to export."
+msgstr "Inga adresser att exportera."
+
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Adressböckerna visas i den här ordningen:"
+
+#: templates/prefs/columnselect.inc:243
+msgid "These columns will display in this order:"
+msgstr "Kolumnerna visas i den här ordningen:"
+
+#: data.php:245
+msgid "This file format is not supported."
+msgstr "Filformatet stöds inte."
+
+#: lib/api.php:1059 lib/api.php:1072
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Personen har redan ett värde för %s i adressboken"
+
+#: config/prefs.php.dist:145
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Förvald adressbok för nya och importerade kontakter."
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "Titel"
+
+#: lib/Driver.php:926
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Kan inte ladda definitionen av %s."
+
+#: edit.php:85 edit.php:88 edit.php:91 edit.php:96 edit.php:193
+msgid "Undo Changes"
+msgstr "Ångra ändringar"
+
+#: lib/api.php:475 lib/api.php:582 lib/api.php:717
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Content-Type stöds inte: %s"
+
+#: config/sources.php.dist:453
+msgid "Verisign Directory"
+msgstr "Verisign katalog"
+
+#: templates/browse/row.inc:19
+#, php-format
+msgid "View '%s'"
+msgstr "Visa '%s'"
+
+#: minisearch.php:78
+msgid "View Contact"
+msgstr "Visa kontakt"
+
+#: config/prefs.php.dist:122
+msgid "View to display by default:"
+msgstr "Vy som skall visas som default:"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr "Websideadress"
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "Adress, arbete"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "Stad, arbete"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "Land, arbete"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "Telefon, arbete"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "Postnr, arbete"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "Region, arbete"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "Gatuadress, arbete"
+
+#: add.php:76 data.php:213 browse.php:129 browse.php:225
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Du har inte behörighet skapa mer än %d kontakter i '%s'."
+
+#: display.php:58 edit.php:66 view.php:36
+msgid "You do not have permission to view this contact."
+msgstr "Du har inte behörig att visa aktuell kontakt."
+
+#: vcard.php:40
+msgid "You do not have permission to view this object."
+msgstr "Du har inte behörighet att visa objektet."
+
+#: templates/browse/javascript.inc:52
+msgid "You must select a target address book."
+msgstr "Du måste välja en adressbok."
+
+#: templates/browse/javascript.inc:23
+msgid "You must select a target list."
+msgstr "Du måste välja en lista."
+
+#: edit.php:32
+msgid "You must select at least one contact first."
+msgstr "Välj minst en kontakt först."
+
+#: templates/browse/javascript.inc:17 templates/browse/javascript.inc:46
+#: templates/browse/javascript.inc:69
+msgid "You must select at least one entry first."
+msgstr "Välj minst en post först."
+
+#: edit.php:70
+msgid "You only have permission to view this contact."
+msgstr "Du har enbart behörighet att visa aktuell kontakt."
+
+#: browse.php:387
+msgid "Your default addressbook is not browseable."
+msgstr "Din förvalda adressbok är inte läsbar."
+
+#: templates/browse/row.inc:6
+msgid "[no value]"
+msgstr "[Inget värde]"
+
+#: lib/Turba.php:352
+msgid "_Browse"
+msgstr "_Lista"
+
+#: templates/browse/actions.inc:40
+msgid "_Contacts"
+msgstr "_Kontakter"
+
+#: templates/browse/actions.inc:2
+msgid "_Delete"
+msgstr "_Radera"
+
+#: lib/Turba.php:358
+msgid "_Import/Export"
+msgstr "_Importera/Exportera"
+
+#: templates/browse/actions.inc:39
+msgid "_Lists"
+msgstr "_Listor"
+
+#: lib/Turba.php:353
+msgid "_New Contact"
+msgstr "_Ny kontakt"
+
+#: templates/browse/actions.inc:2
+msgid "_Remove from this list"
+msgstr "_Radera från listan."
+
+#: lib/Turba.php:354
+msgid "_Search"
+msgstr "_Sök"
+
+#: vcard.php:46
+msgid "contact.vcf"
+msgstr "kontakt.vcf"
+
+#: data.php:175 data.php:180 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "kontakter.csv"
+
+#: data.php:185
+msgid "contacts.tsv"
+msgstr "kontakter.tsv"
+
+#: data.php:195
+msgid "contacts.vcf"
+msgstr "kontakter.vcf"
+
+#: templates/browse/actions.inc:24
+msgid "to a Contact List"
+msgstr "till kontaktlista"
+
+#: templates/browse/actions.inc:14
+msgid "to a different Address Book"
+msgstr "till annan adressbok"
+
+#: data.php:30 templates/browse/column_headers.inc:12
+#: templates/data/export.inc:15 templates/data/import.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/tr_TR.po b/turba/po/tr_TR.po
new file mode 100644 (file)
index 0000000..a251385
--- /dev/null
@@ -0,0 +1,1630 @@
+# Turkish translations for Turba package
+# Adres Defteri paketi için Türkçe çeviriler.
+# Copyright 2008-2009 The Horde Project
+# This file is distributed under the same license as the Turba package.
+# horde-tr at metu.edu.tr, 2005-2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba H3 (2.2-RC2)\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-04-15 12:57+0300\n"
+"PO-Revision-Date: 2008-10-23 10:23+0200\n"
+"Last-Translator: Altay Þeref Özaygen\n"
+"Language-Team: i18n@lists.horde.org\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-9\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "IMSP Adres Defteri ekle"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "IMSP Adres Defterini sil"
+
+#: data.php:351
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" zaten var. Ýçeri taþýnmadý."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" güncellendi. Fakat yüklenen dosya saklanamadý: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "%s kaydý güncellendi."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" liste olmasýndan dolayý kopyalanamadý."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" liste olmasýndan dolayý taþýnamadý."
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Ad Soyad\" (Ör. Ali Yýlmaz)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Soyad, Ad\" (Ör. Yýlmaz, Ali)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s eklendi"
+
+#: data.php:370
+#, php-format
+msgid "%s file successfully imported."
+msgstr "%s dosyasý baþarýyla (içeri) aktarýldý"
+
+#: lib/Driver.php:529
+#, php-format
+msgid "%s of %s"
+msgstr "%s toplam %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s / %s, toplam %s"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s Adres Defteri"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "iFrames destekleyen bir tarayýcý gerekmektedir"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "%s için eriþim engellendi"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Ekle"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Yeni Kiþi ekle"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Adres defteri ekle"
+
+#: templates/prefs/columnselect.inc:237
+msgid "Add column"
+msgstr "Kolon ekle"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Dosya ekle"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Ekle"
+
+#: lib/Driver.php:1561 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Kiþi ekleme kullanýlabilir deðil."
+
+#: templates/addressbook_list.php:15
+msgid "Address Book"
+msgstr "Adres Defteri"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Adres Defteri Listesi"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "Adres Defteri Listeleme"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Adres Defterleri"
+
+#: data.php:331
+msgid "Address book successfully purged."
+msgstr "Adres defteri baþarýyla boþaltýldý."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Gösterilemeyen Adres defteri %s"
+
+#: search.php:160 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Geliþmiþ Arama"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Öteki Ad"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Tümü"
+
+#: lib/api.php:729
+msgid "Already Exists"
+msgstr "Zaten Var"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Yýl dönümleri"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "Yýl dönümü"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "%s silmek istediðinizden emin misiniz?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Seçilen kiþileri silmek istediðinizden emin misiniz?"
+
+#: config/attributes.php.dist:377
+msgid "Assistant"
+msgstr "Yardýmcý"
+
+#: search.php:157 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Basit Arama"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "Baðlantý kurulamadý (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Doðum günü"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Doðum günü"
+
+#: contact.php:103 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Boþ isim"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Her Ýkisi"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "Gözat"
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr "Ýþ Sýnýfý"
+
+#: data.php:60
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Bir grup kendisine eklenemez."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "Ýptal"
+
+#: lib/Driver/kolab.php:620
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "%s için tüm adres defteri kayýtlarý silinedi"
+
+#: config/attributes.php.dist:349
+msgid "Category"
+msgstr "Sýnýf"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "%s sýralamasýný %s olarak deðiþtir"
+
+#: addressbooks/index.php:40 templates/addressbook_list.php:31
+msgid "Change Permissions"
+msgstr "Ýzinleri Deðiþtir"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Tümünü/Hiçbirini Seç"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "_Tümünü/Hiçbirini Seç"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "Alt birim"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Bir adres defteri seçin"
+
+#: templates/prefs/columnselect.inc:218 templates/prefs/columnselect.inc:220
+msgid "Choose an address book:"
+msgstr "Bir adres defteri seçin"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Hangi adres defterinin görüntüleneceðini ve sýralamasýný seçin:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Kullanmak için bir adres defteri seçin"
+
+#: templates/prefs/columnselect.inc:227
+msgid "Choose which columns to display and in what order:"
+msgstr "Adres listesinde görüntelenecek kolonlarýn sýrasýný seçin."
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Kapat"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Aramayý Kapat"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Kolon Seçenekleri"
+
+#: templates/prefs/columnselect.inc:231 templates/prefs/columnselect.inc:233
+msgid "Columns that will not be displayed:"
+msgstr "Görüntülenmeyecek kolonlar:"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Virgül ile ayrýlmýþ deðerler"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Virgül ile ayrýlmýþ deðerler (Microsoft Outlook)"
+
+#: config/sources.php.dist:229 config/sources.php.dist:905
+msgid "Communications"
+msgstr "Ýletiþim bilgileri"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "Firma"
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr "Firma Adresi"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:398 lib/api.php:443
+#: lib/api.php:494 lib/api.php:529 lib/api.php:578 lib/api.php:624
+#: lib/api.php:665 lib/api.php:782 lib/api.php:869 lib/api.php:928
+#: lib/api.php:1020 lib/api.php:1229 lib/api.php:1301 lib/api.php:1386
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Baðlantý baþarýsýz: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Baðlantý baþarýsýz"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Kiþi Arama"
+
+#: config/sources.php.dist:837
+msgid "Contacts"
+msgstr "Kiþiler"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Görüntülenen kiþiler:"
+
+#: lib/Views/Browse.php:338
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Listedeki kiþiler: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Kopyala"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Yarat"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Adres Defteri oluþtur"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Adres Defteri oluþtur"
+
+#: lib/ListView.php:443
+msgid "Create a new Contact List in:"
+msgstr "Yeni bir adres defteri oluþtur"
+
+#: lib/Views/Contact.php:74
+msgid "Created"
+msgstr "Yaratýldý"
+
+#: contact.php:86
+msgid "De_lete"
+msgstr "Si_l"
+
+#: addressbooks/index.php:41 templates/addressbook_list.php:33
+#: templates/browse/actions.inc:3 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
+msgid "Delete"
+msgstr "Sil"
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "%s Sil"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Silme baþarýsýz: (%s) %s"
+
+#: lib/Driver.php:1569 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Kiþi silmek þu anda mümkün deðil."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Silme baþarýsýz"
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr "Bölüm"
+
+#: lib/Forms/CreateAddressBook.php:37 lib/Forms/EditAddressBook.php:44
+msgid "Description"
+msgstr "Taným"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Dizin"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Göster"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Görüntüleme Seçenekleri"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "Ýndir"
+
+#: templates/browse/contactrow.inc:25 templates/browse/row.inc:13
+msgid "Download vCard"
+msgstr "vCard indir"
+
+#: addressbooks/index.php:39 templates/addressbook_list.php:29
+#: templates/browse/contactrow.inc:33 templates/browse/column_headers.inc:10
+#: templates/browse/row.inc:21 templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "Düzenle"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Düzenle \"%s\""
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "%s Düzenle"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "Eposta"
+
+#: config/attributes.php.dist:243
+msgid "Emails"
+msgstr "E-posta"
+
+#: lib/Views/Browse.php:262 lib/Views/Browse.php:302
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Listeye %d kiþi eklerken hata oluþtu."
+
+#: lib/Views/Browse.php:264 lib/Views/Browse.php:304
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Talep edilen kiþiler listeye ekleniyor (%d / %d)."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "%d kiþisi silerken hata oluþtu."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Talep edilen kiþiler silinirken hata oluþtu (%d / %d)."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Listeden %d kiþi silerken hata oluþtu."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Talep edilen kiþiler silinirken hata oluþtu (%d / %d)."
+
+#: lib/api.php:535
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Adres defterinde arama baþarýsýz: %s"
+
+#: templates/data/export.inc:42 templates/browse/actions.inc:10
+msgid "Export"
+msgstr "Dýþarý Aktar"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Adres Defterini Dýþarý Aktar"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Sadece seçilen kiþileri dýþarý aktar."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Bu adres defterini tümüyle dýþarý aktar."
+
+#: data.php:143 data.php:242 data.php:320 search.php:85 add.php:42
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Adres defterine eriþim baþarýsýz: %s"
+
+#: lib/Views/Browse.php:210
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "%s i %s e ekleme baþarýsýz: %s"
+
+#: lib/Views/Browse.php:344
+msgid "Failed to browse list"
+msgstr "Liste görüntüleme baþarýsýz"
+
+#: lib/Views/Browse.php:371
+msgid "Failed to browse the directory"
+msgstr "Dizin görüntüleme baþarýsýz"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Ýsim deðiþtirme baþarýsýz: (%s) %s; Eski DN = %s, Yeni DN = %s, Kök = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Eklenecek nesne bulunamadý: %s"
+
+#: search.php:151
+msgid "Failed to search the address book"
+msgstr "Adres defterinde arama baþarýsýz: %s"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Dizin arama baþarýsýz: %s"
+
+#: config/sources.php.dist:536
+msgid "Favourite Recipients"
+msgstr "Sýkça Kullanýlan Alýcýlar"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "Faks"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Dosyalar"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Bul"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:159
+msgid "Finish"
+msgstr "Bitir"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "Ad"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "Freebusy Adresi"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "Kimden"
+
+#: config/attributes.php.dist:383
+msgid "Gender"
+msgstr "Cinsiyet"
+
+#: config/sources.php.dist:762
+msgid "Global Address Book"
+msgstr "Genel Adres Defteri"
+
+#: templates/browse/contactrow.inc:44 templates/browse/row.inc:39
+msgid "Group"
+msgstr "Grup"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "Ev Adresi"
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr "Þehir"
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr "Ülke"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "Ev Telefonu"
+
+#: config/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr "Postahane Kutusu"
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "Posta Kodu"
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "Bölge"
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "Ev Adresi"
+
+#: config/sources.php.dist:653
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "Adres Defteri Ýçeri Aktarma, Adým %d"
+
+#: data.php:388
+msgid "Import/Export Address Books"
+msgstr "Adres Defterlerini Ýçeri/Dýþarý Aktar"
+
+#: config/attributes.php.dist:359
+msgid "Initials"
+msgstr "Baþ harfler"
+
+#: config/attributes.php.dist:365
+msgid "Instant Messenger"
+msgstr "Anlýk Ýletiþim"
+
+#: lib/api.php:777 lib/api.php:864
+msgid "Invalid ID"
+msgstr "Geçersiz kimlik"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:310 lib/api.php:524
+#: lib/api.php:573 lib/api.php:619 lib/api.php:660 lib/api.php:773
+#: lib/api.php:860 lib/api.php:918 lib/api.php:1369
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Geçersiz adres defteri: %s"
+
+#: lib/api.php:1373 lib/api.php:1447 lib/api.php:1503
+msgid "Invalid email"
+msgstr "Geçersiz e-posta"
+
+#: lib/api.php:1381
+msgid "Invalid entry"
+msgstr "Geçersiz kayýt"
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "Geçersiz anahtar belirtildi."
+
+#: lib/api.php:1377
+msgid "Invalid name"
+msgstr "Geçersiz ad"
+
+#: lib/api.php:922
+msgid "Invalid objectId"
+msgstr "Geçersiz nesne kimliði"
+
+#: config/attributes.php.dist:276
+msgid "Job Title"
+msgstr "Ünvan"
+
+#: lib/Driver/kolab.php:855 lib/Driver/kolab.php:877
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Saklama için anahtar %s yenine UID olmalý!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"LDAP desteði gerekiyor ancak LDAP modülü kullanýlabilir deðil ya da "
+"yüklenmedi."
+
+#: data.php:65 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr "LDIF Adres Defteri"
+
+#: config/attributes.php.dist:389
+msgid "Language"
+msgstr "Dil"
+
+#: lib/Views/Contact.php:80
+msgid "Last Modified"
+msgstr "Son Deðiþim"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Soyad"
+
+#: config/attributes.php.dist:395
+msgid "Latitude"
+msgstr "Boylam"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Liste"
+
+#: config/sources.php.dist:224 config/sources.php.dist:901
+msgid "Location"
+msgstr "Yer"
+
+#: config/attributes.php.dist:400
+msgid "Longitude"
+msgstr "Enlem"
+
+#: addressbooks/index.php:45 templates/addressbook_list.php:2
+msgid "Manage Address Books"
+msgstr "Adres Defterlerini yönet"
+
+#: config/attributes.php.dist:371
+msgid "Manager"
+msgstr "Yönetici"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "Eþleþen"
+
+#: lib/api.php:285
+msgid "Maximum Number of Contacts"
+msgstr "En Fazla kiþi Sayýsý"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Azami sayfa sayýsý"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Menü Listesi"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Orta Ýsim"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "LDAP kaynak yapýlandýrmasýnda eksik DN."
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "Mobil Telefon"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Deðiþiklik baþarýsýz: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Daha Fazla Seçenek..."
+
+#: lib/api.php:1489
+msgid "More than 1 entry found"
+msgstr "Birden fazla kayýt bulundu"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Taþý"
+
+#: templates/prefs/addressbookselect.inc:184
+#: templates/prefs/columnselect.inc:248
+msgid "Move left"
+msgstr "Sola taþý"
+
+#: templates/prefs/addressbookselect.inc:186
+#: templates/prefs/columnselect.inc:250
+msgid "Move right"
+msgstr "Saða taþý"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry Adres Defteri"
+
+#: lib/api.php:1405
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "[%s] adresi ile birden fazla kiþi bulundu ancak [%s] isminde biri yok"
+
+#: config/sources.php.dist:161
+msgid "My Address Book"
+msgstr "Adres Defterim"
+
+#: lib/Forms/CreateAddressBook.php:36 lib/Forms/EditAddressBook.php:43
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "Ad"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Ad Biçimi"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Ýsim Ön Ekleri"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr "Ýsim Son Ekleri"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "Ýsim:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "Yeni Kiþi"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "Sonraki"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "Takma Ad"
+
+#: lib/api.php:1492 lib/api.php:1543
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "%s giriþi bulunamadý: %s"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+"Þu anda kullanýlabilir adres defteri yok. Ýçeri/Dýþarý taþýma etkin deðil."
+
+#: search.php:71
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr ""
+"Þu anda kullanýlabilir adres defteri yok. Ýçeri/Dýþarý taþýma etkin deðil."
+
+#: lib/api.php:1456
+msgid "No address books found."
+msgstr "Hiç adres defteri bulunamadý."
+
+#: minisearch.php:81
+msgid "No contacts found"
+msgstr "Hiç Kiþi kaydý bulunamadý"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "Geçerli ölçüte uyan Kiþi kaydý yok."
+
+#: lib/ListView.php:251
+msgid "No matching contacts"
+msgstr "Eþleþen kiþi yok"
+
+#: lib/Driver/favourites.php:120
+msgid "No source for favourite recipients exists."
+msgstr "Sýk kullanýlan alýcý kaynaðý yok."
+
+#: lib/api.php:686 lib/api.php:957
+msgid "No vCard data was found."
+msgstr "Hiç vCard verisi bulunamadý."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Hiçbiri"
+
+#: lib/Views/Contact.php:49 lib/Views/DeleteContact.php:26
+#: lib/Views/EditContact.php:33
+msgid "Not Found"
+msgstr "Bulunamadý"
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr "Bulunamadý"
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "Notlar"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "Sayfa baþýna öðe sayýsý"
+
+#: lib/api.php:793 lib/api.php:937
+msgid "Object not found"
+msgstr "Nesne bulunamadý"
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr "Ýþ"
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr "Ofis"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Bu seçenekler sayfasýný sakladýðýnýzda, adref defteri kalýcý olarak "
+"silinecek Eðer isteðiniz bu deðilse, seçiminizi \"Hiçbiri\" olarak "
+"deðiþtirin."
+
+#: lib/api.php:965
+msgid "Only one vcard supported."
+msgstr "Sadece bir vcard destekleniyor."
+
+#: config/sources.php.dist:231 config/sources.php.dist:907
+msgid "Organization"
+msgstr "Kurum"
+
+#: config/sources.php.dist:232 config/sources.php.dist:909
+msgid "Other"
+msgstr "Diðer"
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "PGP Açýk Anahtarý"
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr "Çaðrý"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Bu Kiþi kaydý gerçekten silinsin mi?"
+
+#: deletefile.php:36 lib/api.php:669 lib/api.php:786 lib/api.php:873
+#: lib/api.php:931 lib/api.php:1390 lib/Driver.php:701 lib/Driver/sql.php:481
+msgid "Permission denied"
+msgstr "Ýzin yok"
+
+#: config/sources.php.dist:221 config/sources.php.dist:897
+msgid "Personal"
+msgstr "Kiþisel"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine Adres Defteri"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Lütfen yeni listenin adýný girin:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:166
+msgid "Previous"
+msgstr "Önceki"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Sorgu baþarýsýz: (%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Okuma baþarýsýz: (%s) %s"
+
+#: lib/Driver.php:1553 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "Kiþi kayýtlarý okunamýyor."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"\"%s\" adlý not defteri gerçekten silinsin mi? Bu geri çevrilemez. Bu not "
+"defterindeki veriler kalýcý olarak silinecek"
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Adres defterini sil"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Remove column"
+msgstr "Kolonu kaldýr"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Bu listeden sil"
+
+#: lib/Driver.php:1591
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Geçerli adres defteri  saklama sürücüsü, kullanýcý verisi silmeyi "
+"desteklemiyor."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Yüklenen adres defterini varolan ile deðiþtirmek istiyor musunuz? <b>Uyarý: "
+"Bu iþlem þu anki adres defterinizdeki tüm kayýtlarý siler.</b>"
+
+#: lib/Driver.php:595
+msgid "Requested object not found."
+msgstr "Belirtilen nesne bulunamadý."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Öntanýmlý deðerlere geri dön"
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME Açýk Sertifikasý"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS baþarýsýz: (%s) %s"
+
+#: lib/Forms/EditAddressBook.php:46 lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "Kaydet"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Arama sonucunu sanal adres defteri olarak kaydet?"
+
+#: lib/Driver.php:1579 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Kiþilerin saklanmasý kullanýlabilir deðil."
+
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:58 config/prefs.php.dist:107
+msgid "Search"
+msgstr "Arama"
+
+#: lib/api.php:1234
+msgid "Search failed"
+msgstr "Arama baþarýsýz"
+
+#: lib/api.php:1395 lib/api.php:1401 lib/api.php:1410 lib/api.php:1423
+#, php-format
+msgid "Search failed: %s"
+msgstr "Arama baþarýsýz: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "Aranacak kelime:"
+
+#: lib/Driver.php:1538 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Arama opsiyonu þu anda kullanýlabilir deðil."
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Kiþi seç"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Verilerin dýþarý aktarýlacaðý adres defterini seçin:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Verilerin içine aktarýlacaðý adres defterini seçin:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Kaynak dosyanýn karakter öbeðini seçin:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Dýþarý aktarma biçimini seçin:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Ýçeri aktarýlacak dosyayý seçin:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Kaynak dosyanýn biçimini seçin:"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Ýsimlerin görüntüleneceði biçimi seçin:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Öntanýmlý görünümü seçin, arama ve sayfalama seçenekleri."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Adres listelerinde hangi alanlarýn görüntüleneceðini seçin."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Ýsimlerin görüntüleneceði biçimi seçin."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Seçilmiþ adres defteri \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Göster %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Her ikisini de göster"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Kiþileri Göster"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Listeleri Göster"
+
+#: lib/ListView.php:319 lib/ListView.php:325
+msgid "Sort Direction"
+msgstr "Sýralama Yönü"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "%s 'e göre sýrala"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "Yalnýz %s'e göre sýrala"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Önce %s, sonra %s e göre sýrala"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Kaynaklar"
+
+#: lib/api.php:278
+msgid "Sources"
+msgstr "Kaynaklar"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "Eþ"
+
+#: lib/Views/Browse.php:260 lib/Views/Browse.php:300
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "%d baþarýyla adres defterinize eklendi eklendi"
+
+#: lib/Views/Browse.php:214
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s %s e baþarýyla eklendi"
+
+#: lib/Views/Browse.php:290
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "\"%s\" adres defteri baþarý ile oluþturuldu."
+
+#: search.php:126
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "\"%s\" sanal adres defteri baþarý ile oluþturuldu ."
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d kiþisi baþarý ile silindi."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "%d kiþisi baþarý ile silindi."
+
+#: data.php:61
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Sekme ile ayrýlmýþ deðerler"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Hedef adres defteri"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Hedef iletiþim listesi"
+
+#: data.php:322
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "%s dosyasý herhangi bir iletiþim bilgisi içermiyor."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"Ýliþik yüklenmesinin etkin olmasý için VFS arka aracý yapýlandýrýlmalý."
+
+#: lib/Driver.php:1509
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "\"%s\" adres defteri yok"
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "\"%s\" adres defteri oluþturuldu."
+
+#: data.php:329
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Adres defteri boþaltýlamadý: %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "\"%s\" adres defteri silindi."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "\"%s\" adres defteri, \"%s\" olarak yeniden adlandýrýldý."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Adres defteri \"%s\" sakladý."
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "Belirttiðiniz kiþi kaydý yok."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Adres defteri \"%s\" silindi."
+
+#: data.php:302
+msgid "The import can be finished despite the warnings."
+msgstr "Uyarýlara raðmen içeri taþýma tamamlanabilir."
+
+#: lib/Views/Contact.php:59 lib/Views/DeleteContact.php:36
+#: lib/Views/EditContact.php:43
+msgid "The requested contact was not found."
+msgstr "Belirtilen kiþi kaydý bulunamadý."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Gözatýlabilecek bir adres defteri yok"
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Yazýlabilir bir adres defteri yok. Varolan adres defterlerinin hiçbiri yeni "
+"giriþler ekleyebileceðiniz þekilde yapýlandýrýlmamýþ. Eðer bunun bir hata "
+"durumu olduðunu düþünüyorsanýz lüften sistem yöneticinize baþvurun."
+
+#: search.php:122
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "%s adres defteri oluþturulurken hata oluþtu."
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Yeni kiþi iletiþim bilgileri eklernirken hata oluþtu. Lüften sistem "
+"yöneticinize baþvurun."
+
+#: lib/Views/Browse.php:310
+msgid "There was an error creating a new list."
+msgstr "Yeni liste oluþturulurken hata oluþtu."
+
+#: lib/Views/Browse.php:220
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Kaynak adres defterinden %s'yi silerken hata oluþtu."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Bu kiþi kaydýný silerken hata oluþtu: %s"
+
+#: lib/Views/Browse.php:350
+msgid "There was an error displaying the list"
+msgstr "Seçilen listeyi görüntülerken hata oluþtu"
+
+#: data.php:356
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Veriyi içeri aktarýrken hata oluþtu: %s"
+
+#: lib/api.php:682 lib/api.php:952
+msgid "There was an error importing the iCalendar data."
+msgstr "iCalendar verisini içeri aktarýlýrken hata oluþtu."
+
+#: lib/api.php:231
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Adres defteri silinirken hata oluþtu: %s"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Yeni kiþi kaydý eklenirken hata oluþtu. Lüften sistem yöneticinizebaþvurun."
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "Dýþarý aktarýlacak hiç adres yok."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Adres defterleri þu sýra ile görüntülenecek:"
+
+#: templates/prefs/columnselect.inc:242 templates/prefs/columnselect.inc:244
+msgid "These columns will display in this order:"
+msgstr "Kolonlar þu sýra ile görüntülenecek:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Bu adres defteri silinemez"
+
+#: data.php:287
+msgid "This file format is not supported."
+msgstr "Bu dosya biçimi desteklenmiyor."
+
+#: lib/api.php:1414 lib/api.php:1427
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Bu kiþiye ait %s kayýtý adres defterinde mevcut."
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+"Kiþi eklerken ya da dýþarýdan taþýrken, bu adres defteri varsayýlan olacak."
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "Zaman dilimi"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Kiþi bilgisi sahibi bulunamadý."
+
+#: lib/Turba.php:643 lib/Driver.php:1431
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "%s in tanýmý yüklenemedi."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "\"%s\" adres defteri saklanamadý: %s"
+
+#: lib/Driver/kolab.php:486
+msgid "Unable to search."
+msgstr "Arama yapýlamýyor."
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:168
+msgid "Undo Changes"
+msgstr "Deðiþiklikleri Geri Al"
+
+#: config/attributes.php.dist:352
+msgid "Unfiled"
+msgstr "Doldurulmamýþ"
+
+#: lib/api.php:715 lib/api.php:818 lib/api.php:970
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Desteklenmeyen Ýçerik Türü: %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Görüntüle \"%s\""
+
+#: minisearch.php:76
+msgid "View Contact"
+msgstr "Kiþi kaydýný Görüntüle"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "Öntanýmlý görünüm"
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr "Web sayfasý adresi"
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "Ýþ Adresi"
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr "Þehir"
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr "Ülke"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "Ýþ Telefonu"
+
+#: config/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr "Ýþ Postahane Kutusu"
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "Ýþ Posta Kodu"
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "Bölge"
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "Ýþ Adresi"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Bu adres defterini deðiþtirme izniniz yok."
+
+#: data.php:251 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:273
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr ""
+"%d adetden fazla iletiþim kaydý eklemenize izin yok (\"%s\" içerisine)."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Bu adres defterini silme izniniz yok."
+
+#: lib/api.php:194
+msgid "You are not allowed to remove user data."
+msgstr "Kiþi iletiþim bilgilerini silme izniniz yok."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Bu adres defterine kayýt ekleyemezsiniz."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "BU adres defterine yeni kayýt ekleyemezsiniz."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "BU adres defterinden kayýt silemezsiniz."
+
+#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
+#: lib/Views/EditContact.php:49
+msgid "You do not have permission to view this contact."
+msgstr "Bu kiþi iletiþim bilgilerini görüntülemeye izniniz yok."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Bu nesneyi görüntülemeye izniniz yok."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Bu adres defterini silme izniniz yok."
+
+#: lib/Driver/ldap.php:705
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr "Þema kontrolü için Net_LDAP PEAR kütüphanesi yüklü olmalý "
+
+#: search.php:109
+msgid "You must provide a name for virtual address books."
+msgstr "Bu adres defteri için bir ad seçmelisiniz."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Bir hedef adres defteri seçmelisiniz."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Bir hedef liste seçmelisiniz."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Önce en az bir kayýt seçmelisiniz."
+
+#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+msgid "You only have permission to view this contact."
+msgstr "Bu kiþi iletiþim bilgilerini sadece görüntüleme izniniz var."
+
+#: lib/Views/Browse.php:357
+msgid "Your default address book is not browseable."
+msgstr "Varsayýlan adres defteriniz incelenebilir deðil."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[deðer yok]"
+
+#: lib/Turba.php:585
+msgid "_Browse"
+msgstr "_Gözat"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "i_letiþim bilgileri"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "_Sil"
+
+#: contact.php:82
+msgid "_Edit"
+msgstr "_Düzenle"
+
+#: lib/Turba.php:594
+msgid "_Import/Export"
+msgstr "Ýçeri/Dýþarý _Aktar"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "Li_ste"
+
+#: lib/Turba.php:582
+msgid "_My Address Books"
+msgstr "Adres _Defterim"
+
+#: lib/Turba.php:588
+msgid "_New Contact"
+msgstr "_Yeni Ýletiþim bilgisi"
+
+#: lib/Turba.php:599
+msgid "_Print"
+msgstr "_Yazdýr"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "B_u listeden sil"
+
+#: lib/Turba.php:590
+msgid "_Search"
+msgstr "_Arama"
+
+#: contact.php:79
+msgid "_View"
+msgstr "_Göster"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "Artan"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "iletiþim"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:233
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "contact.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "Azalan"
+
+#: config/attributes.php.dist:386
+msgid "female"
+msgstr "kadýn"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "%s içinde"
+
+#: config/attributes.php.dist:386
+msgid "male"
+msgstr "Bay"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "biçimleme yok"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "Hiçbiri"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "iletiþim listesine"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "farklý bir Adres Defterine"
+
+#: data.php:62 templates/data/import.inc:15 templates/data/export.inc:15
+#: templates/browse/column_headers.inc:13
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/turba.pot b/turba/po/turba.pot
new file mode 100644 (file)
index 0000000..cbd5b07
--- /dev/null
@@ -0,0 +1,1753 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright YEAR Horde Project
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-08-01 10:44+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr ""
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr ""
+
+#: data.php:382
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr ""
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr ""
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr ""
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr ""
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr ""
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr ""
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr ""
+
+#: lib/Driver.php:586
+#, php-format
+msgid "%d. %s of %s"
+msgstr ""
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr ""
+
+#: data.php:410
+#, php-format
+msgid "%s file successfully imported."
+msgstr ""
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr ""
+
+#: lib/Turba.php:544
+#, php-format
+msgid "%s's Address Book"
+msgstr ""
+
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr ""
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr ""
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr ""
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr ""
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr ""
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr ""
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr ""
+
+#: lib/Driver.php:1971
+msgid "Adding contacts is not available."
+msgstr ""
+
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr ""
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr ""
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr ""
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr ""
+
+#: data.php:362
+msgid "Address book successfully purged."
+msgstr ""
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr ""
+
+#: search.php:199 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr ""
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr ""
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr ""
+
+#: lib/api.php:942
+msgid "Already Exists"
+msgstr ""
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr ""
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr ""
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr ""
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr ""
+
+#: config/attributes.php.dist:392
+msgid "Assistant"
+msgstr ""
+
+#: search.php:196 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr ""
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr ""
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr ""
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr ""
+
+#: contact.php:128 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr ""
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr ""
+
+#: templates/menu.inc:8 templates/addressbook_list.php:29
+#: addressbooks/index.php:39
+msgid "Browse"
+msgstr ""
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr ""
+
+#: data.php:101
+msgid "CSV"
+msgstr ""
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr ""
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr ""
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr ""
+
+#: config/attributes.php.dist:364
+msgid "Category"
+msgstr ""
+
+#: templates/browse/column_headers.inc:25
+#, php-format
+msgid "Change %s sort to %s"
+msgstr ""
+
+#: templates/addressbook_list.php:33 addressbooks/index.php:41
+msgid "Change Permissions"
+msgstr ""
+
+#: templates/browse/column_headers.inc:8
+msgid "Check All/None"
+msgstr ""
+
+#: templates/browse/column_headers.inc:8
+msgid "Check _All/None"
+msgstr ""
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr ""
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr ""
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr ""
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr ""
+
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+
+#: templates/block/minisearch.inc:26
+msgid "Close"
+msgstr ""
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr ""
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr ""
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr ""
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr ""
+
+#: config/attributes.php.dist:490
+msgid "Common Address Extended"
+msgstr ""
+
+#: config/attributes.php.dist:508
+msgid "Common City"
+msgstr ""
+
+#: config/attributes.php.dist:526
+msgid "Common Country"
+msgstr ""
+
+#: config/attributes.php.dist:434
+msgid "Common Phone"
+msgstr ""
+
+#: config/attributes.php.dist:502
+msgid "Common Post Office Box"
+msgstr ""
+
+#: config/attributes.php.dist:520
+msgid "Common Postal Code"
+msgstr ""
+
+#: config/attributes.php.dist:514
+msgid "Common State/Province"
+msgstr ""
+
+#: config/attributes.php.dist:496
+msgid "Common Street"
+msgstr ""
+
+#: config/attributes.php.dist:459
+msgid "Common Video Call"
+msgstr ""
+
+#: config/sources.php.dist:243 config/sources.php.dist:923
+msgid "Communications"
+msgstr ""
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr ""
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr ""
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:547 lib/api.php:601
+#: lib/api.php:654 lib/api.php:702 lib/api.php:757 lib/api.php:816
+#: lib/api.php:867 lib/api.php:1005 lib/api.php:1068 lib/api.php:1139
+#: lib/api.php:1206 lib/api.php:1326 lib/api.php:1559 lib/api.php:1636
+#: lib/api.php:1787
+#, php-format
+msgid "Connection failed: %s"
+msgstr ""
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr ""
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr ""
+
+#: config/sources.php.dist:852
+msgid "Contacts"
+msgstr ""
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr ""
+
+#: lib/Views/Browse.php:339
+#, php-format
+msgid "Contacts in list: %s"
+msgstr ""
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr ""
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr ""
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr ""
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr ""
+
+#: lib/ListView.php:448
+msgid "Create a new Contact List in:"
+msgstr ""
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr ""
+
+#: contact.php:95
+msgid "De_lete"
+msgstr ""
+
+#: templates/addressbook_list.php:35 templates/browse/actions.inc:3
+#: addressbooks/index.php:42 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
+msgid "Delete"
+msgstr ""
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr ""
+
+#: lib/api.php:645
+msgid "Delete denied."
+msgstr ""
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr ""
+
+#: lib/Driver.php:1979
+msgid "Deleting contacts is not available."
+msgstr ""
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr ""
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr ""
+
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr ""
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr ""
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr ""
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr ""
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr ""
+
+#: templates/browse/row.inc:23 templates/browse/row.inc:24
+msgid "Download vCard"
+msgstr ""
+
+#: templates/addressbook_list.php:31 templates/browse/row.inc:36
+#: templates/browse/row.inc:37 templates/browse/column_headers.inc:11
+#: templates/browse/actions.inc:6 addressbooks/index.php:40
+msgid "Edit"
+msgstr ""
+
+#: edit.php:91
+#, php-format
+msgid "Edit \"%s\""
+msgstr ""
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr ""
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr ""
+
+#: config/attributes.php.dist:243
+msgid "Emails"
+msgstr ""
+
+#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr ""
+
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr ""
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr ""
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr ""
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr ""
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr ""
+
+#: lib/api.php:708
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr ""
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr ""
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr ""
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr ""
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr ""
+
+#: data.php:174 data.php:273 data.php:351 add.php:42 search.php:121
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr ""
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr ""
+
+#: lib/Views/Browse.php:345
+msgid "Failed to browse list"
+msgstr ""
+
+#: lib/Views/Browse.php:376
+msgid "Failed to browse the directory"
+msgstr ""
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr ""
+
+#: search.php:190
+msgid "Failed to search the address book"
+msgstr ""
+
+#: data.php:189
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr ""
+
+#: config/sources.php.dist:551
+msgid "Favourite Recipients"
+msgstr ""
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr ""
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr ""
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr ""
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+msgid "Finish"
+msgstr ""
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr ""
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr ""
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr ""
+
+#: config/attributes.php.dist:398
+msgid "Gender"
+msgstr ""
+
+#: config/sources.php.dist:777
+msgid "Global Address Book"
+msgstr ""
+
+#: templates/browse/row.inc:57
+msgid "Group"
+msgstr ""
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr ""
+
+#: config/attributes.php.dist:560
+msgid "Home Address Extended"
+msgstr ""
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr ""
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr ""
+
+#: config/attributes.php.dist:428
+msgid "Home Email"
+msgstr ""
+
+#: config/attributes.php.dist:444
+msgid "Home Fax"
+msgstr ""
+
+#: config/attributes.php.dist:566
+msgid "Home Latitude"
+msgstr ""
+
+#: config/attributes.php.dist:571
+msgid "Home Longitude"
+msgstr ""
+
+#: config/attributes.php.dist:454
+msgid "Home Mobile Phone"
+msgstr ""
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr ""
+
+#: config/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr ""
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr ""
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr ""
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr ""
+
+#: config/attributes.php.dist:469
+msgid "Home Video Call"
+msgstr ""
+
+#: config/attributes.php.dist:554
+msgid "Home Website URL"
+msgstr ""
+
+#: config/sources.php.dist:668
+msgid "IMSP"
+msgstr ""
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr ""
+
+#: data.php:428
+msgid "Import/Export Address Books"
+msgstr ""
+
+#: config/attributes.php.dist:374
+msgid "Initials"
+msgstr ""
+
+#: config/attributes.php.dist:380
+msgid "Instant Messenger"
+msgstr ""
+
+#: lib/api.php:1000 lib/api.php:1134
+msgid "Invalid ID"
+msgstr ""
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:369 lib/api.php:697
+#: lib/api.php:752 lib/api.php:811 lib/api.php:860 lib/api.php:996
+#: lib/api.php:1130 lib/api.php:1196 lib/api.php:1770
+#, php-format
+msgid "Invalid address book: %s"
+msgstr ""
+
+#: lib/api.php:1200
+msgid "Invalid contact unique ID"
+msgstr ""
+
+#: lib/api.php:1774 lib/api.php:1860 lib/api.php:1921
+msgid "Invalid email"
+msgstr ""
+
+#: lib/api.php:1782
+msgid "Invalid entry"
+msgstr ""
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr ""
+
+#: lib/api.php:1778
+msgid "Invalid name"
+msgstr ""
+
+#: config/attributes.php.dist:276
+msgid "Job Title"
+msgstr ""
+
+#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr ""
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr ""
+
+#: config/attributes.php.dist:404
+msgid "Language"
+msgstr ""
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr ""
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr ""
+
+#: config/attributes.php.dist:410
+msgid "Latitude"
+msgstr ""
+
+#: templates/browse/column_headers.inc:17
+msgid "List"
+msgstr ""
+
+#: config/sources.php.dist:238 config/sources.php.dist:919
+msgid "Location"
+msgstr ""
+
+#: config/attributes.php.dist:415
+msgid "Longitude"
+msgstr ""
+
+#: lib/api.php:617
+msgid "Malformed request."
+msgstr ""
+
+#: templates/addressbook_list.php:2 addressbooks/index.php:46
+msgid "Manage Address Books"
+msgstr ""
+
+#: config/attributes.php.dist:386
+msgid "Manager"
+msgstr ""
+
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr ""
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr ""
+
+#: lib/api.php:330
+msgid "Maximum Number of Contacts"
+msgstr ""
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr ""
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr ""
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr ""
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr ""
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr ""
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr ""
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr ""
+
+#: lib/api.php:1898
+msgid "More than 1 entry found"
+msgstr ""
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr ""
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr ""
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr ""
+
+#: data.php:104 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr ""
+
+#: lib/api.php:1806
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+
+#: config/sources.php.dist:162
+msgid "My Address Book"
+msgstr ""
+
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr ""
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr ""
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr ""
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr ""
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr ""
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr ""
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr ""
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr ""
+
+#: lib/api.php:1901 lib/api.php:1961
+#, php-format
+msgid "No %s entry found for %s"
+msgstr ""
+
+#: data.php:93
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr ""
+
+#: search.php:107
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr ""
+
+#: lib/api.php:691 lib/api.php:746 lib/api.php:806 lib/api.php:991
+#: lib/api.php:1125 lib/api.php:1191
+msgid "No address book specified"
+msgstr ""
+
+#: minisearch.php:80
+msgid "No contacts found"
+msgstr ""
+
+#: templates/browse/column_headers.inc:44
+msgid "No contacts match the current filter."
+msgstr ""
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr ""
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr ""
+
+#: lib/api.php:894 lib/api.php:1237
+msgid "No vCard data was found."
+msgstr ""
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr ""
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:49
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr ""
+
+#: edit.php:48 deletefile.php:22
+msgid "Not found"
+msgstr ""
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr ""
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr ""
+
+#: lib/api.php:1043 lib/api.php:1262
+msgid "Object not found"
+msgstr ""
+
+#: lib/Driver/kolab.php:1184
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr ""
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr ""
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr ""
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+
+#: lib/api.php:1245
+msgid "Only one vcard supported."
+msgstr ""
+
+#: config/sources.php.dist:245 config/sources.php.dist:925
+msgid "Organization"
+msgstr ""
+
+#: config/sources.php.dist:246 config/sources.php.dist:927
+msgid "Other"
+msgstr ""
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr ""
+
+#: config/attributes.php.dist:485
+msgid "PTT"
+msgstr ""
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr ""
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr ""
+
+#: deletefile.php:36 lib/Driver.php:769 lib/api.php:871 lib/api.php:1791
+#: lib/Driver/sql.php:490
+msgid "Permission denied"
+msgstr ""
+
+#: config/sources.php.dist:235 config/sources.php.dist:915
+msgid "Personal"
+msgstr ""
+
+#: data.php:105 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr ""
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr ""
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:167
+msgid "Previous"
+msgstr ""
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr ""
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr ""
+
+#: lib/Driver.php:1963
+msgid "Reading contacts is not available."
+msgstr ""
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr ""
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr ""
+
+#: lib/Driver.php:2001
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+
+#: lib/Driver.php:663
+msgid "Requested object not found."
+msgstr ""
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr ""
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr ""
+
+#: config/attributes.php.dist:479
+msgid "SIP"
+msgstr ""
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr ""
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr ""
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr ""
+
+#: lib/Driver.php:1989
+msgid "Saving contacts is not available."
+msgstr ""
+
+#: templates/browse/search.inc:111 templates/browse/search.inc:119
+#: templates/browse/header.inc:3 templates/block/minisearch.inc:25
+#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+msgid "Search"
+msgstr ""
+
+#: lib/api.php:1564
+msgid "Search failed"
+msgstr ""
+
+#: lib/api.php:1796 lib/api.php:1802 lib/api.php:1811 lib/api.php:1824
+#, php-format
+msgid "Search failed: %s"
+msgstr ""
+
+#: templates/block/minisearch.inc:23
+msgid "Search for: "
+msgstr ""
+
+#: lib/Driver.php:1948
+msgid "Searching is not available."
+msgstr ""
+
+#: templates/browse/row.inc:48
+msgid "Select contact"
+msgstr ""
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr ""
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr ""
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr ""
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr ""
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr ""
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr ""
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr ""
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr ""
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr ""
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr ""
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr ""
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr ""
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr ""
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr ""
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr ""
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr ""
+
+#: templates/browse/column_headers.inc:32
+#, php-format
+msgid "Sort by %s"
+msgstr ""
+
+#: templates/browse/column_headers.inc:27
+#, php-format
+msgid "Sort by %s only"
+msgstr ""
+
+#: templates/browse/column_headers.inc:30
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr ""
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr ""
+
+#: lib/api.php:323
+msgid "Sources"
+msgstr ""
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr ""
+
+#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr ""
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr ""
+
+#: lib/Views/Browse.php:291
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr ""
+
+#: search.php:165
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr ""
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr ""
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr ""
+
+#: data.php:102
+msgid "TSV"
+msgstr ""
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr ""
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr ""
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr ""
+
+#: data.php:353
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr ""
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+
+#: lib/Driver.php:1919
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr ""
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr ""
+
+#: data.php:360
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr ""
+
+#: lib/api.php:1063
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr ""
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr ""
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr ""
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr ""
+
+#: vcard.php:19 contact.php:23 view.php:28
+msgid "The contact you requested does not exist."
+msgstr ""
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr ""
+
+#: data.php:333
+msgid "The import can be finished despite the warnings."
+msgstr ""
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:59
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr ""
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr ""
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+
+#: lib/Views/Browse.php:349
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] ""
+msgstr[1] ""
+
+#: search.php:161
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr ""
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+
+#: lib/Views/Browse.php:311
+msgid "There was an error creating a new list."
+msgstr ""
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr ""
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr ""
+
+#: lib/Views/Browse.php:355
+msgid "There was an error displaying the list"
+msgstr ""
+
+#: data.php:396
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr ""
+
+#: lib/api.php:890 lib/api.php:1232
+msgid "There was an error importing the iCalendar data."
+msgstr ""
+
+#: lib/api.php:259
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr ""
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+
+#: data.php:219
+msgid "There were no addresses to export."
+msgstr ""
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr ""
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr ""
+
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr ""
+
+#: data.php:318
+msgid "This file format is not supported."
+msgstr ""
+
+#: lib/api.php:1815 lib/api.php:1828
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr ""
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr ""
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr ""
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr ""
+
+#: lib/Driver.php:1841 lib/Turba.php:660
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr ""
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr ""
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr ""
+
+#: config/attributes.php.dist:367
+msgid "Unfiled"
+msgstr ""
+
+#: lib/api.php:928 lib/api.php:1040 lib/api.php:1250
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr ""
+
+#: minisearch.php:72 minisearch.php:73
+msgid "View Contact"
+msgstr ""
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr ""
+
+#: config/attributes.php.dist:474
+msgid "VoIP"
+msgstr ""
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr ""
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr ""
+
+#: config/attributes.php.dist:538
+msgid "Work Address Extended"
+msgstr ""
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr ""
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr ""
+
+#: config/attributes.php.dist:422
+msgid "Work Email"
+msgstr ""
+
+#: config/attributes.php.dist:439
+msgid "Work Fax"
+msgstr ""
+
+#: config/attributes.php.dist:544
+msgid "Work Latitude"
+msgstr ""
+
+#: config/attributes.php.dist:549
+msgid "Work Longitude"
+msgstr ""
+
+#: config/attributes.php.dist:449
+msgid "Work Mobile Phone"
+msgstr ""
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr ""
+
+#: config/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr ""
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr ""
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr ""
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr ""
+
+#: config/attributes.php.dist:464
+msgid "Work Video Call"
+msgstr ""
+
+#: config/attributes.php.dist:532
+msgid "Work Website URL"
+msgstr ""
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr ""
+
+#: data.php:282 add.php:48 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr ""
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr ""
+
+#: lib/api.php:204
+msgid "You are not allowed to remove user data."
+msgstr ""
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr ""
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr ""
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr ""
+
+#: lib/api.php:1058
+msgid "You didn't mark a contact as your own yet."
+msgstr ""
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr ""
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr ""
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr ""
+
+#: lib/api.php:1072
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+
+#: search.php:148
+msgid "You must provide a name for virtual address books."
+msgstr ""
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr ""
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr ""
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr ""
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr ""
+
+#: lib/Views/Browse.php:362
+msgid "Your default address book is not browseable."
+msgstr ""
+
+#: contact.php:101 contact.php:102 templates/browse/row.inc:10
+#: templates/browse/row.inc:11
+msgid "Your own contact"
+msgstr ""
+
+#: lib/api.php:1077
+msgid "Your own contact cannot be found in the address book."
+msgstr ""
+
+#: lib/Turba.php:602
+msgid "_Browse"
+msgstr ""
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr ""
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr ""
+
+#: contact.php:91
+msgid "_Edit"
+msgstr ""
+
+#: lib/Turba.php:611
+msgid "_Import/Export"
+msgstr ""
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr ""
+
+#: lib/Turba.php:599
+msgid "_My Address Books"
+msgstr ""
+
+#: lib/Turba.php:605
+msgid "_New Contact"
+msgstr ""
+
+#: lib/Turba.php:616
+msgid "_Print"
+msgstr ""
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr ""
+
+#: lib/Turba.php:607
+msgid "_Search"
+msgstr ""
+
+#: contact.php:88
+msgid "_View"
+msgstr ""
+
+#: templates/browse/column_headers.inc:25
+msgid "ascending"
+msgstr ""
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr ""
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr ""
+
+#: vcard.php:45
+msgid "contact"
+msgstr ""
+
+#: data.php:239 data.php:244 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr ""
+
+#: data.php:264
+msgid "contacts.ldif"
+msgstr ""
+
+#: data.php:249
+msgid "contacts.tsv"
+msgstr ""
+
+#: data.php:259
+msgid "contacts.vcf"
+msgstr ""
+
+#: templates/browse/column_headers.inc:25
+msgid "descending"
+msgstr ""
+
+#: config/attributes.php.dist:401
+msgid "female"
+msgstr ""
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr ""
+
+#: config/attributes.php.dist:401
+msgid "male"
+msgstr ""
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr ""
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr ""
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr ""
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr ""
+
+#: data.php:103 templates/browse/column_headers.inc:14
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr ""
diff --git a/turba/po/uk_UA.po b/turba/po/uk_UA.po
new file mode 100644 (file)
index 0000000..bf53927
--- /dev/null
@@ -0,0 +1,1800 @@
+# Turba Ukrainian win-1251 translation.
+# Copyright
+# Andriy Kopystyansky <anri@polynet.lviv.ua>, 2008
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba H3 (2.3)\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-11-28 12:38+0200\n"
+"PO-Revision-Date: 2008-12-04 12:00+0200\n"
+"Last-Translator: Andriy Kopystyansky <webmaster@polynet.lviv.ua>\n"
+"Language-Team: Ukrainian <anri@polynet.lviv.ua>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CP1251\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr " Äîäàòè IMSP-àäðåñíèê"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr " Âèòåðòè IMSP-àäðåñíèê"
+
+#: data.php:455
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" âæå ³ñíóº íå áóâ ³ìîðòîâàíèé."
+
+#: lib/Forms/EditContact.php:83
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" îíîâëåíî, àëå çáåðåãòè ï³äâàíòàæåíèé ôàéë íå âäàëîñü: %s"
+
+#: lib/Forms/EditContact.php:85 lib/Forms/EditContact.php:88
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" îíîâëåíî."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "\"%s\" íå ñêîï³éîâàíî, áî öå ñïèñîê."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "\"%s\" íå ïåðåì³ùåíî, áî öå ñïèñîê."
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"²ì'ÿ Ïð³çâèùå\"  (íàïð. Ïåòðî Ïåòðåíêî)"
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Ïð³çâèùå, ²ì'ÿ\"  (íàïð. Ïåòðåíêî, Ïåòðî)"
+
+#: lib/Driver.php:619
+#, php-format
+msgid "%d. %s of %s"
+msgstr "%d. %s ç %s"
+
+#: lib/Forms/AddContact.php:88
+#, php-format
+msgid "%s added."
+msgstr "%s äîäàíî."
+
+#: data.php:483
+#, php-format
+msgid "%s file successfully imported."
+msgstr "Ôàéë %s óñï³øíî ³ìïîðòîâàíî."
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s ïî %s ç %s"
+
+#: lib/Turba.php:541
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s Àäðåñíèê"
+
+#: lib/Block/minisearch.php:44
+msgid "A browser that supports iframes is required"
+msgstr "Ïîòð³áíèé áðàóçåð ç ï³äòðèìêîþ iframes"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "Äîñòóï äî %s çàáîðîíåíî"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Äîäàòè"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Äîäàòè êîíòàêò"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "Äîäàòè àäðåñíèê"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Äîäàòè ôàéë"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Äîäàòè äî"
+
+#: lib/Driver.php:2113 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "Âíåñåííÿ êîíòàêò³â íåìîæëèâå."
+
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr "Àäðåñíèê"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "Ñïèñîê àäðåñíèê³â"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "Ïåðåãëÿä Àäðåñíèêà"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "Àäðåñíèêè"
+
+#: data.php:435
+msgid "Address book successfully purged."
+msgstr "Àäðåñíèê óñï³øíî î÷èùåíî."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "Àäðåñíèêè, ÿê³ íå áóäóòü â³äîáðàæàòèñü:"
+
+#: search.php:184 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "Ðîçøèðåíèé ïîøóê"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "Ïñåâäîí³ì"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "Âñ³"
+
+#: lib/api.php:941
+msgid "Already Exists"
+msgstr "Âæå ³ñíóº"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "Þâ³ëå¿"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "г÷íèöÿ"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "Âïåâíåí³, ùî õî÷åòå âèòåðòè %s?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "Âè âïåâíåí³, ùî õî÷åòå âèòåðòè âèáðàí³ êîíòàêòè?"
+
+#: config/attributes.php.dist:424
+msgid "Assistant"
+msgstr ""
+
+#: search.php:181 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "Ïðîñòèé ïîøóê"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "ϳä'ºäíàííÿ íåâäàëå: (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "Äåíü íàðîäæåííÿ"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "Äí³ íàðîäæåííÿ"
+
+#: contact.php:128 templates/browse/row.inc:10
+msgid "Blank name"
+msgstr ""
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "Îáèäâà"
+
+#: addressbooks/index.php:39 templates/menu.inc:8
+#: templates/addressbook_list.php:29
+msgid "Browse"
+msgstr "Ïåðåãëÿä"
+
+#: config/attributes.php.dist:300
+msgid "Business Category"
+msgstr "Á³çíåñ êàòåãîð³ÿ"
+
+#: data.php:101
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "Íå ìîæíà äîäàâàòè ãðóïó ñàìó äî ñåáå."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "³äì³íèòè"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "Íå ìîæó âèòåðòè âñ³ çàïèñè ç àäðåñíèêà %s"
+
+#: config/attributes.php.dist:388
+msgid "Category"
+msgstr "Êàòåãîð³ÿ"
+
+#: templates/browse/column_headers.inc:25
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "Çì³íèòè %s ñîðòóâàííÿ íà %s"
+
+#: addressbooks/index.php:41 templates/addressbook_list.php:33
+msgid "Change Permissions"
+msgstr "Çì³íèòè Ïðàâà"
+
+#: templates/browse/column_headers.inc:8
+msgid "Check All/None"
+msgstr "Ïîçíà÷èòè âñ³/æîäíîãî"
+
+#: templates/browse/column_headers.inc:8
+msgid "Check _All/None"
+msgstr "Ïîçíà÷èòè âñ³/æîäíîãî"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "ijòè"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Âèáåð³òü àäðåñíèê"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "Âêàæ³òü, ÿê³ àäðåñíèêè ïîêàçàòè ³ â ÿêîìó ïîðÿäêó:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Âèáåð³òü, ÿê³ àäðåñíèêè âèêîðèñòîâóâàòè."
+
+#: templates/prefs/columnselect.inc:41
+msgid ""
+"Click an address book to sort its columns. Drag columns to re-arrange them. "
+"Check a column to enable it."
+msgstr ""
+
+#: templates/block/minisearch.inc:26
+msgid "Close"
+msgstr "Çàêðèòè"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Çàêðèòè ïîøóê"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Îïö³¿ êîëîíîê"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "Ðîçä³ëåí³ êîìîþ çíà÷åííÿ"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "Ðîçä³ëåí³ êîìîþ çíà÷åííÿ (Microsoft Outlook)"
+
+#: config/attributes.php.dist:522
+msgid "Common Address Extended"
+msgstr ""
+
+#: config/attributes.php.dist:540
+msgid "Common City"
+msgstr ""
+
+#: config/attributes.php.dist:558
+msgid "Common Country"
+msgstr ""
+
+#: config/attributes.php.dist:466
+msgid "Common Phone"
+msgstr ""
+
+#: config/attributes.php.dist:534
+msgid "Common Post Office Box"
+msgstr ""
+
+#: config/attributes.php.dist:552
+msgid "Common Postal Code"
+msgstr ""
+
+#: config/attributes.php.dist:546
+msgid "Common State/Province"
+msgstr ""
+
+#: config/attributes.php.dist:528
+msgid "Common Street"
+msgstr ""
+
+#: config/attributes.php.dist:491
+msgid "Common Video Call"
+msgstr ""
+
+#: config/sources.php.dist:256 config/sources.php.dist:948
+msgid "Communications"
+msgstr "Êîìóí³êàö³¿"
+
+#: config/attributes.php.dist:306
+msgid "Company"
+msgstr "Êîìïàí³ÿ"
+
+#: config/attributes.php.dist:235
+msgid "Company Address"
+msgstr "Àäðåñà êîìïàí³¿"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:546 lib/api.php:600
+#: lib/api.php:653 lib/api.php:701 lib/api.php:756 lib/api.php:815
+#: lib/api.php:866 lib/api.php:1004 lib/api.php:1066 lib/api.php:1137
+#: lib/api.php:1204 lib/api.php:1324 lib/api.php:1563 lib/api.php:1640
+#: lib/api.php:1791
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Çâ'ÿçîê âòðà÷åíî: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Çá³é çâ'ÿçêó"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "Ïîøóê êîíòàêò³â"
+
+#: config/sources.php.dist:866
+msgid "Contacts"
+msgstr "Êîíòàêòè"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "Ïîêàçàíî êîíòàêòè:"
+
+#: lib/Views/Browse.php:346
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "Êîíòàêòè â ñïèñêó: %s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "Êîï³þâàòè"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "Ñòâîðèòè"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "Ñòâîðèòè Àäðåñíèê"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "Ñòâîðèòè íîâèé Àäðåñíèê"
+
+#: lib/ListView.php:448
+msgid "Create a new Contact List in:"
+msgstr "Ñòâîðèòè íîâèé ñïèñîê êîíòàêò³â â:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "Ñòâîðåíî"
+
+#: contact.php:95
+msgid "De_lete"
+msgstr "Âèòåðòè"
+
+#: addressbooks/index.php:42 templates/addressbook_list.php:35
+#: templates/browse/actions.inc:3 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
+msgid "Delete"
+msgstr "Âèòåðòè"
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "Âèòåðòè %s"
+
+#: lib/api.php:644
+msgid "Delete denied."
+msgstr "Âèòèðàííÿ çàáîðîíåíî."
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "Âèòèðàííÿ  íåâäàëå: (%s) %s"
+
+#: lib/Driver.php:2121 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "Âèäàëåííÿ êîíòàêò³â íå ìîæëèâå."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "Âèäàëåííÿ íå âäàëîñÿ."
+
+#: config/attributes.php.dist:312
+msgid "Department"
+msgstr "³ää³ë"
+
+#: lib/Forms/EditAddressBook.php:44 lib/Forms/CreateAddressBook.php:37
+msgid "Description"
+msgstr "Îïèñ"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "Êàòàëîã"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Ïîêàçàòè"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Îïö³¿ â³äîáðàæåííÿ"
+
+#: lib/Object.php:354
+msgid "Download"
+msgstr "Ñêà÷àòè"
+
+#: templates/browse/row.inc:27 templates/browse/row.inc:28
+#: templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "Ñêà÷àòè vCard"
+
+#: addressbooks/index.php:40 templates/addressbook_list.php:31
+#: templates/browse/column_headers.inc:11 templates/browse/row.inc:40
+#: templates/browse/row.inc:41 templates/browse/contactrow.inc:33
+#: templates/browse/actions.inc:6
+msgid "Edit"
+msgstr "Ðåäàãóâàòè"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "Ðåäàãóâàòè \"%s\""
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "Ðåäàãóâàòè %s"
+
+#: config/attributes.php.dist:249
+msgid "Email"
+msgstr "Å-ïîøòà"
+
+#: config/attributes.php.dist:255
+msgid "Emails"
+msgstr "Å-ïîøòè"
+
+#: lib/Views/Browse.php:270 lib/Views/Browse.php:310
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "Ïîìèëêà äîäàâàííÿ %d êîíòàêòó(³â) äî ñïèñêó."
+
+#: lib/Views/Browse.php:272 lib/Views/Browse.php:312
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "Ïîìèëêà äîäàâàííÿ %d ç %d âêàçàíèõ êîíòàêò³â äî ñïèñêó."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "Ïîìèëêà âèäàëåííÿ %d êîíòàêòó(³â)."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "Ïîìèëêà âèäàëåííÿ %d ç %d âêàçàíèõ êîíòàêò³â."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "Ïîìèëêà âèäàëåííÿ %d êîíòàêòó(³â) ç³ ñïèñêó."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "Ïîìèëêà âèäàëåííÿ %d ç %d âêàçàíèõ êîíòàêò³â(³â) ç³ ñïèñêó."
+
+#: lib/api.php:707
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "Ïîìèëêà ïîøóêó â Àäðåñíèêó: %s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "Åêñïîðò"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "Åêñïîðò Àäðåñíèêà"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "Åêñïîðòóâàòè ò³ëüêè âêàçàí³ êîíòàêòè."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "Åêñïîðòóâàòè íàñòóïíèé àäðåñíèê ïîâí³ñòþ."
+
+#: search.php:106 add.php:42 data.php:247 data.php:346 data.php:424
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "Íåâäàëèé äîñòóï äî àäðåñíèêà: %s"
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "Íå âäàëîñü äîäàòè %s äî %s: %s"
+
+#: lib/Views/Browse.php:352
+msgid "Failed to browse list"
+msgstr "Íå âäàëîñü ïðîãëÿíóòè ñïèñîê"
+
+#: lib/Views/Browse.php:383
+msgid "Failed to browse the directory"
+msgstr "Íå âäàëîñü ïðîãëÿíóòè äèðåêòîð³þ"
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr ""
+"Íå âäàëîñü çì³íèòè ³ì'ÿ: (%s) %s; Ñòàðèé DN = %s, Íîâèé DN = %s, Root = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "Íå âäàëîñü çíàéòè îá'ºêò äëÿ äîäàâàííÿ: %s"
+
+#: search.php:175
+msgid "Failed to search the address book"
+msgstr "Ïîìèëêà ïîøóêó â Àäðåñíèêó"
+
+#: data.php:262
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "Íå âäàëîñü çíàéòè äèðåêòîð³þ: %s"
+
+#: config/sources.php.dist:565
+msgid "Favourite Recipients"
+msgstr "Ïîïóëÿðí³ îòðèìóâà÷³"
+
+#: config/attributes.php.dist:276
+msgid "Fax"
+msgstr "Ôàêñ"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "Ôàéëè"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "Ïîøóê"
+
+#: lib/Forms/EditContact.php:128 lib/Forms/EditContact.php:167
+msgid "Finish"
+msgstr "ʳíåöü"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "²ì'ÿ"
+
+#: config/attributes.php.dist:350
+msgid "Freebusy URL"
+msgstr "URL â³ëüíèé/çàíÿòèé"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "³ä"
+
+#: config/attributes.php.dist:430
+msgid "Gender"
+msgstr "Ñòàòü"
+
+#: config/sources.php.dist:791
+msgid "Global Address Book"
+msgstr "Ãëîáàëüíèé Àäðåñíèê"
+
+#: templates/browse/row.inc:61 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "Ãðóïà"
+
+#: config/attributes.php.dist:135
+msgid "Home Address"
+msgstr "Äîìàøíÿ àäðåñà"
+
+#: config/attributes.php.dist:592
+msgid "Home Address Extended"
+msgstr "Äîìàøíÿ àäðåñà Ðîçøèðåíà"
+
+#: config/attributes.php.dist:153
+msgid "Home City"
+msgstr ""
+
+#: config/attributes.php.dist:171
+msgid "Home Country"
+msgstr ""
+
+#: config/attributes.php.dist:460
+msgid "Home Email"
+msgstr "Äîìàøíÿ å-ïîøòà"
+
+#: config/attributes.php.dist:476
+msgid "Home Fax"
+msgstr "Äîìàøí³é ôàêñ"
+
+#: config/attributes.php.dist:598
+msgid "Home Latitude"
+msgstr "Äîìàøíÿ øèðîòà"
+
+#: config/attributes.php.dist:603
+msgid "Home Longitude"
+msgstr "Äîìàøíÿ äîâãîòà"
+
+#: config/attributes.php.dist:486
+msgid "Home Mobile Phone"
+msgstr "Äîìàøí³é Ìîá³ëüíèé òåëåôîí"
+
+#: config/attributes.php.dist:261
+msgid "Home Phone"
+msgstr "Äîìàøí³é òåëåôîí"
+
+#: config/attributes.php.dist:147
+msgid "Home Post Office Box"
+msgstr ""
+
+#: config/attributes.php.dist:165
+msgid "Home Postal Code"
+msgstr ""
+
+#: config/attributes.php.dist:159
+msgid "Home State/Province"
+msgstr ""
+
+#: config/attributes.php.dist:141
+msgid "Home Street Address"
+msgstr ""
+
+#: config/attributes.php.dist:501
+msgid "Home Video Call"
+msgstr ""
+
+#: config/attributes.php.dist:586
+msgid "Home Website URL"
+msgstr "URL äîìàøíüîãî âåáñàéòó"
+
+#: config/sources.php.dist:682
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "²ìïîðò àäðåñíèêà, Êðîê %d"
+
+#: data.php:501
+msgid "Import/Export Address Books"
+msgstr "²ìïîðò/Åêñïîðò àäðåñíèê³â"
+
+#: config/attributes.php.dist:406
+msgid "Initials"
+msgstr ""
+
+#: config/attributes.php.dist:412
+msgid "Instant Messenger"
+msgstr "Îíëàéí ìåññåíäæåð"
+
+#: lib/api.php:999 lib/api.php:1132
+msgid "Invalid ID"
+msgstr "Íåïðàâèëüíèé ID"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:368 lib/api.php:696
+#: lib/api.php:751 lib/api.php:810 lib/api.php:859 lib/api.php:995
+#: lib/api.php:1128 lib/api.php:1194 lib/api.php:1774
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "Íåïðàâèëüíèé àäðåñíèê: %s"
+
+#: lib/api.php:1198
+msgid "Invalid contact unique ID"
+msgstr ""
+
+#: lib/api.php:1778 lib/api.php:1864 lib/api.php:1925
+msgid "Invalid email"
+msgstr "Íåïðàâèëüíà å-ïîøòà"
+
+#: lib/api.php:1786
+msgid "Invalid entry"
+msgstr "Íåïðàâèëüíèé çàïèñ"
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr "Âêàçàíî íåêîðåêòíèé êëþ÷."
+
+#: lib/api.php:1782
+msgid "Invalid name"
+msgstr "Íåïðàâèëüíå ³ì'ÿ"
+
+#: config/attributes.php.dist:288
+msgid "Job Title"
+msgstr ""
+
+#: lib/Driver/kolab.php:1129 lib/Driver/kolab.php:1195
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr ""
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr ""
+"ϳäòðèìêà LDAP íåîáõ³äíà, àëå ìîäóëü LDAP íå äîñòóïíèé àáî íå çàâàíòàæåíèé."
+
+#: data.php:106 templates/data/import.inc:18 templates/data/export.inc:16
+msgid "LDIF Address Book"
+msgstr ""
+
+#: config/attributes.php.dist:436
+msgid "Language"
+msgstr "Ìîâà"
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr "Âîñòàííº îíîâëåíî"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "Ïð³çâèùå"
+
+#: config/attributes.php.dist:442
+msgid "Latitude"
+msgstr "Øèðîòà"
+
+#: templates/browse/column_headers.inc:17
+msgid "List"
+msgstr "Ñïèñîê"
+
+#: config/sources.php.dist:251 config/sources.php.dist:944
+msgid "Location"
+msgstr "̳ñöå ïåðåáóâàííÿ"
+
+#: config/attributes.php.dist:324
+msgid "Logo"
+msgstr "Ëîãîòèï"
+
+#: config/attributes.php.dist:330
+msgid "Logo MIME Type"
+msgstr ""
+
+#: config/attributes.php.dist:447
+msgid "Longitude"
+msgstr "Äîâãîòà"
+
+#: lib/api.php:616
+msgid "Malformed request."
+msgstr "Íåïðàâèëüíèé çàïèò."
+
+#: addressbooks/index.php:46 templates/addressbook_list.php:2
+msgid "Manage Address Books"
+msgstr "Êåðóâàííÿ Àäðåñíèêàìè"
+
+#: config/attributes.php.dist:418
+msgid "Manager"
+msgstr "Ìåíåäæåð"
+
+#: contact.php:109
+msgid "Mark this as your own contact"
+msgstr "Ïîçíà÷èòè öå ÿê âëàñíèé êîíòàêò"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr ""
+
+#: lib/api.php:329
+msgid "Maximum Number of Contacts"
+msgstr "Ìàêñèìàëüíà ê³ëüê³ñòü êîíòàêò³â"
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "Ìàêñèìàëüíà ê³ëüê³ñòü ñòîð³íîê"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "Ñïèñîê ìåíþ"
+
+#: config/attributes.php.dist:65
+msgid "Middle Names"
+msgstr "Ïî-áàòüêîâ³"
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr ""
+
+#: config/attributes.php.dist:271
+msgid "Mobile Phone"
+msgstr "Ìîá³ëüíèé òåëåôîí"
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Çì³íà íåâäàëà: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "Á³ëüøå îïö³é..."
+
+#: lib/api.php:1902
+msgid "More than 1 entry found"
+msgstr "Á³ëüøå í³æ 1 çàïèñ çíàéäåíî"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "Ïåðåíåñòè"
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "Ïîñóíóòè âë³âî"
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "Ïîñóíóòè âïðàâî"
+
+#: data.php:104 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Àäðåñíèê Mulberry"
+
+#: lib/api.php:1810
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "ʳëüêà îñ³á ç àäðåñàìè [%s], àëå æîäåí ç ³ìåíåì [%s] ³ñíóþòü"
+
+#: config/sources.php.dist:167
+msgid "My Address Book"
+msgstr "̳é Àäðåñíèê"
+
+#: lib/Forms/EditAddressBook.php:43 lib/Forms/CreateAddressBook.php:36
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "²ì'ÿ"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "Ôîðìàò ³ìåí³"
+
+#: config/attributes.php.dist:71
+msgid "Name Prefixes"
+msgstr "Ïðèñòàâêà ³ìåí³"
+
+#: config/attributes.php.dist:77
+msgid "Name Suffixes"
+msgstr ""
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr ""
+
+#: add.php:70 lib/Block/tree_menu.php:28
+msgid "New Contact"
+msgstr "Íîâèé êîíòàêò"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:119
+#: lib/Forms/EditContact.php:126 lib/Forms/EditContact.php:181
+msgid "Next"
+msgstr "Íàñòóïíèé"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "ͳê"
+
+#: lib/api.php:1905 lib/api.php:1965
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "Íå çíàéäåíî çàïèñ³â %s äëÿ %s"
+
+#: data.php:93
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "Æîäíèõ àäðåñíèê³â çàðàç íå äîñòóïíî. ²ìïîðò ³ åêñïîðò çàáîðîíåí³."
+
+#: search.php:92
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "Æîäíèõ àäðåñíèê³â çàðàç íå äîñòóïíî. Ïîøóê çàáîðîíåíèé."
+
+#: lib/api.php:690 lib/api.php:745 lib/api.php:805 lib/api.php:990
+#: lib/api.php:1123 lib/api.php:1189
+msgid "No address book specified"
+msgstr "Æîäíîãî àäðåñíèêà íå âêàçàíî"
+
+#: minisearch.php:80
+msgid "No contacts found"
+msgstr "Æîäíèõ êîíòàêò³â íå çíàéäåíî"
+
+#: templates/browse/column_headers.inc:44
+msgid "No contacts match the current filter."
+msgstr "Æîäåí êîíòàêò íå â³äïîâ³äຠïîòî÷íîìó ô³ëüòðó."
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "³äïîâ³äíèõ êîíòàêò³â íå çíàéäåíî"
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr ""
+
+#: lib/api.php:893 lib/api.php:1235
+msgid "No vCard data was found."
+msgstr "Æîäíèõ vCard äàíèõ íå çíàéäåíî."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "Æîäåí"
+
+#: lib/Views/EditContact.php:33 lib/Views/DeleteContact.php:26
+#: lib/Views/Contact.php:49
+msgid "Not Found"
+msgstr "Íå çíàéäåíî"
+
+#: deletefile.php:22 edit.php:48
+msgid "Not found"
+msgstr "Íå çíàéäåíî"
+
+#: config/attributes.php.dist:338
+msgid "Notes"
+msgstr "Íîòàòêè"
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "ʳëüê³ñòü íà ñòîð³íêó"
+
+#: lib/api.php:1041 lib/api.php:1260
+msgid "Object not found"
+msgstr "Îá'ºêò íå çíàéäåíî"
+
+#: lib/Driver/kolab.php:1199
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "Îá'ºêò ç UID %s íå ³ñíóº!"
+
+#: config/attributes.php.dist:294
+msgid "Occupation"
+msgstr "Ïîñàäà"
+
+#: config/attributes.php.dist:318
+msgid "Office"
+msgstr "Îô³ñ"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"Îñê³ëüêè Âè çáåðåãëè öþ ñòîð³íêó íàñòðîéîê, àäðåñíèê áóäå íàçàâæäè âèòåðòî."
+"ßêùî öå íå òå, ùî Âàì ïîòð³áíî, òîä³ çì³í³òü ñâ³é âèá³ð íà \"Æîäåí\"."
+
+#: lib/api.php:1243
+msgid "Only one vcard supported."
+msgstr "ϳäòðèìóºòüñÿ ò³ëüêè îäíà vcard."
+
+#: config/sources.php.dist:258 config/sources.php.dist:950
+msgid "Organization"
+msgstr "Îðãàí³çàö³ÿ"
+
+#: config/sources.php.dist:259 config/sources.php.dist:952
+msgid "Other"
+msgstr "²íøèé"
+
+#: config/attributes.php.dist:356
+msgid "PGP Public Key"
+msgstr "Ïóáë³÷íèé êëþ÷ PGP"
+
+#: config/attributes.php.dist:517
+msgid "PTT"
+msgstr ""
+
+#: config/attributes.php.dist:281
+msgid "Pager"
+msgstr "Ïåéäæåð"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "Íàçàâæäè âèòåðòè öåé êîíòàêò?"
+
+#: deletefile.php:36 lib/api.php:870 lib/api.php:1795 lib/Driver.php:804
+#: lib/Driver/sql.php:515
+msgid "Permission denied"
+msgstr " äîñòóï³ â³äìîâëåíî"
+
+#: config/sources.php.dist:248 config/sources.php.dist:940
+msgid "Personal"
+msgstr "Ïðèâàòí³"
+
+#: config/attributes.php.dist:121
+msgid "Photo"
+msgstr "Ôîòî"
+
+#: config/attributes.php.dist:127
+msgid "Photo MIME Type"
+msgstr ""
+
+#: data.php:105 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Àäðåñíèê Pine"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "Áóäü-ëàñêà, íàçâ³òü íîâèé ñïèñîê êîíòàêò³â:"
+
+#: lib/Forms/EditContact.php:122 lib/Forms/EditContact.php:125
+#: lib/Forms/EditContact.php:174
+msgid "Previous"
+msgstr "Ïîïåðåäíÿ"
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "Íåâäàëèé çàïèò: (%s) %s"
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Çá³é ÷èòàííÿ: (%s) %s"
+
+#: lib/Driver.php:2105 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "×èòàííÿ êîíòàêò³â íå äîñòóïíå."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"Ñïðàâä³ âèòåðòè àäðåñíèê \"%s\"? Öå íåçâîðîòíÿ îïåðàö³ÿ ³ âñ³ êîíòàêòè â "
+"öüîìó àäðåñíèêó áóäóòü íàçàâæäè âèòåðò³."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "Âèäàëèòè àäðåñíèê"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "Âèäàëèòè ç öüîãî ïåðåë³êó"
+
+#: lib/Driver.php:2143
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr ""
+"Âèäàëåííÿ äàíèõ êîðèñòóâà÷à íå ï³äòðèìóºòüñÿ ïîòî÷íèì äðàéâåðîì ñèñòåìè "
+"çáåðåæåííÿ àäðåñíèêà."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"Çàì³í³òè ³ñíóþ÷èé àäðåñíèê ³ìïîðòîâàíèì? <strong> Óâàãà: Öå çíèùèòü âñ³ "
+"çàïèñè â Âàøîìó àäðåñíèêó.</strong>"
+
+#: lib/Driver.php:698
+msgid "Requested object not found."
+msgstr "Âêàçàíèé îá'ºêò íå çíàéäåíî."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "Î÷èñòèòè äî òèïîâèõ"
+
+#: config/attributes.php.dist:362
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME Â³äêðèòèé Ñåðòèô³êàò"
+
+#: config/attributes.php.dist:511
+msgid "SIP"
+msgstr ""
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "Çá³é STARTTLS: (%s) %s"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr "Çáåðåãòè"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Çáåðåãòè ïîøóê ÿê ïñåâäî-àäðåñíèê?"
+
+#: lib/Driver.php:2131 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "Çáåðåæåííÿ êîíòàêò³â íå äîñòóïíå."
+
+#: templates/block/minisearch.inc:25 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/browse/header.inc:3
+#: lib/Block/tree_menu.php:62 config/prefs.php.dist:116
+msgid "Search"
+msgstr "Ïîøóê"
+
+#: lib/api.php:1568
+msgid "Search failed"
+msgstr "Ïîøóê íåâäàëèé"
+
+#: lib/api.php:1800 lib/api.php:1806 lib/api.php:1815 lib/api.php:1828
+#, php-format
+msgid "Search failed: %s"
+msgstr "Ïîøóê íåâäàëèé: %s"
+
+#: templates/block/minisearch.inc:23
+msgid "Search for: "
+msgstr ""
+
+#: lib/Driver.php:2090 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "Ïîøóê íå äîñòóïíèé."
+
+#: templates/browse/row.inc:52
+msgid "Select contact"
+msgstr "Âèáåð³òü êîíòàêò"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "Âêàæ³òü àäðåñíèê, ç ÿêîãî åêñïîðòóâàòè:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "Âêàæ³òü àäðåñíèê, â ÿêèé ³ìïîðòóâàòè:"
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr ""
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "Âêàæ³òü êîäóâàííÿ âõ³äíîãî ôàéëó:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Âêàæ³òü ôîðìàò åêñïîðòó:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "Âêàæ³òü ôàéë äëÿ ³ìïîðòó:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Âèáåð³òü ôîðìàò âõ³äíîãî ôàéëó:"
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "Âèáåð³òü ôîðìàò äëÿ â³äîáðàæåííÿ ³ìåí:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr "Âèáåð³òü âèãëÿä äëÿ ïîêàçó ïî çàìîâ÷óâàííþ ³ îïö³¿ ðîçáèòòÿ."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Âèáåð³òü ïîëÿ, ÿê³ ïîêàçóâàòè â ñïèñêó àäðåñ."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Âêàæ³òü, â ÿêîìó ôîðìàò³ ïîêàçóâàòè ³ìåíà:"
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "Âèáðàí³ Àäðåñíèêè \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Ïîêàçàòè %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr ""
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Ïîêàçàòè êîíòàêòè"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Ïîêàçàòè ñïèñêè"
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "Íàïðÿì ñîðòóâàííÿ"
+
+#: templates/browse/column_headers.inc:32
+#, php-format
+msgid "Sort by %s"
+msgstr "Ñîðòóâàòè ïî %s"
+
+#: templates/browse/column_headers.inc:27
+#, php-format
+msgid "Sort by %s only"
+msgstr "Ñîðòóâàòè ò³ëüêè ïî %s"
+
+#: templates/browse/column_headers.inc:30
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "Ñîðòóâàòè ïî %s, ïîò³ì ïî %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "Äæåðåëî:"
+
+#: lib/api.php:322
+msgid "Sources"
+msgstr "Äæåðåëà"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr ""
+
+#: lib/Views/Browse.php:268 lib/Views/Browse.php:308
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "Óñï³øíî äîäàíî %d êîíòàêò³â äî ñïèñîêó."
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "Óñï³øíî äîäàíî %s äî %s"
+
+#: lib/Views/Browse.php:298
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "Óñï³øíî ñòâîðåíî ñïèñîê êîíòàêò³â \"%s\"."
+
+#: search.php:150
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "Óñï³øíî ñòâîðåíî ïñåâäî-äðåñíèê \"%s\""
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "Óñï³øíî âèäàëåíî %d êîíòàêò(³â)."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "Óñï³øíî âèäàëåíî %d êîíòàêò(³â) ç³ ñïèñêó."
+
+#: data.php:102
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Çíà÷åííÿ ðîçä³ëåí³ òàáóëÿö³ºþ"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Àäðåñíèê ïðèçíà÷åííÿ"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr ""
+
+#: data.php:426
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "Ôàéë %s íå ì³ñòèòü äàíèõ."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr ""
+"VFS áóôåð ìóñèòü áóòè ñêîíô³ãóðîâàíèé, ùîá äîçâîëèòè çàêà÷óâàííÿ äîäàòê³â."
+
+#: lib/Driver.php:2061
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "Àäðåñíèêà \"%s\" íå ³ñíóº."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "Àäðåñíèê \"%s\" áóâ ñòâîðåíèé."
+
+#: data.php:433
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "Àäðåñíèê íå ìîæå áóòè âè÷èùåíèé: %s."
+
+#: lib/api.php:1061
+msgid "The address book with your own contact doesn't exist anymore."
+msgstr "Àäðåñíèêà ç Âàøèì âëàñíèì êîíòàêòîì á³ëüøå íå ³ñíóº."
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "Àäðåñíèê \"%s\" áóâ âèòåðòèé."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "Àäðåñíèê \"%s\" ïåðåéìåíîâàíî íà \"%s\"."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "Àäðåñíèê \"%s\" çáåðåæåíî."
+
+#: vcard.php:19 view.php:28 contact.php:23
+msgid "The contact you requested does not exist."
+msgstr "Âêàçàíèé Âàìè êîíòàêò íå ³ñíóº."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "Ôàéë \"%s\" áóëî âèòåðòî."
+
+#: data.php:406
+msgid "The import can be finished despite the warnings."
+msgstr "²ìïîðò ìîæå áóòè çàâåðøåíî, íå äèâëÿ÷èñü íà ïîïåðåäæåííÿ."
+
+#: lib/Views/EditContact.php:43 lib/Views/DeleteContact.php:36
+#: lib/Views/Contact.php:59
+msgid "The requested contact was not found."
+msgstr "Âêàçàíîãî êîíòàêòó íå çíàéäåíî."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "Íåìຠàäðåñíèêà, ÿêèé ìîæíà ïðîãëÿíóòè."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Íåìຠàäðåñíèê³â, â ÿê³ ìîæíà çàïèñàòè. Æîäåí ç äîñòóïíèõ àäðåñíèê³â íå "
+"ñêîíô³ãóðîâàíèé íà ïðèºäíàííÿ íîâèõ çàïèñ³â. ßêùî Âè äóìàºòå, ùî öå ïîìèëêà, "
+"áóäü-ëàñêà çâ'ÿæ³òüñÿ ç Âàøèì àäì³í³ñòðàòîðîì."
+
+#: lib/Views/Browse.php:356
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] " ñïèñêó º %d êîíòàêò, ÿêèé Âè íå ìîæåòå ïåðåãëÿäàòè"
+msgstr[1] " ñïèñêó º %d êîíòàêòè, ÿêèé Âè íå ìîæåòå ïåðåãëÿäàòè"
+msgstr[2] " ñïèñêó º %d êîíòàêò³â, ÿêèé Âè íå ìîæåòå ïåðåãëÿäàòè"
+
+#: search.php:146
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "Òðàïèëàñü ïîìèëêà ïðè ñòâîðåíí³ öüîãî àäðåñíèêà: %s"
+
+#: lib/Forms/AddContact.php:95
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr ""
+"Áóëà ïîìèëêà ïðè äîäàâàíí³ íîâîãî êîíòàêòó. Çâ'ÿæ³òüñÿ ç àäì³í³ñòðàòîðîì äëÿ "
+"ïîäàëüøî¿ äîïîìîãè."
+
+#: lib/Views/Browse.php:318
+msgid "There was an error creating a new list."
+msgstr "Òðàïèëàñü ïîìèëêà ñòâîðåííÿ íîâîãî ñïèñêó."
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ \"%s\" ç àäðåñíèêà-äæåðåëà."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ öüîãî êîíòàêòó: %s"
+
+#: lib/Views/Browse.php:362
+msgid "There was an error displaying the list"
+msgstr "Òðàïèëàñü ïîìèëêà â³äîáðàæåíí³ ñïèñêó"
+
+#: data.php:469
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "Òðàïèëàñü ïîìèëêà ïðè ³ìïîðòóâàíí³ äàíèõ: %s."
+
+#: lib/api.php:889 lib/api.php:1230
+msgid "There was an error importing the iCalendar data."
+msgstr "Òðàïèëàñü ïîìèëêà ³ìïîðòó äàíèõ ç iCalendar"
+
+#: lib/api.php:258
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "Òðàïèëàñü ïîìèëêà ïðè âèòèðàíí³ àäðåñíèêà äëÿ %s"
+
+#: lib/Forms/EditContact.php:93
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr ""
+"Òðàïèëàñü ïîìèëêà çáåðåæåííÿ êîíòàêòó. Çâ'ÿæ³òüñÿ ç àäì³í³ñòðàòîðîì äëÿ "
+"ïîäàëüøî¿ äîïîìîãè."
+
+#: data.php:292
+msgid "There were no addresses to export."
+msgstr "Íåìຠæîäíî¿ àäðåñè, ùîá åêñïîðòóâàòè."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "Ö³ àäðåñíèêè áóäóòü ïîêàçàí³ â òàêîìó ïîðÿäêó:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "Öåé àäðåñíèê íå ìîæå áóòè âèòåðòèé."
+
+#: contact.php:57
+msgid "This contact has been marked as your own."
+msgstr "Öåé êîíòàêò ïîçíà÷åíèé ÿê Âàø âëàñíèé."
+
+#: data.php:391
+msgid "This file format is not supported."
+msgstr "Öåé ôîðìàò ôàéëó íå ï³äòðèìóºòüñÿ."
+
+#: lib/api.php:1819 lib/api.php:1832
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "Ïðî öþ îñîáó âæå ³ñíóº %s çàïèñ â àäðåñíèêó"
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "Öå áóäå îñíîâíèé àäðåñíèê ïðè äîäàâàíí³ àáî ³ìïîðòóâàíí³ êîíòàêò³â."
+
+#: config/attributes.php.dist:241
+msgid "Time Zone"
+msgstr "×àñîâèé ïîÿñ"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "Íå ìîæó çíàéòè âëàñíèêà êîíòàêòó."
+
+#: lib/Turba.php:659 lib/Driver.php:1981
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "Íå ìîæó çàâàíòàæèòè âèçíà÷åííÿ %s"
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "Íå ìîæó çáåðåãòè àäðåñíèê \"%s\": %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "Íå ìîæó øóêàòè."
+
+#: config/attributes.php.dist:391
+msgid "Unfiled"
+msgstr "Íåçàïîâíåíèé"
+
+#: lib/api.php:927 lib/api.php:1038 lib/api.php:1248
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "Content-Type íå ï³äòðèìóºòüñÿ: %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "Îãëÿä \"%s\""
+
+#: minisearch.php:72 minisearch.php:73
+msgid "View Contact"
+msgstr "Ïðîãëÿíóòè êîíòàêò"
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "Ñòàíäàðòíèé âèãëÿä äëÿ â³äîáðàæåííÿ:"
+
+#: config/attributes.php.dist:506
+msgid "VoIP"
+msgstr ""
+
+#: config/attributes.php.dist:344
+msgid "Website URL"
+msgstr "URL âåáñàéòó"
+
+#: config/attributes.php.dist:185
+msgid "Work Address"
+msgstr "Ðîáî÷à àäðåñà"
+
+#: config/attributes.php.dist:570
+msgid "Work Address Extended"
+msgstr "Ðîáî÷à àäðåñà Ðîçøèðåíà"
+
+#: config/attributes.php.dist:203
+msgid "Work City"
+msgstr "̳ñòî ïðàö³"
+
+#: config/attributes.php.dist:221
+msgid "Work Country"
+msgstr "Êðà¿íà ïðàö³"
+
+#: config/attributes.php.dist:454
+msgid "Work Email"
+msgstr "Ðîáî÷à å-ïîøòà"
+
+#: config/attributes.php.dist:471
+msgid "Work Fax"
+msgstr "Ðîáî÷èé ôàêñ"
+
+#: config/attributes.php.dist:576
+msgid "Work Latitude"
+msgstr ""
+
+#: config/attributes.php.dist:581
+msgid "Work Longitude"
+msgstr ""
+
+#: config/attributes.php.dist:481
+msgid "Work Mobile Phone"
+msgstr "Ðîáî÷èé Ìîá³ëüíèé òåëåôîí"
+
+#: config/attributes.php.dist:266
+msgid "Work Phone"
+msgstr "Ðîáî÷èé òåëåôîí"
+
+#: config/attributes.php.dist:197
+msgid "Work Post Office Box"
+msgstr "Ðîáî÷à Ïîøòîâà ñêðèíüêà"
+
+#: config/attributes.php.dist:215
+msgid "Work Postal Code"
+msgstr "Ðîáî÷èé Ïîøòîâèé ²íäåêñ"
+
+#: config/attributes.php.dist:209
+msgid "Work State/Province"
+msgstr "Îáëàñòü àáî Ðåã³îí, äå ïðàöþºòå"
+
+#: config/attributes.php.dist:191
+msgid "Work Street Address"
+msgstr "Ðîáî÷à àäðåñà"
+
+#: config/attributes.php.dist:496
+msgid "Work Video Call"
+msgstr ""
+
+#: config/attributes.php.dist:564
+msgid "Work Website URL"
+msgstr "URL ðîáî÷îãî âåáñàéòó"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "Âàì íå ìîæíà çì³íþâàòè öåé àäðåñíèê."
+
+#: add.php:48 data.php:355 lib/Views/Browse.php:159 lib/Views/Browse.php:281
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "Âàì íå äîçâîëåíî ñòâîðþâàòè á³ëüøå, í³æ %d êîíòàêò³â â \"%s\""
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "Âàì íå ìîæíà âèòèðàòè öåé àäðåñíèê."
+
+#: lib/api.php:204
+msgid "You are not allowed to remove user data."
+msgstr "Âàì íå ìîæíà âèòèðàòè äàí³ êîðèñòóâà÷à."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "Âè íå ìîæåòå âíîñèòè çàïèñè â ïñåâäî-àäðåñíèê."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "Âè íå ìîæåòå âíîñèòè íîâ³ êîíòàêòè â ïñåâäî-àäðåñíèê"
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "Âè íå ìîæåòå âèòèðàòè êîíòàêòè ç ïñåâäî-àäðåñíèêà"
+
+#: lib/api.php:1056
+msgid "You didn't mark a contact as your own yet."
+msgstr "Âè ùå íå âêàçàëè, ÿêèé ç êîíòàêò³â Âàø âëàñíèé."
+
+#: edit.php:66 view.php:38 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Ó Âàñ íåìຠïðàâ äëÿ ïðîãëÿäó öüîãî êîíòàêòó."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "Ó Âàñ íåìຠïðàâ äëÿ ïðîãëÿäó öüîãî îá'ºêòó."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "Ó Âàñ íåìຠïðàâ âèòèðàòè öåé àäðåñíèê."
+
+#: lib/api.php:1070
+msgid ""
+"You don't have sufficient permissions to read the address book that contains "
+"your own contact."
+msgstr ""
+"Ó Âàñ íåìຠäîñòàòíüî ïðàâ äëÿ ÷èòàííÿ àäðåñíèêà, ùî ì³ñòèòü Âàø âëàñíèé "
+"êîíòàêò."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+
+#: search.php:133
+msgid "You must provide a name for virtual address books."
+msgstr "Âàì ñë³ä âêàçàòè íàçâó ïñåâäî-àäðåñíèêà."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Âàì ñë³ä âêàçàòè àäðåñíèê ïðèçíà÷åííÿ."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "Âàì ñë³ä âêàçàòè ñïèñîê ïðèçíà÷åííÿ êîíòàêò³â."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "Âàì ñë³ä âèáðàòè ñïî÷àòêó õî÷à á îäèí êîíòàêò."
+
+#: edit.php:70 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Ó Âàñ º ïðàâî ò³ëüêè íà ïåðåãëÿä öüîãî êîíòàêòó."
+
+#: lib/Views/Browse.php:369
+msgid "Your default address book is not browseable."
+msgstr "Âàø îñíîâíèé àäðåñíèê íå ïåðåãëÿäàºòüñÿ."
+
+#: contact.php:101 contact.php:102 templates/browse/row.inc:14
+#: templates/browse/row.inc:15
+msgid "Your own contact"
+msgstr "Âàø âëàñíèé êîíòàêò"
+
+#: lib/api.php:1075
+msgid "Your own contact cannot be found in the address book."
+msgstr "Âàø âëàñíèé êîíòàêò â³äñóòí³é â àäðåñíèêó."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[áåç çíà÷åííÿ]"
+
+#: lib/Turba.php:601
+msgid "_Browse"
+msgstr "Ïåðåãëÿä"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "Êîíòàêòè"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "Âèòåðòè"
+
+#: contact.php:91
+msgid "_Edit"
+msgstr "Ðåäàãóâàòè"
+
+#: lib/Turba.php:610
+msgid "_Import/Export"
+msgstr "²ìïîðò/Åêñïîðò"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "Ñïèñêè"
+
+#: lib/Turba.php:598
+msgid "_My Address Books"
+msgstr "Ìî¿ Àäðåñíèêè"
+
+#: lib/Turba.php:604
+msgid "_New Contact"
+msgstr "Íîâèé êîíòàêò"
+
+#: lib/Turba.php:615
+msgid "_Print"
+msgstr "Äðóê"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "Âèäàëèòè ç öüîãî ñïèñêó"
+
+#: lib/Turba.php:606
+msgid "_Search"
+msgstr "Ïîøóê"
+
+#: contact.php:88
+msgid "_View"
+msgstr "Ïåðåãëÿä"
+
+#: templates/browse/column_headers.inc:25
+msgid "ascending"
+msgstr "ïî çðîñòàííþ"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "ïî %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "ìíîþ"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "êîíòàêò"
+
+#: data.php:312 data.php:317 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:337
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:322
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:332
+msgid "contacts.vcf"
+msgstr "contacts.vcf"
+
+#: templates/browse/column_headers.inc:25
+msgid "descending"
+msgstr "ïî ñïàäàííþ"
+
+#: config/attributes.php.dist:433
+msgid "female"
+msgstr "æ³íî÷à"
+
+#: lib/Block/tree_menu.php:38
+#, php-format
+msgid "in %s"
+msgstr "â %s"
+
+#: config/attributes.php.dist:433
+msgid "male"
+msgstr "÷îëîâ³÷à"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "áåç ôîðìàòóâàííÿ"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "æîäåí"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "äî Ñïèñêó Êîíòàêò³â"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "äî ³íøîãî Àäðåñíèêà"
+
+#: data.php:103 templates/browse/column_headers.inc:14
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/zh_CN.po b/turba/po/zh_CN.po
new file mode 100644 (file)
index 0000000..0775af1
--- /dev/null
@@ -0,0 +1,1507 @@
+# Turba Simplified Chinese Translation
+# Copyright 2001 WangHengWen.
+# WangHengWen <whw@my169.com>, 2001.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 1.0\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2005-10-18 15:12+0200\n"
+"PO-Revision-Date: 2007-09-03 17:50+0800\n"
+"Last-Translator: Anna Chen <annachen2008@yahoo.com.cn>\n"
+"Language-Team: Chinese\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=GB2312\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Poedit-Bookmarks: -1,-1,-1,-1,-1,-1,-1,175,-1,-1\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "Ìí¼Ó IMSP µØÖ·²¾"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "ɾ³ý IMSP µØÖ·²¾"
+
+#: data.php:342
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "¡°%s¡±ÒÑ´æÔÚ£¬ÇÒδµ¼Èë¡£"
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "¡°%s¡±ÒѸüУ¬µ«±£´æËùÉÏ´«µÄÎļþʧ°Ü£º%s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "¡°%s¡±ÒѸüС£"
+
+#: lib/Views/Browse.php:191
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "¡°%s¡±Î´¸´ÖÆ£¬ÒòËüÊÇÁÐ±í¡£"
+
+#: lib/Views/Browse.php:189
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "¡°%s¡±Î´Òƶ¯£¬ÒòËüÊÇÁÐ±í¡£"
+
+#: config/prefs.php.dist:118
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"Firstname Lastname\"  (ÀýÈ磺John Doe)"
+
+#: config/prefs.php.dist:117
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"Lastname, Firstname\" (ÀýÈ磺Doe, John)"
+
+#: lib/Forms/AddContact.php:84
+#, php-format
+msgid "%s added."
+msgstr "%s ÒÑÌí¼Ó¡£"
+
+#: data.php:366
+#, php-format
+msgid "%s file successfully imported"
+msgstr "Òѳɹ¦µ¼Èë %s Îļþ"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr "%s ÖÁ %s/%s"
+
+#: lib/Turba.php:531
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s µÄµØÖ·²¾"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "ÐèÒªÖ§³Ö iFrames µÄä¯ÀÀÆ÷"
+
+#: view.php:52
+#, php-format
+msgid "Access denied to %s"
+msgstr "·ÃÎÊ %s ±»¾Ü"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "Ôö¼Ó"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "Ìí¼ÓÁªÏµÈË"
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Add address book"
+msgstr "Ìí¼ÓµØÖ·²¾"
+
+#: templates/prefs/columnselect.inc:239
+msgid "Add column"
+msgstr "Ìí¼ÓÁÐ"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "Ìí¼ÓÎļþ"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "Ìí¼Óµ½"
+
+#: lib/Driver.php:1223
+msgid "Adding contacts is not available."
+msgstr "Ìí¼ÓÁªÏµÈ˹¦Äܲ»¿ÉÓá£"
+
+#: templates/addressbooks.inc:95
+msgid "Address Book"
+msgstr "µØÖ·²¾"
+
+#: lib/Views/Browse.php:77 config/prefs.php.dist:106
+msgid "Address Book Listing"
+msgstr "µØÖ·²¾Áбí"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "µØÖ·²¾"
+
+#: data.php:322
+msgid "Address book successfully purged."
+msgstr "³É¹¦Çå³ýµØÖ·²¾¡£"
+
+#: templates/addressbooks.inc:71
+msgid "Address book to delete "
+msgstr "´ýɾ³ýµÄµØÖ·²¾"
+
+#: templates/prefs/addressbookselect.inc:169
+#: templates/prefs/addressbookselect.inc:171
+msgid "Address books that will not be displayed:"
+msgstr "½«ÒªÏÔʾµÄµØÖ·²¾£º"
+
+#: search.php:201 templates/browse/search.inc:48
+msgid "Advanced Search"
+msgstr "¸ß¼¶ËÑË÷"
+
+#: config/attributes.php.dist:64
+msgid "Alias"
+msgstr "±ðÃû"
+
+#: templates/browse/actions.inc:50 templates/list/alphaPager.inc:7
+#: templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "È«²¿"
+
+#: lib/api.php:655
+msgid "Already Exists"
+msgstr "ÒÑ´æÔÚ"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "ÄúÈ·¶¨ÒªÉ¾³ý %s Âð£¿"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected entries?"
+msgstr "ÄúÈ·¶¨ÒªÉ¾³ýËùÑ¡ÌõÄ¿Âð£¿"
+
+#: addressbook_perms.php:56
+msgid "Attempt to edit a non-existent share."
+msgstr "³¢ÊԱ༭²»´æÔڵĹ²ÏíÄÚÈÝ¡£"
+
+#: search.php:198 templates/browse/search.inc:47
+msgid "Basic Search"
+msgstr "»ù±¾ËÑË÷"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "°ó¶¨Ê§°Ü£º(%s) %s"
+
+#: config/attributes.php.dist:178
+msgid "Birthday"
+msgstr "ÉúÈÕ"
+
+#: contact.php:92 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "Ãû³ÆÎª¿Õ"
+
+#: templates/menu.inc:8
+msgid "Browse"
+msgstr "ä¯ÀÀ"
+
+#: config/attributes.php.dist:173
+msgid "Business Category"
+msgstr "ÉÌÒµÀà±ð"
+
+#: data.php:58
+msgid "CSV"
+msgstr "CSV"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "ÎÞ·¨½«×éÌí¼Óµ½×ÔÉí¡£"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "½« %s Ë³Ðò¸ü¸ÄΪ %s"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "Ñ¡ÖÐÈ«²¿/È«²¿²»Ñ¡"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "Ñ¡ÖÐÈ«²¿_A/È«²¿²»Ñ¡"
+
+#: templates/addressbooks.inc:52
+msgid "Choose a name"
+msgstr "Ñ¡ÔñÐÕÃû"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "Ñ¡ÔñµØÖ·²¾"
+
+#: templates/prefs/columnselect.inc:220 templates/prefs/columnselect.inc:222
+msgid "Choose an address book:"
+msgstr "Ñ¡ÔñµØÖ·²¾£º"
+
+#: templates/prefs/addressbookselect.inc:165
+msgid "Choose which address books to display, and in what order:"
+msgstr "Ñ¡ÔñÒªÏÔʾµÄµØÖ·²¾ÒÔ¼°ÏÔʾ˳Ðò£º"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "Ñ¡Ôñ´ýÓõĵØÖ·²¾¡£"
+
+#: templates/prefs/columnselect.inc:229
+msgid "Choose which columns to display and in what order:"
+msgstr "Ñ¡ÔñÒªÏÔʾµÄÁÐÒÔ¼°ÏÔʾ˳Ðò£º"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "¹Ø±Õ"
+
+#: templates/browse/header.inc:27
+msgid "Close Search"
+msgstr "¹Ø±ÕËÑË÷"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "ÁÐÑ¡Ïî"
+
+#: templates/prefs/columnselect.inc:233 templates/prefs/columnselect.inc:235
+msgid "Columns that will not be displayed:"
+msgstr "²»»áÏÔʾµÄÁУº"
+
+#: templates/data/import.inc:13 templates/data/export.inc:12
+msgid "Comma separated values"
+msgstr "¶ººÅ·Ö¸ô(CSV)"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "¶ººÅ·Ö¸ô(CSV)(Microsoft Outlook)"
+
+#: config/attributes.php.dist:76
+msgid "Company"
+msgstr "¹«Ë¾"
+
+#: config/attributes.php.dist:144
+msgid "Company Address"
+msgstr "¹«Ë¾µØÖ·"
+
+#: lib/api.php:366 lib/api.php:411 lib/api.php:461 lib/api.php:593
+#: lib/api.php:708 lib/api.php:795 lib/api.php:853 lib/api.php:936
+#: lib/api.php:1131 lib/api.php:1220
+#, php-format
+msgid "Connection failed: %s"
+msgstr "Á¬½Óʧ°Ü£º%s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "Á¬½Óʧ°Ü"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "ËÑË÷ÁªÏµÈË"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "ËùÏÔʾµÄÁªÏµÈË£º"
+
+#: lib/Views/Browse.php:350
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "ÁбíÖеÄÁªÏµÈË£º%s"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "¸´ÖÆ"
+
+#: lib/VBook.php:284 lib/VBook.php:342
+#, php-format
+msgid "Could not find the virtual address book \"%s\""
+msgstr "ÎÞ·¨ÕÒµ½ÐéÄâµØÖ·²¾¡°%s¡±"
+
+#: search.php:96
+#, php-format
+msgid "Could not update the virtual address book \"%s\""
+msgstr "ÎÞ·¨¸üÐÂÐéÄâµØÖ·²¾¡°%s¡±"
+
+#: templates/addressbooks.inc:61
+msgid "Create"
+msgstr "´´½¨"
+
+#: templates/addressbooks.inc:48
+msgid "Create Address Book"
+msgstr "´´½¨µØÖ·²¾"
+
+#: lib/ListView.php:445
+msgid "Create a new Contact List in:"
+msgstr "´´½¨ÐµÄÁªÏµÈËÁÐ±í£¬Î»Öãº"
+
+#: lib/Views/Contact.php:58
+msgid "Created"
+msgstr "ÒÑ´´½¨"
+
+#: contact.php:81
+msgid "De_lete"
+msgstr "ɾ³ý_L"
+
+#: templates/addressbooks.inc:85 templates/browse/actions.inc:3
+#: templates/browse/header.inc:20 lib/Views/DeleteContact.php:58
+msgid "Delete"
+msgstr "ɾ³ý"
+
+#: lib/Views/DeleteContact.php:28
+#, php-format
+msgid "Delete %s"
+msgstr "ɾ³ý %s"
+
+#: templates/addressbooks.inc:67
+msgid "Delete Address Book"
+msgstr "´´½¨µØÖ·²¾"
+
+#: lib/Driver/ldap.php:285
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "ɾ³ýʧ°Ü£º(%s) %s"
+
+#: templates/browse/header.inc:16
+#, php-format
+msgid "Delete virtual address book \"%s\""
+msgstr "ɾ³ýÐéÄâµØÖ·²¾¡°%s¡±"
+
+#: lib/Driver.php:1231
+msgid "Deleting contacts is not available."
+msgstr "ɾ³ýÁªÏµÈ˹¦Äܲ»¿ÉÓá£"
+
+#: delete.php:38
+msgid "Deletion failed"
+msgstr "ɾ³ýʧ°Ü"
+
+#: config/attributes.php.dist:213
+msgid "Department"
+msgstr "²¿ÃÅ"
+
+#: templates/addressbooks.inc:124
+msgid "Description"
+msgstr "ÃèÊö"
+
+#: templates/browse/search.inc:146
+msgid "Directory"
+msgstr "Ŀ¼"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "ÏÔʾ"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "ÏÔʾѡÏî"
+
+#: lib/Object.php:334
+msgid "Download"
+msgstr "ÏÂÔØ"
+
+#: templates/browse/row.inc:13
+msgid "Download vCard"
+msgstr "ÏÂÔØ vCard"
+
+#: templates/addressbooks.inc:111 templates/browse/row.inc:21
+#: templates/browse/column_headers.inc:10 templates/browse/actions.inc:6
+#: templates/browse/header.inc:17
+msgid "Edit"
+msgstr "±à¼­"
+
+#: edit.php:97
+#, php-format
+msgid "Edit \"%s\""
+msgstr "±à¼­¡°%s¡±"
+
+#: lib/Views/EditContact.php:35
+#, php-format
+msgid "Edit %s"
+msgstr "±à¼­ %s"
+
+#: templates/addressbooks.inc:90
+msgid "Edit Address Books"
+msgstr "±à¼­µØÖ·²¾"
+
+#: addressbook_perms.php:246 templates/browse/header.inc:19
+msgid "Edit Permissions"
+msgstr "±à¼­È¨ÏÞ"
+
+#: addressbook_perms.php:248
+#, php-format
+msgid "Edit Permissions for %s"
+msgstr "±à¼­ %s È¨ÏÞ"
+
+#: templates/browse/vbook_header.inc:2
+msgid "Edit Virtual Address Book"
+msgstr "±à¼­ÐéÄâµØÖ·²¾"
+
+#: templates/browse/header.inc:15
+#, php-format
+msgid "Edit permissions for virtual address book \"%s\""
+msgstr "±à¼­ÐéÄâµØÖ·²¾¡°%s¡±µÄȨÏÞ"
+
+#: templates/browse/header.inc:14
+#, php-format
+msgid "Edit virtual address book definition of \"%s\""
+msgstr "±à¼­ÐéÄâµØÖ·²¾¡°%s¡±µÄ¶¨Òå"
+
+#: config/attributes.php.dist:58
+msgid "Email"
+msgstr "µç×ÓÓʼþ"
+
+#: lib/Views/Browse.php:267 lib/Views/Browse.php:315
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "½« %d ÁªÏµÈËÌí¼Óµ½Áбíʱ³ö´í¡£"
+
+#: lib/Views/Browse.php:269 lib/Views/Browse.php:317
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "½« %d ÇëÇóµÄ %d ÁªÏµÈËÌí¼Óµ½Áбíʱ³ö´í¡£"
+
+#: lib/Views/Browse.php:137
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "ɾ³ý %d ÁªÏµÈËʱ³ö´í¡£"
+
+#: lib/Views/Browse.php:139
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "ɾ³ý %d ÇëÇóµÄ %d ÁªÏµÈËʱ³ö´í¡£"
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "´ÓÁбíÖÐɾ³ý %d ÁªÏµÈËʱ³ö´í¡£"
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "´ÓÁбíÖÐɾ³ý %d ÇëÇóµÄ %d ÁªÏµÈËʱ³ö´í¡£"
+
+#: lib/api.php:467
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "ËÑË÷µØÖ·²¾Ê±³ö´í£º%s"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:41
+msgid "Export"
+msgstr "µ¼³ö"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "µ¼³öµØÖ·²¾"
+
+#: templates/data/export.inc:21
+msgid "Export only the selected contacts."
+msgstr "½öµ¼³öËùÑ¡ÁªÏµÈË¡£"
+
+#: templates/data/export.inc:27
+msgid "Export the following address book completely."
+msgstr "ÍêÈ«µ¼³öÏÂÁеØÖ·²¾¡£"
+
+#: data.php:143 data.php:237 data.php:311 add.php:40 search.php:65
+#: lib/Views/Browse.php:83 lib/Views/Browse.php:154 lib/Views/Browse.php:181
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "·ÃÎʵØÖ·²¾Ê±³ö´í£º%s"
+
+#: lib/Views/Browse.php:209
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "½« %s Ìí¼Óµ½ %s Ê±³ö´í£º%s"
+
+#: lib/Views/Browse.php:356
+msgid "Failed to browse list"
+msgstr "ä¯ÀÀÁбíʧ°Ü"
+
+#: lib/Views/Browse.php:387
+msgid "Failed to browse the directory"
+msgstr "ä¯ÀÀĿ¼ʧ°Ü£º%s"
+
+#: lib/Driver/ldap.php:318
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr "¸ü¸ÄÃû³ÆÊ§°Ü£º(%s) %s£»¾É DN = %s¡¢Ð DN = %s¡¢Root = %s"
+
+#: search.php:129
+#, php-format
+msgid "Failed to delete the virtual address book. %s"
+msgstr "ɾ³ýÐéÄâµØÖ·²¾Ê§°Ü¡£%s"
+
+#: lib/Views/Browse.php:185
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "ѰÕÒ´ýÌí¼ÓµÄ¶ÔÏóʧ°Ü£º%s"
+
+#: search.php:192
+msgid "Failed to search the address book"
+msgstr "ËÑË÷µØÖ·²¾Ê§°Ü£º%s"
+
+#: data.php:158
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "ËÑË÷Ŀ¼ʧ°Ü:£º%s"
+
+#: config/attributes.php.dist:167
+msgid "Fax"
+msgstr "´«Õæ"
+
+#: lib/Forms/Contact.php:40
+msgid "Files"
+msgstr "Îļþ"
+
+#: templates/browse/search.inc:96
+msgid "Find"
+msgstr "²éÕÒ"
+
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:155
+msgid "Finish"
+msgstr "Íê³É"
+
+#: config/attributes.php.dist:48
+msgid "First Name"
+msgstr "Ãû×Ö"
+
+#: config/attributes.php.dist:202
+msgid "Freebusy URL"
+msgstr "Freebusy URL"
+
+#: templates/browse/search.inc:109
+msgid "From"
+msgstr "·¢¼þÈË"
+
+#: config/sources.php.dist:684
+msgid "Global Address Book"
+msgstr "È«¾ÖµØÖ·²¾"
+
+#: templates/browse/row.inc:39
+msgid "Group"
+msgstr "×é"
+
+#: config/attributes.php.dist:82
+msgid "Home Address"
+msgstr "¼ÒÍ¥µØÖ·"
+
+#: config/attributes.php.dist:93
+msgid "Home City"
+msgstr "¼Òͥסַ ³ÇÊÐ"
+
+#: config/attributes.php.dist:108
+msgid "Home Country"
+msgstr "סլµØÖ· ¹ú¼Ò/µØÇø"
+
+#: config/attributes.php.dist:150
+msgid "Home Phone"
+msgstr "¼ÒÍ¥µç»°"
+
+#: config/attributes.php.dist:103
+msgid "Home Postal Code"
+msgstr "סլµØÖ· ÓÊÕþ±àÂë"
+
+#: config/attributes.php.dist:98
+msgid "Home State/Province"
+msgstr "סլµØÖ· Ê¡·Ý"
+
+#: config/attributes.php.dist:88
+msgid "Home Street Address"
+msgstr "סլµØÖ· ½ÖµÀµØÖ·"
+
+#: config/sources.php.dist:575
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "µ¼ÈëµØÖ·²¾£¬²½Öè %d"
+
+#: data.php:384
+msgid "Import/Export Address Books"
+msgstr "µ¼Èë/µ¼³öµØÖ·²¾"
+
+#: config/attributes.php.dist:228
+msgid "Initials"
+msgstr "Ê××Öĸ"
+
+#: lib/api.php:703 lib/api.php:790
+msgid "Invalid ID"
+msgstr "ID ÎÞЧ "
+
+#: lib/api.php:278 lib/api.php:456 lib/api.php:588 lib/api.php:699
+#: lib/api.php:786 lib/api.php:843 lib/api.php:1203
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "ÎÞЧµÄµØÖ·²¾£º%s"
+
+#: lib/api.php:1207 lib/api.php:1281 lib/api.php:1337
+msgid "Invalid email"
+msgstr "µç×ÓÓʼþÎÞЧ"
+
+#: lib/api.php:1215
+msgid "Invalid entry"
+msgstr "ÌõÄ¿ÎÞЧ"
+
+#: lib/Driver/ldap.php:281
+msgid "Invalid key specified."
+msgstr "ËùÖ¸¶¨µÄ¼üÖµÎÞЧ¡£"
+
+#: lib/api.php:1211
+msgid "Invalid name"
+msgstr "Ãû³ÆÎÞЧ"
+
+#: lib/api.php:847
+msgid "Invalid objectId"
+msgstr "¶ÔÏó ID ÎÞЧ"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr "ÐèÒª LDAP Ö§³Ö£¬µ« LDAP Î´°²×°»òδ¼ÓÔØ¡£"
+
+#: lib/Views/Contact.php:64
+msgid "Last Modified"
+msgstr "ÉÏ´ÎÐÞ¸Ä"
+
+#: config/attributes.php.dist:53
+msgid "Last Name"
+msgstr "ÐÕÊÏ"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "Áбí"
+
+#: templates/browse/search.inc:103
+msgid "Matching"
+msgstr "Æ¥Åä"
+
+#: lib/api.php:253
+msgid "Maximum Number of Contacts"
+msgstr "ÁªÏµÈË×î´óÊýÁ¿"
+
+#: config/prefs.php.dist:88
+msgid "Maximum number of pages"
+msgstr "Ò³Ãæ×î´óÊý"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "²Ëµ¥Áбí"
+
+#: lib/Driver/ldap.php:311
+msgid "Missing DN in LDAP source configuration."
+msgstr "LDAP Ô´ÅäÖÃÖжªÊ§ DN¡£"
+
+#: config/attributes.php.dist:162
+msgid "Mobile Phone"
+msgstr "Ðж¯µç»°"
+
+#: lib/Driver/ldap.php:340 lib/Driver/ldap.php:356
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "ÐÞ¸Äʧ°Ü£º(%s) %s"
+
+#: templates/browse/header.inc:28
+msgid "More Options..."
+msgstr "¸ü¶àÑ¡Ïî..."
+
+#: lib/api.php:1322
+msgid "More than 1 entry found"
+msgstr "ÕÒµ½¶à¸öÌõÄ¿"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "ÒÆ¶¯"
+
+#: templates/prefs/columnselect.inc:250
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move left"
+msgstr "×óÒÆ"
+
+#: templates/prefs/columnselect.inc:252
+#: templates/prefs/addressbookselect.inc:188
+msgid "Move right"
+msgstr "ÓÒÒÆ"
+
+#: data.php:61 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry µØÖ·²¾"
+
+#: lib/api.php:1239
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr "¶àÈËʹÓõØÖ·[%s]£¬µ«ÎÞÈËʹÓÃÒÑ´æÔÚµÄÐÕÃû [%s]"
+
+#: config/sources.php.dist:143
+msgid "My Address Book"
+msgstr "ÎҵĵØÖ·²¾"
+
+#: addressbooks.php:130
+msgid "My Address Books"
+msgstr "ÎҵĵØÖ·²¾"
+
+#: templates/addressbooks.inc:116 config/attributes.php.dist:42
+msgid "Name"
+msgstr "Ãû³Æ"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "ÐÕÃû¸ñʽ"
+
+#: add.php:68 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "н¨ÁªÏµÈË"
+
+#: templates/data/import.inc:45 lib/Forms/EditContact.php:110
+#: lib/Forms/EditContact.php:117 lib/Forms/EditContact.php:170
+msgid "Next"
+msgstr "ÏÂÒ»²½"
+
+#: config/attributes.php.dist:218
+msgid "Nickname"
+msgstr "êdzÆ"
+
+#: lib/api.php:1325 lib/api.php:1374
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "δÕÒµ½ %s ÏîÄ¿ %s"
+
+#: data.php:50
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "µ±Ç°ÎÞ¿ÉÓõĵØÖ·²¾¡£¡°µ¼È롱ºÍ¡°µ¼³ö¡±Ñ¡ÏîÒѽûÓá£"
+
+#: search.php:41
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "µ±Ç°ÎÞ¿ÉÓõĵØÖ·²¾¡£ËÑË÷¹¦ÄÜÒѽûÓá£"
+
+#: lib/api.php:1290
+msgid "No address books found."
+msgstr "δÕÒµ½µØÖ·²¾¡£"
+
+#: minisearch.php:78
+msgid "No contacts found"
+msgstr "δÕÒµ½ÁªÏµÈË"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "ÎÞÁªÏµÈËÆ¥Å䵱ǰ¹ýÂËÆ÷¡£"
+
+#: lib/ListView.php:248
+msgid "No matching contacts"
+msgstr "ÎÞÆ¥ÅäµÄÁªÏµÈË"
+
+#: lib/Driver/favourites.php:121
+msgid "No source for favourite recipients exists."
+msgstr "ϲ°®µÄÊÕ¼þÈËÎÞÀ´Ô´¡£"
+
+#: lib/api.php:614 lib/api.php:879
+msgid "No vCard data was found."
+msgstr "δÕÒµ½ vCard Êý¾Ý¡£"
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "ÎÞ"
+
+#: lib/Views/EditContact.php:33 lib/Views/Contact.php:33
+#: lib/Views/DeleteContact.php:26
+msgid "Not Found"
+msgstr "δÕÒµ½"
+
+#: edit.php:50 deletefile.php:20
+msgid "Not found"
+msgstr "δÕÒµ½"
+
+#: config/attributes.php.dist:184
+msgid "Notes"
+msgstr "±¸×¢"
+
+#: config/prefs.php.dist:96
+msgid "Number of items per page"
+msgstr "ÿҳÏîÄ¿Êý"
+
+#: lib/api.php:719 lib/api.php:859
+msgid "Object not found"
+msgstr "δÕÒµ½¶ÔÏó"
+
+#: config/attributes.php.dist:223
+msgid "Office"
+msgstr "°ì¹«ÊÒ"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"±£´æ´ËÑ¡ÏîÒ³ÃæÖ®ºó£¬Ôò»áÓÀ¾Ãɾ³ýµØÖ·²¾¡£Èç¹û²»Ï£Íû³öÏÖÕâÖÖÇé¿ö£¬Ôò±ØÐ뽫ѡÔñ"
+"¸ü¸ÄΪ¡°ÎÞ¡±¡£"
+
+#: lib/api.php:887
+msgid "Only one vcard supported."
+msgstr "½öÖ§³ÖÒ»ÖÖ vcard¡£"
+
+#: addressbook_perms.php:68
+msgid ""
+"Only the owner or system administrator may change ownership or owner "
+"permissions for a share"
+msgstr "½öÓÐËùÓÐÕß»òϵͳ¹ÜÀíÔ±¿ÉÒÔ¸ü¸Ä¹²ÏíÄÚÈݵÄËùÓÐȨ»òËùÓÐÕßȨÏÞ"
+
+#: config/attributes.php.dist:190
+msgid "PGP Public Key"
+msgstr "PGP ¹«Ô¿"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "ÓÀ¾Ãɾ³ý´ËÁªÏµÈË£¿"
+
+#: deletefile.php:40 lib/Driver.php:574 lib/api.php:597 lib/api.php:712
+#: lib/api.php:799 lib/api.php:1059 lib/api.php:1224 lib/Driver/sql.php:488
+msgid "Permission denied"
+msgstr "ȨÏÞ²»×ã"
+
+#: templates/addressbooks.inc:108
+msgid "Permissions"
+msgstr "ȨÏÞ"
+
+#: data.php:62 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine µØÖ·²¾"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "ÇëÃüÃûÐÂÁªÏµÈËÁÐ±í£º"
+
+#: lib/Forms/EditContact.php:113 lib/Forms/EditContact.php:116
+#: lib/Forms/EditContact.php:162
+msgid "Previous"
+msgstr "ÉÏÒ»²½"
+
+#: lib/Driver/ldap.php:162
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "²éѯʧ°Ü£º(%s) %s"
+
+#: lib/Driver/ldap.php:206 lib/Driver/ldap.php:214 lib/Driver/ldap.php:450
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "¶Áȡʧ°Ü£º(%s) %s"
+
+#: lib/Driver.php:1215
+msgid "Reading contacts is not available."
+msgstr "¶ÁÈ¡ÁªÏµÈ˹¦Äܲ»¿ÉÓá£"
+
+#: templates/prefs/addressbookselect.inc:177
+msgid "Remove address book"
+msgstr "ɾ³ýµØÖ·²¾"
+
+#: templates/prefs/columnselect.inc:241
+msgid "Remove column"
+msgstr "ɾ³ýÁÐ"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "´ÓÁбíÖÐɾ³ý"
+
+#: lib/Driver.php:1248
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr "µ±Ç°µØÖ·²¾´æ´¢Çý¶¯³ÌÐò²»Ö§³Öɾ³ýÓû§Êý¾Ý¹¦ÄÜ¡£"
+
+#: templates/data/import.inc:21
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"ÊÇ·ñʹÓõ¼ÈëµÄµØÖ·²¾Ìæ»»ÏÖÓеĵØÖ·²¾£¿<strong>¾¯¸æ£º´Ë²Ù×÷»áɾ³ýÏÖÓеØÖ·²¾ÖÐ"
+"µÄËùÓÐÌõÄ¿¡£</strong>"
+
+#: lib/Driver.php:462
+msgid "Requested object not found."
+msgstr "δÕÒµ½ÇëÇóµÄ¶ÔÏó¡£"
+
+#: templates/browse/search.inc:141
+msgid "Reset to Defaults"
+msgstr "ÖØÖÃΪĬÈÏÏî"
+
+#: config/attributes.php.dist:196
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME ¹«Ô¿Ö¤Êé"
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS Ê§°Ü£º(%s) %s"
+
+#: config/attributes.php.dist:233
+msgid "Salutation"
+msgstr "³ÆºôÓï"
+
+#: templates/addressbooks.inc:133 templates/browse/search.inc:122
+#: templates/browse/search.inc:140 lib/Forms/EditContact.php:26
+msgid "Save"
+msgstr "±£´æ"
+
+#: templates/browse/search_vbook.inc:20
+msgid "Save search as a virtual addressbook?"
+msgstr "½«ËÑË÷Áí´æÎªµØÖ·²¾£¿"
+
+#: lib/Driver.php:1239
+msgid "Saving contacts is not available."
+msgstr "±£´æÁªÏµÈ˹¦Äܲ»¿ÉÓá£"
+
+#: templates/browse/search.inc:122 templates/browse/search.inc:140
+#: templates/browse/header.inc:23 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:72 config/prefs.php.dist:107
+msgid "Search"
+msgstr "ËÑË÷"
+
+#: lib/api.php:1136
+msgid "Search failed"
+msgstr "ËÑË÷ʧ°Ü"
+
+#: lib/api.php:1229 lib/api.php:1235 lib/api.php:1244 lib/api.php:1257
+#, php-format
+msgid "Search failed: %s"
+msgstr "ËÑË÷ʧ°Ü£º%s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "ËÑË÷£º"
+
+#: lib/Driver.php:1207
+msgid "Searching is not available."
+msgstr "ËÑË÷¹¦Äܲ»¿ÉÓá£"
+
+#: templates/block/minisearch.inc:28
+msgid "Searching..."
+msgstr "ËÑË÷ÖÐ..."
+
+#: templates/addressbooks.inc:75
+msgid "Select an address book to delete"
+msgstr "Ñ¡ÔñҪɾ³ýµÄµØÖ·²¾"
+
+#: templates/addressbooks.inc:99
+msgid "Select an address book to edit"
+msgstr "Ñ¡ÔñÒª±à¼­µÄµØÖ·²¾"
+
+#: templates/browse/row.inc:30
+msgid "Select contact"
+msgstr "Ñ¡ÔñÁªÏµÈË"
+
+#: templates/data/export.inc:32
+msgid "Select the address book to export from:"
+msgstr "Ñ¡Ôñ´ýµ¼³öµÄµØÖ·²¾£º"
+
+#: templates/data/import.inc:26
+msgid "Select the address book to import to:"
+msgstr "Ñ¡Ôñ´ýµ¼ÈëµÄµØÖ·²¾£º"
+
+#: templates/data/import.inc:35
+msgid "Select the charset of the source file:"
+msgstr "Ñ¡ÔñÔ´Îļþ×Ö·û¼¯£º"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "Ñ¡Ôñµ¼³ö¸ñʽ£º"
+
+#: templates/data/import.inc:43
+msgid "Select the file to import:"
+msgstr "Ñ¡Ôñ´ýµ¼³öµÄÎļþ£º"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "Ñ¡ÔñÔ´Îļþ¸ñʽ£º"
+
+#: config/prefs.php.dist:116
+msgid "Select the format used to display names:"
+msgstr "Ñ¡ÔñÓÃÓÚÏÔʾÐÕÃûµÄ¸ñʽ£º"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default, sort options, and paging options."
+msgstr "Ñ¡ÔñĬÈϵÄÏÔʾÊÓͼ¡¢ÅÅÐòÑ¡ÏîºÍÒ³ÃæÑ¡Ïî¡£"
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "Ñ¡ÔñµØÖ·²¾ÖÐÏÔʾÄÚÈݵÄ×ֶΡ£"
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "Ñ¡ÔñÓÃÓÚÏÔʾÐÕÃûµÄ¸ñʽ£º"
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "ËùÑ¡µØÖ·²¾¡°%s¡±¡£"
+
+#: templates/browse/actions.inc:48
+#, php-format
+msgid "Show %s"
+msgstr "ÏÔʾ %s"
+
+#: templates/browse/actions.inc:50
+msgid "Show All"
+msgstr "ÏÔʾȫ²¿"
+
+#: templates/browse/actions.inc:49
+msgid "Show Contacts"
+msgstr "ÏÔʾÁªÏµÈË"
+
+#: templates/browse/actions.inc:48
+msgid "Show Lists"
+msgstr "ÏÔʾÁбí"
+
+#: lib/ListView.php:317 lib/ListView.php:323
+msgid "Sort Direction"
+msgstr "ÅÅÐò·½Ïò"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "°´ %s ÅÅÐò"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "½ö°´ %s ÅÅÐò"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "°´ %s ÅÅÐò£¬È»ºó°´ %s ÅÅÐò"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "À´Ô´£º"
+
+#: lib/api.php:246
+msgid "Sources"
+msgstr "À´Ô´"
+
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:313
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "³É¹¦½« %s Ìí¼Óµ½ %s¡£"
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "³É¹¦½« %s Ìí¼Óµ½ %s"
+
+#: search.php:99
+#, php-format
+msgid "Successfully changed virtual address book \"%s\""
+msgstr "³É¹¦¸ü¸ÄÐéÄâµØÖ·²¾¡°%s¡±"
+
+#: lib/Views/Browse.php:299
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "³É¹¦´´½¨ÁªÏµÈËÁÐ±í¡°%s¡±¡£"
+
+#: search.php:167
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "³É¹¦´´½¨ÐéÄâµØÖ·²¾¡°%s¡±"
+
+#: lib/Views/Browse.php:135
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "³É¹¦É¾³ý %d ÁªÏµÈË¡£"
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "´ÓÁбíÖгɹ¦É¾³ý %d ÁªÏµÈË¡£"
+
+#: data.php:59
+msgid "TSV"
+msgstr "TSV"
+
+#: templates/data/import.inc:14 templates/data/export.inc:14
+msgid "Tab separated values"
+msgstr "Tab ·Ö¸ô(TSV) "
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "Ä¿±êµØÖ·²¾"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "Ä¿±êÁªÏµÈËÁбí"
+
+#: data.php:313
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "%s Îļþ²»°üº¬ÈκÎÁªÏµÈË¡£"
+
+#: view.php:15
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "ÈôÒªÆôÓø½¼þÉÏ´«¹¦ÄÜ£¬ÔòÐèÒªÅäÖàVFS ºó¶Ë¡£"
+
+#: lib/Driver.php:1185
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "´ËµØÖ·²¾¡°%s¡±²»´æÔÚ¡£"
+
+#: addressbooks.php:52
+#, php-format
+msgid "The address book \"%s\" was created successfully."
+msgstr "³É¹¦´´½¨´ËµØÖ·²¾¡°%s¡±¡£"
+
+#: addressbooks.php:73
+#, php-format
+msgid "The address book \"%s\" was removed successfully."
+msgstr "³É¹¦É¾³ý´ËµØÖ·²¾¡°%s¡±¡£"
+
+#: addressbooks.php:94
+#, php-format
+msgid "The address book \"%s\" was successfully updated."
+msgstr "³É¹¦¸üд˵ØÖ·²¾¡°%s¡±¡£"
+
+#: data.php:320
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "ÎÞ·¨Çå³ý´ËµØÖ·²¾£º%s"
+
+#: vcard.php:17 contact.php:21 view.php:26
+msgid "The contact you requested does not exist."
+msgstr "ËùÇëÇóµÄÁªÏµÈ˲»´æÔÚ¡£"
+
+#: deletefile.php:50
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "ÒÑɾ³ýÎļþ¡°%s¡±¡£"
+
+#: data.php:293
+msgid "The import can be finished despite the warnings."
+msgstr "ºöÂÔ¾¯¸æ£¬Íê³Éµ¼Èë¡£"
+
+#: lib/Views/EditContact.php:43 lib/Views/Contact.php:43
+#: lib/Views/DeleteContact.php:36
+msgid "The requested contact was not found."
+msgstr "δÕÒµ½ÇëÇóµÄÁªÏµÈË¡£"
+
+#: lib/Views/Browse.php:79
+msgid "There are no browseable address books."
+msgstr "Î޿ɹ©ä¯ÀÀµÄµØÖ·²¾¡£"
+
+#: add.php:30
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"Î޿ɹ©Ð´ÈëµÄµØÖ·²¾¡£ÎÞÒ»µØÖ·²¾ÔÊÐíÄúÌí¼ÓÐÂÌõÄ¿¡£Èç¹ûÄúÈÏΪÕâÖÖÇé¿ö²»Õý³££¬Çë"
+"ÁªÏµÏµÍ³¹ÜÀíÔ±¡£"
+
+#: search.php:163
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "´´½¨ÐéÄâµØÖ·²¾Ê±³ö´í£º%s"
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr "Ìí¼ÓÁªÏµÈËʱ³ö´í¡£ÇëÁªÏµÏµÍ³¹ÜÀíԱѰÇóЭÖú¡£"
+
+#: lib/Views/Browse.php:322
+msgid "There was an error creating a new list."
+msgstr "´´½¨ÐÂÁбíʱ³ö´í¡£"
+
+#: addressbooks.php:39 addressbooks.php:42
+#, php-format
+msgid "There was an error creating this address book: %s"
+msgstr "´´½¨´ËµØÖ·²¾Ê±³ö´í£º%s"
+
+#: lib/Views/Browse.php:217
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "´ÓÔ´µØÖ·²¾ÖÐɾ³ý¡°%s¡±Ê±³ö´í¡£"
+
+#: delete.php:37
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "ɾ³ý´ËÁªÏµÈËʱ³ö´í£º%s"
+
+#: lib/Views/Browse.php:362
+msgid "There was an error displaying the list"
+msgstr "ÏÔʾÁбíʱ³ö´í"
+
+#: data.php:352
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "µ¼ÈëÊý¾Ýʱ³ö´í£º%s"
+
+#: lib/api.php:610 lib/api.php:874
+msgid "There was an error importing the iCalendar data."
+msgstr "µ¼Èë iCalendar Êý¾Ýʱ³ö´í¡£"
+
+#: lib/api.php:199
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "ɾ³ý %s µØÖ·²¾Ê±³ö´í"
+
+#: addressbooks.php:60 addressbooks.php:65 addressbooks.php:71
+#, php-format
+msgid "There was an error removing this address book: %s"
+msgstr "ɾ³ý´ËµØÖ·²¾Ê±³ö´í£º%s"
+
+#: addressbooks.php:92
+#, php-format
+msgid "There was an error updating this address book: %s"
+msgstr "¸üд˵ØÖ·²¾Ê±³ö´í£º%s"
+
+#: data.php:188
+msgid "There were no addresses to export."
+msgstr "ÎÞ´ýµ¼ÈëµÄµØÖ·¡£"
+
+#: templates/prefs/addressbookselect.inc:180
+#: templates/prefs/addressbookselect.inc:182
+msgid "These address books will display in this order:"
+msgstr "ÕâЩµØÖ·²¾½«ÒÔ´Ë˳ÐòÏÔʾ£º"
+
+#: templates/prefs/columnselect.inc:244 templates/prefs/columnselect.inc:246
+msgid "These columns will display in this order:"
+msgstr "ÕâЩµØÁн«ÒÔ´Ë˳ÐòÏÔʾ£º"
+
+#: data.php:278
+msgid "This file format is not supported."
+msgstr "²»Ö§³Ö´ËÎļþ¸ñʽ¡£"
+
+#: lib/api.php:1248 lib/api.php:1261
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "´ËÈËÒÑÔÚÄúµÄµØÖ·²¾ÖУ¬ÌõĿΪ %s ¡£"
+
+#: config/prefs.php.dist:129
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "´ËΪÌí¼Ó»òµ¼ÈëÁªÏµÈËʱµÄĬÈϵØÖ·²¾¡£"
+
+#: config/attributes.php.dist:70
+msgid "Title"
+msgstr "±êÌâ"
+
+#: lib/Turba.php:516
+#, php-format
+msgid "Unable to create new share. Missing source type."
+msgstr "ÎÞ·¨´´½¨ÐµĹ²ÏíÎļþ¼Ð¡£¶ªÊ§Ô´ÀàÐÍ¡£"
+
+#: lib/Driver.php:1107
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "ÎÞ·¨¼ÓÔØ %s ¶¨Òå¡£"
+
+#: lib/Driver/kolab.php:244
+msgid "Unable to search."
+msgstr "ÎÞ·¨ËÑË÷¡£"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditContact.php:110
+#: lib/Forms/EditContact.php:113 lib/Forms/EditContact.php:116
+#: lib/Forms/EditContact.php:164
+msgid "Undo Changes"
+msgstr "È¡Ïû¸ü¸Ä"
+
+#: lib/api.php:643 lib/api.php:744 lib/api.php:892
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "²»ÊÜÖ§³ÖµÄÄÚÈÝÀàÐÍ£º%s"
+
+#: addressbook_perms.php:239
+#, php-format
+msgid "Updated \"%s\"."
+msgstr "ÒѸüС°%s¡±¡£"
+
+#: minisearch.php:73
+msgid "View Contact"
+msgstr "²é¿´ÁªÏµÈË"
+
+#: config/prefs.php.dist:105
+msgid "View to display by default:"
+msgstr "ĬÈÏ·½Ê½ÏÔʾÊÓͼ£º"
+
+#: templates/browse/search_vbook.inc:15 lib/Block/tree_menu.php:51
+msgid "Virtual Address Books"
+msgstr "ÐéÄâµØÖ·²¾"
+
+#: search.php:132
+#, php-format
+msgid "Virtual address book \"%s\" deleted."
+msgstr "ÒÑɾ³ýÐéÄâµØÖ·²¾¡°%s¡±¡£"
+
+#: templates/browse/search_vbook.inc:37
+msgid "Virtual address book description:"
+msgstr "ÐéÄâµØÖ·²¾ÃèÊö£º"
+
+#: templates/browse/search_vbook.inc:29
+msgid "Virtual address book name:"
+msgstr "ÐéÄâµØÖ·²¾Ãû³Æ£º"
+
+#: config/attributes.php.dist:208
+msgid "Website URL"
+msgstr "ÍøÕ¾ URL"
+
+#: config/attributes.php.dist:113
+msgid "Work Address"
+msgstr "¹¤×÷µØÖ·"
+
+#: config/attributes.php.dist:124
+msgid "Work City"
+msgstr "¹¤×÷³ÇÊÐ"
+
+#: config/attributes.php.dist:139
+msgid "Work Country"
+msgstr "¹¤×÷µØÖ· ¹ú¼Ò/µØÇø"
+
+#: config/attributes.php.dist:156
+msgid "Work Phone"
+msgstr "¹¤×÷µç»°"
+
+#: config/attributes.php.dist:134
+msgid "Work Postal Code"
+msgstr "¹¤×÷µØÖ· ÓÊÕþ±àÂë"
+
+#: config/attributes.php.dist:129
+msgid "Work State/Province"
+msgstr "¹¤×÷µØÖ· Ê¡·Ý"
+
+#: config/attributes.php.dist:119
+msgid "Work Street Address"
+msgstr "¹¤×÷µØÖ· ½ÖµÀµØÖ·"
+
+#: data.php:246 add.php:46 lib/Views/Browse.php:157 lib/Views/Browse.php:278
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "²»ÔÊÐí´´½¨µÄÁªÏµÈ˶àÓÚ %d Î»(ÔÚ¡°%s¡± ÖÐ)¡£"
+
+#: lib/Driver/vbook.php:116
+msgid "You cannot add an entry to a virtual address book."
+msgstr "ÄúÎÞ·¨½«ÌõÄ¿Ìí¼Óµ½ÐéÄâµØÖ·²¾ÖС£"
+
+#: lib/Driver/vbook.php:100
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "ÄúÎÞ·¨½«ÐÂÁªÏµÈËÌí¼Óµ½ÐéÄâµØÖ·²¾ÖÐ"
+
+#: lib/Driver/vbook.php:108
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "ÄúÎÞ·¨´ÓÐéÄâµØÖ·²¾ÖÐɾ³ýÁªÏµÈË"
+
+#: edit.php:72 view.php:36 lib/Views/EditContact.php:49
+#: lib/Views/DeleteContact.php:42
+msgid "You do not have permission to view this contact."
+msgstr "Äú²»¾ßÓв鿴´ËÁªÏµÈ˵ÄȨÏÞ¡£"
+
+#: vcard.php:35
+msgid "You do not have permission to view this object."
+msgstr "Äú²»¾ßÓв鿴´Ë¶ÔÏóµÄȨÏÞ¡£"
+
+#: lib/Turba.php:606
+msgid "You do not have permissions to delete this source."
+msgstr "Äú²»¾ßÓÐɾ³ý´ËÀ´Ô´µÄȨÏÞ¡£"
+
+#: search.php:149
+msgid "You must provide a name for virtual address books."
+msgstr "ÄúÐèÒªÌṩÐéÄâµØÖ·²¾Ãû³Æ¡£"
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "Äú±ØÐëÑ¡ÔñÄ¿±êµØÖ·²¾¡£"
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target list."
+msgstr "Äú±ØÐëÑ¡ÔñÄ¿±êÁÐ±í¡£"
+
+#: edit.php:29
+msgid "You must select at least one contact first."
+msgstr "Äú±ØÐëÏÈÑ¡ÔñÖÁÉÙһλÁªÏµÈË¡£"
+
+#: templates/browse/javascript.inc:16 templates/browse/javascript.inc:48
+#: templates/browse/javascript.inc:71
+msgid "You must select at least one entry first."
+msgstr "Äú±ØÐëÏÈÑ¡ÔñÖÁÉÙÒ»¸öÌõÄ¿¡£"
+
+#: edit.php:76 lib/Views/EditContact.php:52 lib/Views/DeleteContact.php:45
+msgid "You only have permission to view this contact."
+msgstr "Äú½öÓÐȨÏ޲鿴´ËÁªÏµÈË¡£"
+
+#: lib/Views/Browse.php:369
+msgid "Your default address book is not browseable."
+msgstr "ÎÞ·¨ä¯ÀÀÄúµÄĬÈϵØÖ·²¾¡£"
+
+#: lib/Turba.php:629
+msgid "_Browse"
+msgstr "ä¯ÀÀ_B"
+
+#: templates/browse/actions.inc:49
+msgid "_Contacts"
+msgstr "ÁªÏµÈË_C"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "ɾ³ý_D"
+
+#: contact.php:77
+msgid "_Edit"
+msgstr "±à¼­_E"
+
+#: lib/Turba.php:638
+msgid "_Import/Export"
+msgstr "µ¼Èë/µ¼³ö_I"
+
+#: templates/browse/actions.inc:48
+msgid "_Lists"
+msgstr "Áбí_L"
+
+#: lib/Turba.php:626
+msgid "_My Address Books"
+msgstr "ÎҵĵØÖ·²¾_M"
+
+#: lib/Turba.php:632
+msgid "_New Contact"
+msgstr "н¨ÁªÏµÈË_N"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "´Ó´ËÁбíÖÐɾ³ý_R"
+
+#: lib/Turba.php:634
+msgid "_Search"
+msgstr "ËÑË÷_S"
+
+#: contact.php:74
+msgid "_View"
+msgstr "²é¿´_V"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "ÉýÐò"
+
+#: vcard.php:43
+msgid "contact"
+msgstr "ÁªÏµÈË"
+
+#: data.php:208 data.php:213 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:218
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:228
+msgid "contacts.vcf"
+msgstr "contacts.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "½µÐò"
+
+#: config/prefs.php.dist:119
+msgid "no formatting"
+msgstr "ÎÞÐè¸ñʽ»¯"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "ÎÞ"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "µ½ÁªÏµÈËÁбí"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "µ½²»Í¬µÄµØÖ·²¾"
+
+#: data.php:60 templates/browse/column_headers.inc:13
+#: templates/data/import.inc:15 templates/data/export.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/po/zh_TW.po b/turba/po/zh_TW.po
new file mode 100644 (file)
index 0000000..24095c3
--- /dev/null
@@ -0,0 +1,1752 @@
+# Turba Traditional Chinese Translation.
+# Copyright 2001 David Chang,TAIWAN. ±i¨}¤å,¥xÆW
+# David Chang <david@tmv.gov.tw>, 2001.12
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Turba 2.2\n"
+"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
+"POT-Creation-Date: 2008-05-11 18:39+0800\n"
+"PO-Revision-Date: 2008-03-28 12:00+0800\n"
+"Last-Translator: David Cahng <david@tmv.gov.tw>\n"
+"Language-Team: Traditional Chinese <i18n@lists.horde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=BIG5\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: templates/prefs/imsp_opt.inc:40
+msgid " Add an IMSP Address Book"
+msgstr "·s¼W¤@¥» IMSP ³q°T¿ý"
+
+#: templates/prefs/imsp_opt.inc:29
+msgid " Delete IMSP Address Book"
+msgstr "§R°£ IMSP ³q°T¿ý:"
+
+#: data.php:350
+#, php-format
+msgid "\"%s\" already exists and was not imported."
+msgstr "\"%s\" ¤w¦s¦b¦Ó¥B¨S¦³¶×¤J¸ê®Æ."
+
+#: lib/Forms/EditContact.php:76
+#, php-format
+msgid "\"%s\" updated, but saving the uploaded file failed: %s"
+msgstr "\"%s\" ¤w§ó·s,¦ýÀx¦s¤W¶ÇÀɮ׮ɥ¢±Ñ: %s"
+
+#: lib/Forms/EditContact.php:78 lib/Forms/EditContact.php:81
+#, php-format
+msgid "\"%s\" updated."
+msgstr "\"%s\" ¤w§ó·s."
+
+#: lib/Views/Browse.php:192
+#, php-format
+msgid "\"%s\" was not copied because it is a list."
+msgstr "¥Ñ©ó \"%s\" ¬O¤@­Ó¸s²Õ¦]¦¹µLªk³Q½Æ»s."
+
+#: lib/Views/Browse.php:190
+#, php-format
+msgid "\"%s\" was not moved because it is a list."
+msgstr "¥Ñ©ó \"%s\" ¬O¤@­Ó¸s²Õ¦]¦¹µLªk³Q·h²¾."
+
+#: config/prefs.php.dist:127
+msgid "\"Firstname Lastname\"  (ie. John Doe)"
+msgstr "\"¦W¦r ©m¤ó\" (¨Ò¦p. ¨}¤å ±i)"
+
+#: config/prefs.php.dist:126
+msgid "\"Lastname, Firstname\" (ie. Doe, John)"
+msgstr "\"©m¤ó ¦W¦r\" (¨Ò¦p. ±i ¨}¤å)"
+
+#: lib/Forms/AddContact.php:83
+#, php-format
+msgid "%s added."
+msgstr "%s ¤w·s¼W."
+
+#: data.php:369
+#, php-format
+msgid "%s file successfully imported."
+msgstr "ÀÉ®× %s ¤w¶×¤J§¹¦¨."
+
+#: lib/Driver.php:555
+#, php-format
+msgid "%s of %s"
+msgstr "%s ¦@ %s"
+
+#: templates/list/numPager.inc:6
+#, php-format
+msgid "%s to %s of %s"
+msgstr " %s ¨ì %s ¦@ %s"
+
+#: lib/Turba.php:560
+#, php-format
+msgid "%s's Address Book"
+msgstr "%s ªº³q°T¿ý"
+
+#: lib/Block/minisearch.php:42
+msgid "A browser that supports iFrames is required"
+msgstr "ÂsÄý¾¹¥²¶·¤ä´© iFrames"
+
+#: view.php:54
+#, php-format
+msgid "Access denied to %s"
+msgstr "¦s¨ú %s ¾D©Ú"
+
+#: templates/browse/actions.inc:30 lib/Forms/AddContact.php:25
+msgid "Add"
+msgstr "·s¼W"
+
+#: lib/Forms/AddContact.php:22
+msgid "Add Contact"
+msgstr "·s¼W³sµ¸¤H"
+
+#: templates/prefs/addressbookselect.inc:173
+msgid "Add address book"
+msgstr "·s¼W³q°T¿ý"
+
+#: lib/Forms/EditContact.php:34
+msgid "Add file"
+msgstr "·s¼WÀÉ®×"
+
+#: templates/browse/actions.inc:30
+msgid "Add to"
+msgstr "·s¼W¨ì"
+
+#: lib/Driver.php:1876 lib/Driver/null.php:57
+msgid "Adding contacts is not available."
+msgstr "©Ò·s¼Wªº³sµ¸¤HµL®Ä."
+
+#: templates/addressbook_list.php:16
+msgid "Address Book"
+msgstr "³q°T¿ý"
+
+#: templates/addressbook_list.php:12
+msgid "Address Book List"
+msgstr "ÂsÄý"
+
+#: lib/Views/Browse.php:78 config/prefs.php.dist:115
+msgid "Address Book Listing"
+msgstr "ÂsÄý"
+
+#: config/prefs.php.dist:10
+msgid "Address Books"
+msgstr "³q°T¿ý"
+
+#: data.php:330
+msgid "Address book successfully purged."
+msgstr "³q°T¿ý¤w§¹¦¨²MªÅ."
+
+#: templates/prefs/addressbookselect.inc:167
+#: templates/prefs/addressbookselect.inc:169
+msgid "Address books that will not be displayed:"
+msgstr "¤£Åã¥Üªº³q°T¿ý:"
+
+#: search.php:199 templates/browse/search.inc:47
+msgid "Advanced Search"
+msgstr "¶i¶¥·j´M"
+
+#: config/attributes.php.dist:83
+msgid "Alias"
+msgstr "¶l¥ó§O¦W"
+
+#: templates/list/alphaPager.inc:7 templates/list/alphaPager.inc:10
+msgid "All"
+msgstr "©Ò¦³"
+
+#: lib/api.php:810
+msgid "Already Exists"
+msgstr "¤w¦s¦b"
+
+#: config/attributes.php.dist:106
+msgid "Anniversaries"
+msgstr "¶g¦~¬ö©À¤é"
+
+#: config/attributes.php.dist:102
+msgid "Anniversary"
+msgstr "¶g¦~¬ö©À¤é"
+
+#: templates/browse/javascript.inc:85
+#, php-format
+msgid "Are you sure that you want to delete %s?"
+msgstr "§A½T©w­n§R°£ %s ?"
+
+#: templates/browse/javascript.inc:66
+msgid "Are you sure that you want to delete the selected contacts?"
+msgstr "§A½T©w­n§R°£©Ò¿ï¾Üªº³sµ¸¤H¶Ü?"
+
+#: config/attributes.php.dist:378
+msgid "Assistant"
+msgstr "§U²z"
+
+#: search.php:196 templates/browse/search.inc:46
+msgid "Basic Search"
+msgstr "°ò¥»·j´M"
+
+#: lib/Driver/ldap.php:92 lib/Driver/ldap.php:95
+#, php-format
+msgid "Bind failed: (%s) %s"
+msgstr "³sµ²¥¢±Ñ: (%s) %s"
+
+#: config/attributes.php.dist:95
+msgid "Birthday"
+msgstr "¥Í¤é"
+
+#: config/attributes.php.dist:99
+msgid "Birthdays"
+msgstr "¥Í¤é"
+
+#: contact.php:106 templates/browse/row.inc:6
+msgid "Blank name"
+msgstr "ªÅ¥Õ¦WºÙ"
+
+#: templates/browse/actions.inc:51
+msgid "Both"
+msgstr "¥þ³¡"
+
+#: addressbooks/index.php:39 templates/menu.inc:8
+#: templates/addressbook_list.php:29
+msgid "Browse"
+msgstr "ÂsÄý"
+
+#: config/attributes.php.dist:288
+msgid "Business Category"
+msgstr "°Ó·~¤ÀÃþ"
+
+#: data.php:60
+msgid "CSV"
+msgstr "³rÂI¤À¹j®æ¦¡ .csv"
+
+#: lib/Object/Group.php:68
+msgid "Can't add a group to itself."
+msgstr "µLªk±N¸s²Õ¨ì¥»¨­."
+
+#: lib/Forms/DeleteAddressBook.php:45 lib/Forms/DeleteAddressBook.php:54
+msgid "Cancel"
+msgstr "¨ú®ø"
+
+#: lib/Driver/kolab.php:624
+#, php-format
+msgid "Cannot delete all address book entries for %s"
+msgstr "µLªk§R°£©Ò¦³ %s ªº³q°T¿ý°O¿ý."
+
+#: config/attributes.php.dist:350
+msgid "Category"
+msgstr "¤ÀÃþ"
+
+#: templates/browse/column_headers.inc:24
+#, php-format
+msgid "Change %s sort to %s"
+msgstr "§ïÅÜ %s ªº±Æ¦C¤è¦V¬° %s"
+
+#: addressbooks/index.php:41 templates/addressbook_list.php:33
+msgid "Change Permissions"
+msgstr "Åܧó¦s¨ú¼Ò¦¡"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check All/None"
+msgstr "¿ï¨ú ¥þ³¡/µL"
+
+#: templates/browse/column_headers.inc:7
+msgid "Check _All/None"
+msgstr "¿ï¨ú ¥þ³¡/µL_A"
+
+#: config/attributes.php.dist:115
+msgid "Children"
+msgstr "¤l"
+
+#: lib/Forms/AddContact.php:36
+msgid "Choose an address book"
+msgstr "¿ï¾Ü¤@¥»³q°T¿ý"
+
+#: templates/prefs/addressbookselect.inc:163
+msgid "Choose which address books to display, and in what order:"
+msgstr "¿ï¾Ü­nÅã¥Üªº³q°T¿ý,¤Î¨ä¶¶§Ç:"
+
+#: config/prefs.php.dist:11
+msgid "Choose which address books to use."
+msgstr "¿ï¾Ü­n¨Ï¥Îªº³q°T¿ý."
+
+#: templates/prefs/columnselect.inc:43
+msgid "Click an address book to sort its columns:"
+msgstr "¿ï¾Ü­n±Æ¦CÄæ¦ìªº³q°T¿ý:"
+
+#: templates/block/minisearch.inc:27
+msgid "Close"
+msgstr "Ãö³¬"
+
+#: templates/browse/header.inc:7
+msgid "Close Search"
+msgstr "Ãö³¬·j´M"
+
+#: config/prefs.php.dist:17
+msgid "Column Options"
+msgstr "Äæ¦ì¿ï¶µ"
+
+#: templates/data/export.inc:12 templates/data/import.inc:13
+msgid "Comma separated values"
+msgstr "³rÂI¤À¹j­È (*.csv)"
+
+#: templates/data/export.inc:13
+msgid "Comma separated values (Microsoft Outlook)"
+msgstr "³rÂI¤À¹j­È (Microsoft Outlook *.csv)"
+
+#: config/attributes.php.dist:476
+msgid "Common Address Extended"
+msgstr "³q±`¦a§}"
+
+#: config/attributes.php.dist:494
+msgid "Common City"
+msgstr "³q±`©ÒÄÝ«°¥«"
+
+#: config/attributes.php.dist:512
+msgid "Common Country"
+msgstr "³q±`©ÒÄݰê®a"
+
+#: config/attributes.php.dist:420
+msgid "Common Phone"
+msgstr "³q±`¹q¸Ü"
+
+#: config/attributes.php.dist:488
+msgid "Common Post Office Box"
+msgstr "³q±`¶l½c"
+
+#: config/attributes.php.dist:506
+msgid "Common Postal Code"
+msgstr "³q±`¶l»¼°Ï¸¹"
+
+#: config/attributes.php.dist:500
+msgid "Common State/Province"
+msgstr "³q±`©ÒÄݬ٥÷"
+
+#: config/attributes.php.dist:482
+msgid "Common Street"
+msgstr "³q±`¦í§}"
+
+#: config/attributes.php.dist:445
+msgid "Common Video Call"
+msgstr ""
+
+#: config/sources.php.dist:243 config/sources.php.dist:922
+msgid "Communications"
+msgstr "³q°T"
+
+#: config/attributes.php.dist:294
+msgid "Company"
+msgstr "¤½¥q"
+
+#: config/attributes.php.dist:223
+msgid "Company Address"
+msgstr "¤½¥q¦a§}"
+
+#: scripts/import_squirrelmail_abook.php:112 lib/api.php:433 lib/api.php:478
+#: lib/api.php:529 lib/api.php:572 lib/api.php:627 lib/api.php:686
+#: lib/api.php:736 lib/api.php:872 lib/api.php:964 lib/api.php:1030
+#: lib/api.php:1136 lib/api.php:1369 lib/api.php:1446 lib/api.php:1595
+#, php-format
+msgid "Connection failed: %s"
+msgstr "³sµ²¥¢±Ñ: %s"
+
+#: lib/Driver/ldap.php:68
+msgid "Connection failure"
+msgstr "³sµ²¥¢±Ñ"
+
+#: lib/Block/minisearch.php:3 lib/Block/minisearch.php:26
+msgid "Contact Search"
+msgstr "³sµ¸¤H·j´M"
+
+#: config/sources.php.dist:851
+msgid "Contacts"
+msgstr "³sµ¸¤H"
+
+#: templates/list/numPager.inc:3
+msgid "Contacts displayed:"
+msgstr "¤wÅã¥Üªº³sµ¸¤H:"
+
+#: lib/Views/Browse.php:339
+#, php-format
+msgid "Contacts in list: %s"
+msgstr "¸s²Õ: %s ¤¤ªº³sµ¸¤H"
+
+#: templates/browse/actions.inc:18
+msgid "Copy"
+msgstr "½Æ»s"
+
+#: lib/Forms/CreateAddressBook.php:39
+msgid "Create"
+msgstr "«Ø¥ß"
+
+#: lib/Forms/CreateAddressBook.php:34
+msgid "Create Address Book"
+msgstr "«Ø¥ß³q°T¿ý"
+
+#: templates/addressbook_list.php:8
+msgid "Create a new Address Book"
+msgstr "«Ø¥ß³q°T¿ý"
+
+#: lib/ListView.php:447
+msgid "Create a new Contact List in:"
+msgstr "¦b¤U¦C³q°T¿ý«Ø¥ß·s¸s²Õ:"
+
+#: lib/Views/Contact.php:80
+msgid "Created"
+msgstr "«Ø¥ß"
+
+#: contact.php:89
+msgid "De_lete"
+msgstr "§R°£_l"
+
+#: addressbooks/index.php:42 templates/addressbook_list.php:35
+#: templates/browse/actions.inc:3 lib/Views/DeleteContact.php:58
+#: lib/Forms/DeleteAddressBook.php:45
+msgid "Delete"
+msgstr "§R°£"
+
+#: lib/Views/DeleteContact.php:28 lib/Forms/DeleteAddressBook.php:40
+#, php-format
+msgid "Delete %s"
+msgstr "§R°£ %s"
+
+#: lib/Driver/ldap.php:321
+#, php-format
+msgid "Delete failed: (%s) %s"
+msgstr "§R°£¥¢±Ñ: (%s) %s"
+
+#: lib/Driver.php:1884 lib/Driver/null.php:62
+msgid "Deleting contacts is not available."
+msgstr "©Ò§R°£ªº³sµ¸¤HµL®Ä."
+
+#: delete.php:40
+msgid "Deletion failed"
+msgstr "§R°£¥¢±Ñ"
+
+#: config/attributes.php.dist:300
+msgid "Department"
+msgstr "³¡ªù"
+
+#: lib/Forms/CreateAddressBook.php:37 lib/Forms/EditAddressBook.php:44
+msgid "Description"
+msgstr "´y­z"
+
+#: templates/browse/search.inc:125
+msgid "Directory"
+msgstr "¥Ø¿ý"
+
+#: config/prefs.php.dist:24
+msgid "Display"
+msgstr "Åã¥Ü"
+
+#: config/prefs.php.dist:9 config/prefs.php.dist:16 config/prefs.php.dist:23
+#: config/prefs.php.dist:30
+msgid "Display Options"
+msgstr "Åã¥Ü¿ï¶µ"
+
+#: lib/Object.php:348
+msgid "Download"
+msgstr "¤U¸ü"
+
+#: templates/browse/row.inc:15 templates/browse/row.inc:16
+#: templates/browse/contactrow.inc:25
+msgid "Download vCard"
+msgstr "¤U¸ü vCard"
+
+#: templates/prefs/columnselect.inc:52
+msgid "Drag columns to re-arrange them. Check a column to enable it."
+msgstr "ÂI¿ï¨Ã©ì¦²­n­«·s±Æ¦CªºÄæ¦ì."
+
+#: addressbooks/index.php:40 templates/addressbook_list.php:31
+#: templates/browse/actions.inc:6 templates/browse/column_headers.inc:10
+#: templates/browse/row.inc:28 templates/browse/row.inc:29
+#: templates/browse/contactrow.inc:33
+msgid "Edit"
+msgstr "½s¿è"
+
+#: edit.php:91 templates/browse/contactrow.inc:33
+#, php-format
+msgid "Edit \"%s\""
+msgstr "½s¿è \"%s\""
+
+#: lib/Views/EditContact.php:35 lib/Forms/EditAddressBook.php:40
+#, php-format
+msgid "Edit %s"
+msgstr "½s¿è %s"
+
+#: config/attributes.php.dist:237
+msgid "Email"
+msgstr "¹q¤l¶l¥ó"
+
+#: config/attributes.php.dist:243
+msgid "Emails"
+msgstr "¹q¤l¶l¥ó"
+
+#: lib/Views/Browse.php:263 lib/Views/Browse.php:303
+#, php-format
+msgid "Error adding %d contact(s) to list."
+msgstr "·s¼W %d ­Ó³sµ¸¤H¨ì¸s²Õ¤¤®Éµo¥Í¿ù»~."
+
+#: lib/Views/Browse.php:265 lib/Views/Browse.php:305
+#, php-format
+msgid "Error adding %d of %d requested contact(s) to list."
+msgstr "·s¼W²Ä %d ­Ó¦@ %d ­Ó³sµ¸¤H¨ì¸s²Õ¤¤®Éµo¥Í¿ù»~."
+
+#: lib/Views/Browse.php:134
+#, php-format
+msgid "Error deleting %d contact(s)."
+msgstr "§R°£ %d ­Ó³sµ¸¤H®Éµo¥Í¿ù»~."
+
+#: lib/Views/Browse.php:136
+#, php-format
+msgid "Error deleting %d of %d requested contacts(s)."
+msgstr "§R°£²Ä %d ­Ó¦@ %d ­Ó³sµ¸¤H®Éµo¥Í¿ù»~."
+
+#: lib/Views/Browse.php:117
+#, php-format
+msgid "Error removing %d contact(s) from list."
+msgstr "¦Û¸s²Õ¤¤²¾°£ %d ­Ó³sµ¸¤H®Éµo¥Í¿ù»~."
+
+#: lib/Views/Browse.php:119
+#, php-format
+msgid "Error removing %d of %d requested contact(s) from list."
+msgstr "¦Û¸s²Õ¤¤²¾°£²Ä %d ­Ó¦@ %d ­Ó³sµ¸¤H®Éµo¥Í¿ù»~."
+
+#: lib/api.php:578
+#, php-format
+msgid "Error searching the address book: %s"
+msgstr "·j´M³q°T¿ý: %s ¥¢±Ñ"
+
+#: templates/browse/actions.inc:10 templates/data/export.inc:42
+msgid "Export"
+msgstr "¶×¥X"
+
+#: templates/data/export.inc:6
+msgid "Export Address Book"
+msgstr "¶×¥X³q°T¿ý"
+
+#: templates/data/export.inc:22
+msgid "Export only the selected contacts."
+msgstr "¥u¶×¥X¤w¿ï¨úªº³sµ¸¤H."
+
+#: templates/data/export.inc:28
+msgid "Export the following address book completely."
+msgstr "§¹¾ã¶×¥X¤U¦C³q°T¿ý."
+
+#: add.php:42 data.php:142 data.php:241 data.php:319 search.php:121
+#: lib/Views/Browse.php:84 lib/Views/Browse.php:152 lib/Views/Browse.php:180
+#, php-format
+msgid "Failed to access the address book: %s"
+msgstr "¦s¨ú³q°T¿ý: %s ¥¢±Ñ."
+
+#: lib/Views/Browse.php:211
+#, php-format
+msgid "Failed to add %s to %s: %s"
+msgstr "·s¼W %s ¨ì %s: %s"
+
+#: lib/Views/Browse.php:345
+msgid "Failed to browse list"
+msgstr "ÂsÄý¸s²Õ¥¢±Ñ"
+
+#: lib/Views/Browse.php:376
+msgid "Failed to browse the directory"
+msgstr "·j´M¥Ø¿ý¥¢±Ñ"
+
+#: lib/Driver/ldap.php:354
+#, php-format
+msgid "Failed to change name: (%s) %s; Old DN = %s, New DN = %s, Root = %s"
+msgstr "Åܧó¦WºÙ¥¢±Ñ:(%s) %s; Old DN = %s, New DN = %s, Root = %s"
+
+#: lib/Views/Browse.php:186
+#, php-format
+msgid "Failed to find object to be added: %s"
+msgstr "§ä´Mª«¥ó¥H·s¼W¨ì:%s¥¢±Ñ"
+
+#: search.php:190
+msgid "Failed to search the address book"
+msgstr "·j´M³q°T¿ý¥¢±Ñ"
+
+#: data.php:157
+#, php-format
+msgid "Failed to search the directory: %s"
+msgstr "·j´M¥Ø¿ý: %s ¥¢±Ñ"
+
+#: config/sources.php.dist:550
+msgid "Favourite Recipients"
+msgstr "¼öªù¤H¿ï"
+
+#: config/attributes.php.dist:264
+msgid "Fax"
+msgstr "¶Ç¯u"
+
+#: lib/Forms/Contact.php:41
+msgid "Files"
+msgstr "ªþ¥ó"
+
+#: templates/browse/search.inc:104
+msgid "Find"
+msgstr "´M§ä"
+
+#: lib/Forms/EditContact.php:121 lib/Forms/EditContact.php:160
+msgid "Finish"
+msgstr "§¹¦¨"
+
+#: config/attributes.php.dist:53
+msgid "First Name"
+msgstr "¦W¦r"
+
+#: config/attributes.php.dist:326
+msgid "Freebusy URL"
+msgstr "Freebusy ºô§}"
+
+#: templates/browse/search.inc:98
+msgid "From"
+msgstr "±q"
+
+#: config/attributes.php.dist:384
+msgid "Gender"
+msgstr "©Ê§O"
+
+#: config/sources.php.dist:776
+msgid "Global Address Book"
+msgstr "¥þ°ì³q°T¿ý"
+
+#: templates/browse/row.inc:49 templates/browse/contactrow.inc:44
+msgid "Group"
+msgstr "¸s²Õ"
+
+#: config/attributes.php.dist:123
+msgid "Home Address"
+msgstr "¦í®a¦a§}"
+
+#: config/attributes.php.dist:546
+msgid "Home Address Extended"
+msgstr "¦í®a¦a§}"
+
+#: config/attributes.php.dist:141
+msgid "Home City"
+msgstr "¦í®a©ÒÄÝ«°¥«"
+
+#: config/attributes.php.dist:159
+msgid "Home Country"
+msgstr "¦í®a©ÒÄݰê®a"
+
+#: config/attributes.php.dist:414
+msgid "Home Email"
+msgstr "¦í®a¹q¤l¶l¥ó"
+
+#: config/attributes.php.dist:430
+msgid "Home Fax"
+msgstr "¦í®a¶Ç¯u"
+
+#: config/attributes.php.dist:552
+msgid "Home Latitude"
+msgstr "¦í®a½n«×"
+
+#: config/attributes.php.dist:557
+msgid "Home Longitude"
+msgstr "¦í®a¸g«×"
+
+#: config/attributes.php.dist:440
+msgid "Home Mobile Phone"
+msgstr "¦í®a¦æ°Ê¹q¸Ü"
+
+#: config/attributes.php.dist:249
+msgid "Home Phone"
+msgstr "¦í®a¹q¸Ü"
+
+#: config/attributes.php.dist:135
+msgid "Home Post Office Box"
+msgstr "¦í®a¶l½c"
+
+#: config/attributes.php.dist:153
+msgid "Home Postal Code"
+msgstr "¦í®a¶l»¼°Ï¸¹"
+
+#: config/attributes.php.dist:147
+msgid "Home State/Province"
+msgstr "¦í®a©ÒÄݬ٥÷"
+
+#: config/attributes.php.dist:129
+msgid "Home Street Address"
+msgstr "¦í®a¦í§}"
+
+#: config/attributes.php.dist:455
+msgid "Home Video Call"
+msgstr ""
+
+#: config/attributes.php.dist:540
+msgid "Home Website URL"
+msgstr "¦í®aºô§}"
+
+#: config/sources.php.dist:667
+msgid "IMSP"
+msgstr "IMSP"
+
+#: templates/data/import.inc:7
+#, php-format
+msgid "Import Address Book, Step %d"
+msgstr "¶×¤J³q°T¿ý, ¨BÆJ %d"
+
+#: data.php:387
+msgid "Import/Export Address Books"
+msgstr "¶×¤J/¶×¥X ³q°T¿ý"
+
+#: config/attributes.php.dist:360
+msgid "Initials"
+msgstr "¦WºÙªº°_­º¦r¥À"
+
+#: config/attributes.php.dist:366
+msgid "Instant Messenger"
+msgstr "§Y®É³q°T"
+
+#: lib/api.php:867 lib/api.php:959
+msgid "Invalid ID"
+msgstr "µL®Äªº½s¸¹"
+
+#: scripts/import_squirrelmail_abook.php:105 lib/api.php:345 lib/api.php:567
+#: lib/api.php:622 lib/api.php:681 lib/api.php:729 lib/api.php:863
+#: lib/api.php:955 lib/api.php:1020 lib/api.php:1578
+#, php-format
+msgid "Invalid address book: %s"
+msgstr "µL®Äªº³q°T¿ý: %s"
+
+#: lib/api.php:1024
+msgid "Invalid contact unique ID"
+msgstr "µL®ÄªºÁpµ¸¤H°ß¤@ÃѧO½X"
+
+#: lib/api.php:1582 lib/api.php:1668 lib/api.php:1729
+msgid "Invalid email"
+msgstr "µL®Äªº¹q¤l¦í§}"
+
+#: lib/api.php:1590
+msgid "Invalid entry"
+msgstr "µL®Äªº°O¿ý"
+
+#: lib/Driver/ldap.php:317
+msgid "Invalid key specified."
+msgstr "«ü©wªºª÷Æ_µL®Ä"
+
+#: lib/api.php:1586
+msgid "Invalid name"
+msgstr "µL®Äªº¦WºÙ"
+
+#: config/attributes.php.dist:276
+msgid "Job Title"
+msgstr "¾ºÙ"
+
+#: lib/Driver/kolab.php:1114 lib/Driver/kolab.php:1180
+#, php-format
+msgid "Key for saving must be a UID not %s!"
+msgstr "Àx¦sªºª÷Æ_¥²¶·¬O UID ¦Ó«D %s!"
+
+#: lib/Driver/ldap.php:64
+msgid ""
+"LDAP support is required but the LDAP module is not available or not loaded."
+msgstr "¥²¶·­n¦³ LDAP ªº¤ä´©,¦ý¬O LDAP ¼Ò²Õ¤£¬O¥¼¦w¸Ë´N¬O¨S¦³¸ü¤J."
+
+#: data.php:65 templates/data/export.inc:16 templates/data/import.inc:18
+msgid "LDIF Address Book"
+msgstr "LDIF ³q°T¿ý"
+
+#: config/attributes.php.dist:390
+msgid "Language"
+msgstr "»y¨¥"
+
+#: lib/Views/Contact.php:91
+msgid "Last Modified"
+msgstr "³Ìªñ¤@¦¸§ó·s"
+
+#: config/attributes.php.dist:59
+msgid "Last Name"
+msgstr "©m"
+
+#: config/attributes.php.dist:396
+msgid "Latitude"
+msgstr "½n«×"
+
+#: templates/browse/column_headers.inc:16
+msgid "List"
+msgstr "²M³æ"
+
+#: config/sources.php.dist:238 config/sources.php.dist:918
+msgid "Location"
+msgstr "¦ì¸m"
+
+#: config/attributes.php.dist:401
+msgid "Longitude"
+msgstr "¸g«×"
+
+#: addressbooks/index.php:46 templates/addressbook_list.php:2
+msgid "Manage Address Books"
+msgstr "³q°T¿ýºÞ²z"
+
+#: config/attributes.php.dist:372
+msgid "Manager"
+msgstr "¸g²z"
+
+#: templates/browse/search.inc:109
+msgid "Matching"
+msgstr "¤Ç°t"
+
+#: lib/api.php:306
+msgid "Maximum Number of Contacts"
+msgstr "³sµ¸¤H¤W­­¼Æ¥Ø"
+
+#: config/prefs.php.dist:97
+msgid "Maximum number of pages"
+msgstr "­¶¼Æ¤W­­"
+
+#: lib/Block/tree_menu.php:3
+msgid "Menu List"
+msgstr "¥\¯àªí"
+
+#: config/attributes.php.dist:65
+#, fuzzy
+msgid "Middle Names"
+msgstr ""
+"#-#-#-#-#  compendium.po (Dimp 1.0-ALPHA)  #-#-#-#-#\n"
+"#-#-#-#-#  compendium.po (Dimp 1.0-ALPHA)  #-#-#-#-#\n"
+"ÀɮצWºÙ\n"
+"#-#-#-#-#  zh_TW.po (Turba 2.2-ALPHA)  #-#-#-#-#\n"
+"#-#-#-#-#  zh_TW.po (Turba 2.2)  #-#-#-#-#\n"
+
+#: lib/Driver/ldap.php:347
+msgid "Missing DN in LDAP source configuration."
+msgstr "§ä¤£¨ì LDAP ³]©w©Ò»Ý­nªº DN ­È."
+
+#: config/attributes.php.dist:259
+msgid "Mobile Phone"
+msgstr "¦æ°Ê¹q¸Ü"
+
+#: lib/Driver/ldap.php:376 lib/Driver/ldap.php:392
+#, php-format
+msgid "Modify failed: (%s) %s"
+msgstr "Åܧ󥢱Ñ: (%s) %s"
+
+#: templates/browse/header.inc:8
+msgid "More Options..."
+msgstr "§ó¦h¿ï¶µ..."
+
+#: lib/api.php:1706
+msgid "More than 1 entry found"
+msgstr "¶W¹L 1 µ§°O¿ý³Q¶Ç¦^"
+
+#: templates/browse/actions.inc:16
+msgid "Move"
+msgstr "·h²¾"
+
+#: templates/prefs/addressbookselect.inc:184
+msgid "Move left"
+msgstr "½Õª@"
+
+#: templates/prefs/addressbookselect.inc:186
+msgid "Move right"
+msgstr "½Õ­°"
+
+#: data.php:63 templates/data/import.inc:16
+msgid "Mulberry Address Book"
+msgstr "Mulberry ³q°T¿ý"
+
+#: lib/api.php:1614
+#, php-format
+msgid ""
+"Multiple persons with address [%s], but none with name [%s] already exist"
+msgstr ""
+"¦b³q°T¿ý¤¤¦³¦n´X¦ì³sµ¸¤Hªº¶l¥ó¦í§}³£¬O [%s],¦ý³o¨Ç³sµ¸¤H¨S¦³¤@­Ó¬O¥s°µ [%s] "
+"ªº."
+
+#: config/sources.php.dist:162
+msgid "My Address Book"
+msgstr "§Úªº³q°T¿ý"
+
+#: lib/Forms/CreateAddressBook.php:36 lib/Forms/EditAddressBook.php:43
+#: config/attributes.php.dist:47
+msgid "Name"
+msgstr "¦WºÙ"
+
+#: config/prefs.php.dist:31
+msgid "Name Format"
+msgstr "¦WºÙ®æ¦¡"
+
+#: config/attributes.php.dist:71
+#, fuzzy
+msgid "Name Prefixes"
+msgstr ""
+"#-#-#-#-#  compendium.po (Dimp 1.0-ALPHA)  #-#-#-#-#\n"
+"#-#-#-#-#  compendium.po (Dimp 1.0-ALPHA)  #-#-#-#-#\n"
+"¶l¥ó¹wÄý\n"
+"#-#-#-#-#  zh_TW.po (Turba 2.2-ALPHA)  #-#-#-#-#\n"
+"#-#-#-#-#  zh_TW.po (Turba 2.2)  #-#-#-#-#\n"
+
+#: config/attributes.php.dist:77
+#, fuzzy
+msgid "Name Suffixes"
+msgstr ""
+"#-#-#-#-#  compendium.po (Dimp 1.0-ALPHA)  #-#-#-#-#\n"
+"#-#-#-#-#  compendium.po (Dimp 1.0-ALPHA)  #-#-#-#-#\n"
+"¶l¥ó¹wÄý\n"
+"#-#-#-#-#  zh_TW.po (Turba 2.2-ALPHA)  #-#-#-#-#\n"
+"#-#-#-#-#  zh_TW.po (Turba 2.2)  #-#-#-#-#\n"
+
+#: templates/browse/search_vbook.inc:6
+msgid "Name:"
+msgstr "ÀɦW:"
+
+#: add.php:70 lib/Block/tree_menu.php:27
+msgid "New Contact"
+msgstr "·s¼W³sµ¸¤H"
+
+#: templates/data/import.inc:46 lib/Forms/EditContact.php:112
+#: lib/Forms/EditContact.php:119 lib/Forms/EditContact.php:174
+msgid "Next"
+msgstr "¤U¤@¨B"
+
+#: config/attributes.php.dist:89
+msgid "Nickname"
+msgstr "¼ÊºÙ"
+
+#: lib/api.php:1709 lib/api.php:1769
+#, php-format
+msgid "No %s entry found for %s"
+msgstr "§ä¤£¨ì %2$s ªº %1$s °O¿ý"
+
+#: data.php:52
+msgid ""
+"No Address Books are currently available. Import and Export is disabled."
+msgstr "¥Ø«eµL¥ô¦ó³q°T¿ý¥i¨Ï¥Î. ¶×¤J»P¶×¥X¦]¦Ó°±¥Î."
+
+#: search.php:107
+msgid "No Address Books are currently available. Searching is disabled."
+msgstr "¥Ø«eµL¥ô¦ó³q°T¿ý¥i¨Ï¥Î. ·j´M¥\¯à¦]¦Ó°±¥Î."
+
+#: lib/api.php:561 lib/api.php:616 lib/api.php:676 lib/api.php:858
+#: lib/api.php:950 lib/api.php:1015
+msgid "No address book specified"
+msgstr "¥¼«ü©w³q°T¿ý"
+
+#: minisearch.php:77
+msgid "No contacts found"
+msgstr "§ä¤£¨ì³sµ¸¤H"
+
+#: templates/browse/column_headers.inc:43
+msgid "No contacts match the current filter."
+msgstr "µL¥ô¦ó³sµ¸¤H²Å¦X²{¦æ±ø¥ó."
+
+#: lib/ListView.php:255
+msgid "No matching contacts"
+msgstr "¨S¦³³sµ¸¤H²Å¦X"
+
+#: lib/Driver/favourites.php:124
+msgid "No source for favourite recipients exists."
+msgstr "¼öªù¤H¿ïªº¨Ó·½¤£¦s¦b."
+
+#: lib/api.php:762 lib/api.php:1060
+msgid "No vCard data was found."
+msgstr "§ä¤£¨ì vCard ¸ê®Æ."
+
+#: templates/list/numPager.inc:8
+msgid "None"
+msgstr "µL"
+
+#: lib/Views/Contact.php:49 lib/Views/DeleteContact.php:26
+#: lib/Views/EditContact.php:33
+msgid "Not Found"
+msgstr "§ä¤£¨ì"
+
+#: deletefile.php:22 edit.php:48
+msgid "Not found"
+msgstr "§ä¤£¨ì"
+
+#: config/attributes.php.dist:314
+msgid "Notes"
+msgstr "³Æµù"
+
+#: config/prefs.php.dist:105
+msgid "Number of items per page"
+msgstr "¨C­¶¼Æ¥Ø"
+
+#: lib/api.php:909 lib/api.php:1085
+msgid "Object not found"
+msgstr "§ä¤£¨ìª«¥ó"
+
+#: lib/Driver/kolab.php:1184
+#, php-format
+msgid "Object with UID %s does not exist!"
+msgstr "UID  %s ªºª«¥ó¨Ã¤£¦s¦b!"
+
+#: config/attributes.php.dist:282
+msgid "Occupation"
+msgstr "¦æ·~"
+
+#: config/attributes.php.dist:306
+msgid "Office"
+msgstr "¿ì¤½«Ç"
+
+#: templates/prefs/imsp_opt.inc:22
+msgid ""
+"Once you save this option page, the address book will be permanently "
+"deleted. If this is not what you want, then you must change your selection "
+"to \"None\"."
+msgstr ""
+"¤@¥¹§AÀx¦s¦¹¿ï¶µ­¶­±, ³q°T¿ý±N¥Ã»·§R°£. ¦pªG³o¤£¬O§A©Ò§Æ±æªº, §AÀ³¸Ó¿ï¾Ü\"µL"
+"\"."
+
+#: lib/api.php:1068
+msgid "Only one vcard supported."
+msgstr "¶È¤ä´©³æ¤@VCARD."
+
+#: config/sources.php.dist:245 config/sources.php.dist:924
+msgid "Organization"
+msgstr "²Õ´"
+
+#: config/sources.php.dist:246 config/sources.php.dist:926
+msgid "Other"
+msgstr "¨ä¥L"
+
+#: config/attributes.php.dist:332
+msgid "PGP Public Key"
+msgstr "PGP ¤½¶}ª÷Æ_"
+
+#: config/attributes.php.dist:471
+msgid "PTT"
+msgstr ""
+
+#: config/attributes.php.dist:269
+msgid "Pager"
+msgstr "©I¥s¾¹"
+
+#: lib/Views/DeleteContact.php:57
+msgid "Permanently delete this contact?"
+msgstr "¥Ã¤[§R°£¦¹³sµ¸¤H?"
+
+#: deletefile.php:36 lib/Driver.php:721 lib/api.php:740 lib/api.php:1599
+#: lib/Driver/sql.php:486
+msgid "Permission denied"
+msgstr "¦s¨ú¾D©Ú"
+
+#: config/sources.php.dist:235 config/sources.php.dist:914
+msgid "Personal"
+msgstr "­Ó¤H"
+
+#: data.php:64 templates/data/import.inc:17
+msgid "Pine Address Book"
+msgstr "Pine ³q°T¿ý"
+
+#: templates/browse/javascript.inc:27
+msgid "Please name the new contact list:"
+msgstr "½Ð¿é¤J·s¸s²Õªº¦WºÙ:"
+
+#: lib/Forms/EditContact.php:115 lib/Forms/EditContact.php:118
+#: lib/Forms/EditContact.php:167
+msgid "Previous"
+msgstr "¤W¤@±i"
+
+#: lib/Driver/ldap.php:197
+#, php-format
+msgid "Query failed: (%s) %s"
+msgstr "¬d¸ß¥¢±Ñ: (%s) %s"
+
+#: lib/Driver/ldap.php:242 lib/Driver/ldap.php:250 lib/Driver/ldap.php:486
+#, php-format
+msgid "Read failed: (%s) %s"
+msgstr "Ū¨ú¥¢±Ñ: (%s) %s"
+
+#: lib/Driver.php:1868 lib/Driver/null.php:52
+msgid "Reading contacts is not available."
+msgstr "©ÒŪ¨úªº³sµ¸¤HµL®Ä."
+
+#: lib/Forms/DeleteAddressBook.php:43
+#, php-format
+msgid ""
+"Really delete the address book \"%s\"? This cannot be undone and all "
+"contacts in this address book will be permanently removed."
+msgstr ""
+"¯uªº­n§R°£¦¹³q°T¿ý \"%s\"¶Ü? ³o¶µ¾Þ§@±NµLªk«ì´_¦Ó¥B¸Ó³q°T¿ý¤¤ªº³sµ¸¤H¸ê®Æ¥ç±N"
+"¥Ã»·®ø¥¢."
+
+#: templates/prefs/addressbookselect.inc:175
+msgid "Remove address book"
+msgstr "²¾°£³q°T¿ý"
+
+#: templates/browse/actions.inc:3
+msgid "Remove from this list"
+msgstr "±q³o­Ó¸s²Õ¤¤²¾°£"
+
+#: lib/Driver.php:1906
+msgid ""
+"Removing user data is not supported in the current address book storage "
+"driver."
+msgstr "¥Ø«eªº³q°T¿ýÀx¦sÅX°Êµ{¦¡,¨Ã¥¼¤ä´©§R°£¨Ï¥ÎªÌ¸ê®Æªº¥\¯à."
+
+#: templates/data/import.inc:22
+msgid ""
+"Replace existing address book with the imported one? <strong>Warning: This "
+"deletes all entries in your current address book.</strong>"
+msgstr ""
+"¥H¶×¤Jªº³q°T¿ý¸m´«²{¦sªº³q°T¿ý ? <strong>ĵ§i: ³o±N·|§R°£¥Ø«e³q°T¿ý¤¤ªº©Ò¦³¬ö"
+"¿ý.</strong>"
+
+#: lib/Driver.php:615
+msgid "Requested object not found."
+msgstr "§ä¤£¨ì©Ò»Ýªºª«¥ó."
+
+#: templates/browse/search.inc:120
+msgid "Reset to Defaults"
+msgstr "­«³]¦^¤º©w­È"
+
+#: config/attributes.php.dist:338
+msgid "S/MIME Public Certificate"
+msgstr "S/MIME ¤½¶}¾ÌÃÒ"
+
+#: config/attributes.php.dist:465
+msgid "SIP"
+msgstr ""
+
+#: lib/Driver/ldap.php:84
+#, php-format
+msgid "STARTTLS failed: (%s) %s"
+msgstr "STARTTLS ¥¢±Ñ: (%s) %s"
+
+#: lib/Forms/EditContact.php:26 lib/Forms/EditAddressBook.php:46
+msgid "Save"
+msgstr "Àx¦s"
+
+#: templates/browse/search_vbook.inc:4
+msgid "Save search as a virtual address book?"
+msgstr "Àx¦s·j´Mµ²ªG¦¨¤@­ÓµêÀÀ³q°T¿ý?"
+
+#: lib/Driver.php:1894 lib/Driver/null.php:67
+msgid "Saving contacts is not available."
+msgstr "©ÒÀx¦sªº³sµ¸¤HµL®Ä."
+
+#: templates/browse/header.inc:3 templates/browse/search.inc:111
+#: templates/browse/search.inc:119 templates/block/minisearch.inc:26
+#: lib/Block/tree_menu.php:58 config/prefs.php.dist:116
+msgid "Search"
+msgstr "·j´M"
+
+#: lib/api.php:1374
+msgid "Search failed"
+msgstr "·j´M¥¢±Ñ"
+
+#: lib/api.php:1604 lib/api.php:1610 lib/api.php:1619 lib/api.php:1632
+#, php-format
+msgid "Search failed: %s"
+msgstr "·j´M¥¢±Ñ: %s"
+
+#: templates/block/minisearch.inc:24
+msgid "Search for: "
+msgstr "·j´M: "
+
+#: lib/Driver.php:1853 lib/Driver/null.php:47
+msgid "Searching is not available."
+msgstr "·j´M¥\¯àµL®Ä."
+
+#: templates/browse/row.inc:40
+msgid "Select contact"
+msgstr "¿ï¾Ü³sµ¸¤H"
+
+#: templates/data/export.inc:33
+msgid "Select the address book to export from:"
+msgstr "¿ï¾Ü­n¶×¥Xªº³q°T¿ý:"
+
+#: templates/data/import.inc:27
+msgid "Select the address book to import to:"
+msgstr "¿ï¾Ü­n¶×¤Jªº³q°T¿ý:"
+
+#: config/prefs.php.dist:61
+msgid ""
+"Select the address books that should be used for synchronization with "
+"external devices:"
+msgstr "¿ï¾Ü­n»P¥~³¡¸Ë¸m¦P¨B¸ê®Æªº³q°T¿ý:"
+
+#: templates/data/import.inc:36
+msgid "Select the charset of the source file:"
+msgstr "¿ï¾Ü¨Ó·½Àɮתº¦r¤¸½s½X®æ¦¡:"
+
+#: templates/data/export.inc:10
+msgid "Select the export format:"
+msgstr "¿ï¾Ü¶×¥X®æ¦¡:"
+
+#: templates/data/import.inc:44
+msgid "Select the file to import:"
+msgstr "¿ï¾ÜÀÉ®×¥H¶×¤J:"
+
+#: templates/data/import.inc:11
+msgid "Select the format of the source file:"
+msgstr "¿ï¾Ü¨Ó·½Àɮתº®æ¦¡:"
+
+#: config/prefs.php.dist:125
+msgid "Select the format used to display names:"
+msgstr "¿ï¾Ü¥Î¨ÓÅã¥Ü¦WºÙªº®æ¦¡:"
+
+#: config/prefs.php.dist:25
+msgid "Select view to display by default and paging options."
+msgstr "¿ï¨ú¹w³]ªºÀ˵ø¤è¦¡,¥H¤Î­¶­±¿ï¶µ."
+
+#: config/prefs.php.dist:18
+msgid "Select which fields to display in the address lists."
+msgstr "¿ï¨ú¥Î¥HÅã¥Üªº³q°T¿ýÄæ¦ì."
+
+#: config/prefs.php.dist:32
+msgid "Select which format to display names."
+msgstr "¿ï¾Ü¥Î¨ÓÅã¥Ü¦WºÙªº®æ¦¡."
+
+#: lib/Forms/AddContact.php:42
+#, php-format
+msgid "Selected address book \"%s\"."
+msgstr "¤w¿ï¾Üªº³q°T¿ý \"%s\"."
+
+#: templates/browse/actions.inc:49
+#, php-format
+msgid "Show %s"
+msgstr "Åã¥Ü %s"
+
+#: templates/browse/actions.inc:51
+msgid "Show Both"
+msgstr "Åã¥Ü³sµ¸¤H»P¸s²Õ"
+
+#: templates/browse/actions.inc:50
+msgid "Show Contacts"
+msgstr "Åã¥Ü³sµ¸¤H"
+
+#: templates/browse/actions.inc:49
+msgid "Show Lists"
+msgstr "Åã¥Ü¸s²Õ"
+
+#: lib/ListView.php:323 lib/ListView.php:329
+msgid "Sort Direction"
+msgstr "±Æ§Ç¤è¦V"
+
+#: templates/browse/column_headers.inc:31
+#, php-format
+msgid "Sort by %s"
+msgstr "¤w %s ±Æ¦C"
+
+#: templates/browse/column_headers.inc:26
+#, php-format
+msgid "Sort by %s only"
+msgstr "¶È¨Ì %s ±Æ¦C"
+
+#: templates/browse/column_headers.inc:29
+#, php-format
+msgid "Sort by %s, then by %s"
+msgstr "¥ý¨Ì %s ±Æ¦C,µM«á %s"
+
+#: templates/menu.inc:6
+msgid "Source:"
+msgstr "¨Ó·½:"
+
+#: lib/api.php:299
+msgid "Sources"
+msgstr "¨Ó·½"
+
+#: config/attributes.php.dist:109
+msgid "Spouse"
+msgstr "°t°¸"
+
+#: lib/Views/Browse.php:261 lib/Views/Browse.php:301
+#, php-format
+msgid "Successfully added %d contact(s) to list."
+msgstr "¤w¦¨¥\¦a¥[¤J %d ­Ó³sµ¸¤H¨ì¸s²Õ¤¤."
+
+#: lib/Views/Browse.php:215
+#, php-format
+msgid "Successfully added %s to %s"
+msgstr "%s ¤w¦¨¥\¦a¥[¤J¨ì %s ¨t²Î¤¤."
+
+#: lib/Views/Browse.php:291
+#, php-format
+msgid "Successfully created the contact list \"%s\"."
+msgstr "¤w¦¨¥\ªº«Ø¥ß¸s²Õ \"%s\"."
+
+#: search.php:165
+#, php-format
+msgid "Successfully created virtual address book \"%s\""
+msgstr "¤w¦¨¥\¦a«Ø¥ßµêÀÀ³q°T¿ý \"%s\""
+
+#: lib/Views/Browse.php:132
+#, php-format
+msgid "Successfully deleted %d contact(s)."
+msgstr "%d ­Ó³sµ¸¤H¤w§R°£§¹¦¨."
+
+#: lib/Views/Browse.php:115
+#, php-format
+msgid "Successfully removed %d contact(s) from list."
+msgstr "¤w¦¨¥\¦a±q¸s²Õ²¾°£ %d ­Ó³sµ¸¤H."
+
+#: data.php:61
+msgid "TSV"
+msgstr "Tab ¤À¹j®æ¦¡"
+
+#: templates/data/export.inc:14 templates/data/import.inc:14
+msgid "Tab separated values"
+msgstr "Tab ¤À¹j­È (*.tsv)"
+
+#: templates/browse/actions.inc:20
+msgid "Target Address Book"
+msgstr "¥Ø¼Ð³q°T¿ý"
+
+#: templates/browse/actions.inc:31
+msgid "Target Contact List"
+msgstr "¥Ø¼Ð¸s²Õ"
+
+#: data.php:321
+#, php-format
+msgid "The %s file didn't contain any contacts."
+msgstr "ÀÉ®× %s ¤¤¨S¦³¥ô¦ó³sµ¸¤H¸ê®Æ."
+
+#: view.php:17
+msgid "The VFS backend needs to be configured to enable attachment uploads."
+msgstr "­n±Ò¥Îªþ¥ó¤W¶Ç¥\¯à«e,µêÀÀÀɮרt²Î(VFS)¦øªAºÝ¥²¶·³]©w§¹¦¨."
+
+#: lib/Driver.php:1824
+#, php-format
+msgid "The address book \"%s\" does not exist."
+msgstr "³q°T¿ý \"%s\" ¤£¦s¦b."
+
+#: addressbooks/create.php:32
+#, php-format
+msgid "The address book \"%s\" has been created."
+msgstr "³q°T¿ý \"%s\" ¤w«Ø¥ß."
+
+#: data.php:328
+#, php-format
+msgid "The address book could not be purged: %s"
+msgstr "¦¹³q°T¿ýµLªk³Q²MªÅ: %s"
+
+#: addressbooks/delete.php:50
+#, php-format
+msgid "The addressbook \"%s\" has been deleted."
+msgstr "³q°T¿ý \"%s\" ¤w§R°£."
+
+#: addressbooks/edit.php:44
+#, php-format
+msgid "The addressbook \"%s\" has been renamed to \"%s\"."
+msgstr "³q°T¿ý \"%s\" ¤w§ó¦W¬° \"%s\"."
+
+#: addressbooks/edit.php:46
+#, php-format
+msgid "The addressbook \"%s\" has been saved."
+msgstr "³q°T¿ý \"%s\" ¤wÀx¦s."
+
+#: contact.php:23 vcard.php:19 view.php:28
+msgid "The contact you requested does not exist."
+msgstr "¸Ó³sµ¸¤H¤£¦s¦b."
+
+#: deletefile.php:46
+#, php-format
+msgid "The file \"%s\" has been deleted."
+msgstr "ÀÉ®× \"%s\" ¤w³Q§R°£."
+
+#: data.php:301
+msgid "The import can be finished despite the warnings."
+msgstr "¾¨ºÞ¦³Äµ§i°T®§¦ý¤´µM¥i¥H§¹¦¨¸ê®Æªº¶×¤J."
+
+#: lib/Views/Contact.php:59 lib/Views/DeleteContact.php:36
+#: lib/Views/EditContact.php:43
+msgid "The requested contact was not found."
+msgstr "§ä¤£¨ì³sµ¸¤H."
+
+#: lib/Views/Browse.php:80
+msgid "There are no browseable address books."
+msgstr "µL¥i¨ÑÂsÄýªº³q°T¿ý."
+
+#: add.php:32
+msgid ""
+"There are no writeable address books. None of the available address books "
+"are configured to allow you to add new entries to them. If you believe this "
+"is an error, please contact your system administrator."
+msgstr ""
+"µL¥i¥Î¨Ó·s¼W°O¿ýªº³q°T¿ý¥i¥Î.¦pªG§A»{¬°³o©Î³\¬O­Ó¿ù»~,½ÐÁpµ¸§Aªº¨t²ÎºÞ²z­û."
+
+#: lib/Views/Browse.php:349
+#, php-format
+msgid "There is %d contact in this list that is not viewable to you"
+msgid_plural "There are %d contacts in this list that are not viewable to you"
+msgstr[0] "¦@ %d ­Ó³sµ¸¤H¦b¦¹¸s²Õ¤¤,¦Ó¥BµLªk³Q§AÀ˵ø"
+
+#: search.php:161
+#, php-format
+msgid "There was a problem creating the virtual address book: %s"
+msgstr "«Ø¥ßµêÀÀ³q°T¿ý: %s ®Éµo¥Í¤@­Ó¿ù»~."
+
+#: lib/Forms/AddContact.php:90
+msgid ""
+"There was an error adding the new contact. Contact your system administrator "
+"for further help."
+msgstr "·s¼W³sµ¸¤H®Éµo¥Í¤@­Ó¿ù»~.½ÐÁpµ¸§Aªº¨t²ÎºÞ²z­û¥H¨ó§U³B²z."
+
+#: lib/Views/Browse.php:311
+msgid "There was an error creating a new list."
+msgstr "«Ø¥ß·s¸s²Õ®Éµo¥Í¿ù»~."
+
+#: lib/Views/Browse.php:221
+#, php-format
+msgid "There was an error deleting \"%s\" from the source address book."
+msgstr "¦Û¨Ó·½³q°T¿ý¤¤§R°£ \"%s\" ®Éµo¥Í¤@­Ó¿ù»~."
+
+#: delete.php:39
+#, php-format
+msgid "There was an error deleting this contact: %s"
+msgstr "§R°£³sµ¸¤H: %s ®Éµo¥Í¤@­Ó¿ù»~."
+
+#: lib/Views/Browse.php:355
+msgid "There was an error displaying the list"
+msgstr "Åã¥Ü¸s²Õ®Éµo¥Í¤@­Ó¿ù»~"
+
+#: data.php:355
+#, php-format
+msgid "There was an error importing the data: %s"
+msgstr "¶×¤J¸ê®Æ:%s ®Éµo¥Í¤@­Ó¿ù»~"
+
+#: lib/api.php:758 lib/api.php:1055
+msgid "There was an error importing the iCalendar data."
+msgstr "¶×¤J iCalendar ¸ê®Æ®Éµo¥Í¤@­Ó¿ù»~."
+
+#: lib/api.php:235
+#, php-format
+msgid "There was an error removing an address book for %s"
+msgstr "²¾°£ %s ªº³q°T¿ý®Éµo¥Í¤@­Ó¿ù»~"
+
+#: lib/Forms/EditContact.php:86
+msgid ""
+"There was an error saving the contact. Contact your system administrator for "
+"further help."
+msgstr "Àx¦s³sµ¸¤H®Éµo¥Í¤@­Ó¿ù»~.½ÐÁpµ¸§Aªº¨t²ÎºÞ²z­û¥H¨ó§U³B²z."
+
+#: data.php:187
+msgid "There were no addresses to export."
+msgstr "µL³q°T¿ý¸ê®Æ¥i¨Ñ¶×¥X³q°T¿ý."
+
+#: templates/prefs/addressbookselect.inc:178
+#: templates/prefs/addressbookselect.inc:180
+msgid "These address books will display in this order:"
+msgstr "³q°T¿ýÅã¥Ü¶¶§Ç¦p¤U:"
+
+#: addressbooks/delete.php:26
+msgid "This addressbook cannot be deleted"
+msgstr "¦¹³q°T¿ýµLªk³Q§R°£"
+
+#: data.php:286
+msgid "This file format is not supported."
+msgstr "¦¹ºØÀɮ׮榡¨Ã¥¼³Q¤ä´©."
+
+#: lib/api.php:1623 lib/api.php:1636
+#, php-format
+msgid "This person already has a %s entry in the address book"
+msgstr "³o­Ó¤Hªº %s °O¿ý¤w¦s¦b©ó³q°T¿ý¤¤."
+
+#: config/prefs.php.dist:138
+msgid ""
+"This will be the default address book when adding or importing contacts."
+msgstr "·s¼W©Î¶×¤J³sµ¸¤Hªº¹w³]³q°T¿ý."
+
+#: config/attributes.php.dist:229
+msgid "Time Zone"
+msgstr "®É°Ï"
+
+#: lib/Driver/share.php:77
+msgid "Unable to find contact owner."
+msgstr "§ä¤£¨ì³sµ¸¤Hªº¾Ö¦³ªÌ."
+
+#: lib/Driver.php:1746 lib/Turba.php:672
+#, php-format
+msgid "Unable to load the definition of %s."
+msgstr "µLªk¸ü¤J %s ªº©w¸q¸ê®Æ."
+
+#: lib/Forms/EditAddressBook.php:55
+#, php-format
+msgid "Unable to save address book \"%s\": %s"
+msgstr "µLªkÀx¦s³q°T¿ý \"%s\": %s"
+
+#: lib/Driver/kolab.php:490
+msgid "Unable to search."
+msgstr "µLªk·j´M."
+
+#: config/attributes.php.dist:353
+msgid "Unfiled"
+msgstr "¥¼¤ÀÃþ"
+
+#: lib/api.php:796 lib/api.php:906 lib/api.php:1073
+#, php-format
+msgid "Unsupported Content-Type: %s"
+msgstr "¥¼¤ä´©ªº¤º®e«¬ºA: %s"
+
+#: templates/browse/contactrow.inc:27
+#, php-format
+msgid "View \"%s\""
+msgstr "À˵ø \"%s\""
+
+#: minisearch.php:72
+msgid "View Contact"
+msgstr "À˵ø³sµ¸¤H"
+
+#: config/prefs.php.dist:114
+msgid "View to display by default:"
+msgstr "¹w³]À˵ø:"
+
+#: config/attributes.php.dist:460
+msgid "VoIP"
+msgstr ""
+
+#: config/attributes.php.dist:320
+msgid "Website URL"
+msgstr "ºô§}"
+
+#: config/attributes.php.dist:173
+msgid "Work Address"
+msgstr "¿ì¤½«Ç¦a§}"
+
+#: config/attributes.php.dist:524
+msgid "Work Address Extended"
+msgstr "¿ì¤½«Ç¦a§}"
+
+#: config/attributes.php.dist:191
+msgid "Work City"
+msgstr "¿ì¤½«Ç©ÒÄÝ«°¥«"
+
+#: config/attributes.php.dist:209
+msgid "Work Country"
+msgstr "¿ì¤½«Ç©ÒÄݰê®a"
+
+#: config/attributes.php.dist:408
+msgid "Work Email"
+msgstr "¿ì¤½«Ç¹q¤l¶l¥ó"
+
+#: config/attributes.php.dist:425
+msgid "Work Fax"
+msgstr "¿ì¤½«Ç¶Ç¯u"
+
+#: config/attributes.php.dist:530
+msgid "Work Latitude"
+msgstr "¿ì¤½«Ç½n«×"
+
+#: config/attributes.php.dist:535
+msgid "Work Longitude"
+msgstr "¿ì¤½«Ç¸g«×"
+
+#: config/attributes.php.dist:435
+msgid "Work Mobile Phone"
+msgstr "¿ì¤½«Ç¦æ°Ê¹q¸Ü"
+
+#: config/attributes.php.dist:254
+msgid "Work Phone"
+msgstr "¿ì¤½«Ç¹q¸Ü"
+
+#: config/attributes.php.dist:185
+msgid "Work Post Office Box"
+msgstr "¿ì¤½«Ç¶l½c"
+
+#: config/attributes.php.dist:203
+msgid "Work Postal Code"
+msgstr "¿ì¤½«Ç¶l»¼°Ï¸¹"
+
+#: config/attributes.php.dist:197
+msgid "Work State/Province"
+msgstr "¿ì¤½«Ç©ÒÄݬ٥÷"
+
+#: config/attributes.php.dist:179
+msgid "Work Street Address"
+msgstr "¿ì¤½«Ç¦í§}"
+
+#: config/attributes.php.dist:450
+msgid "Work Video Call"
+msgstr ""
+
+#: config/attributes.php.dist:518
+msgid "Work Website URL"
+msgstr "¿ì¤½«Çºô§}"
+
+#: addressbooks/edit.php:30
+msgid "You are not allowed to change this addressbook."
+msgstr "§A¨S¦³Åܧ󦹳q°T¿ýªºÅv­­."
+
+#: add.php:48 data.php:250 lib/Views/Browse.php:159 lib/Views/Browse.php:274
+#, php-format
+msgid "You are not allowed to create more than %d contacts in \"%s\"."
+msgstr "¤£¤¹³\§A¦b \"%2$s\" ¤¤«Ø¥ß %1$d ­Ó¥H¤Wªº³sµ¸¤H."
+
+#: addressbooks/delete.php:37
+msgid "You are not allowed to delete this addressbook."
+msgstr "§A¨S¦³§R°£¦¹³q°T¿ýªºÅv­­."
+
+#: lib/api.php:198
+msgid "You are not allowed to remove user data."
+msgstr "§A¨S¦³²¾°£¥Î¤á¸ê®ÆªºÅv­­."
+
+#: lib/Driver/vbook.php:137
+msgid "You cannot add an entry to a virtual address book."
+msgstr "§AµLªk·s¼W¤@µ§¸ê®Æ¨ìµêÀÀ³q°T¿ý¤¤."
+
+#: lib/Driver/vbook.php:121
+msgid "You cannot add new contacts to a virtual address book"
+msgstr "§AµLªk·s¼W¤@¦ì³sµ¸¤H¨ìµêÀÀ³q°T¿ý¤¤."
+
+#: lib/Driver/vbook.php:129
+msgid "You cannot delete contacts from a virtual address book"
+msgstr "§AµLªk¦ÛµêÀÀ³q°T¿ý¤¤§R°£³sµ¸¤H."
+
+#: edit.php:66 view.php:38 lib/Views/DeleteContact.php:42
+#: lib/Views/EditContact.php:49
+msgid "You do not have permission to view this contact."
+msgstr "§A¨S¦³À˵ø³o­Ó³sµ¸¤HªºÅv­­."
+
+#: vcard.php:37
+msgid "You do not have permission to view this object."
+msgstr "§A¨S¦³À˵ø¦¹ª«¥óªºÅv­­."
+
+#: lib/Forms/DeleteAddressBook.php:59
+msgid "You do not have permissions to delete this address book."
+msgstr "§A¨S¦³§R°£¦¹³q°T¿ýªºÅv­­."
+
+#: lib/Driver/ldap.php:741
+msgid ""
+"You must have the Net_LDAP PEAR library installed to use the schema check "
+"function."
+msgstr ""
+"­n¨Ï¥Î¾÷½XÀˬd¥\¯à(schema check function)«e,§A¥²¶·¥ý¦w¸Ë¦n Net_LDAP PEAR ¨ç¦¡"
+"®w."
+
+#: search.php:148
+msgid "You must provide a name for virtual address books."
+msgstr "§A¥²¶·À°µêÀÀ³q°T¿ý¨ú­Ó¦WºÙ."
+
+#: templates/browse/javascript.inc:54
+msgid "You must select a target address book."
+msgstr "§A¥²¶·¥ý¿ï¾Ü¤@­Ó¥Ø¦a³q°T¿ý."
+
+#: templates/browse/javascript.inc:22
+msgid "You must select a target contact list."
+msgstr "§A¥²¶·¿ï¾Ü¤@­Ó¥Ø¦a¸s²Õ."
+
+#: edit.php:31 templates/browse/javascript.inc:16
+#: templates/browse/javascript.inc:48 templates/browse/javascript.inc:71
+msgid "You must select at least one contact first."
+msgstr "§A¥²¶·¿ï¾Ü¦Ü¤Ö¤@­Ó³sµ¸¤H."
+
+#: edit.php:70 lib/Views/DeleteContact.php:45 lib/Views/EditContact.php:52
+msgid "You only have permission to view this contact."
+msgstr "§A¥u¦³À˵ø³o­Ó³sµ¸¤HªºÅv­­."
+
+#: lib/Views/Browse.php:362
+msgid "Your default address book is not browseable."
+msgstr "§Aªº¹w³]³q°T¿ý¤£¥iÂsÄý."
+
+#: templates/browse/contactrow.inc:12
+msgid "[no value]"
+msgstr "[µL³]©w­È]"
+
+#: lib/Turba.php:614
+msgid "_Browse"
+msgstr "ÂsÄý_B"
+
+#: templates/browse/actions.inc:50
+msgid "_Contacts"
+msgstr "³sµ¸¤H_C"
+
+#: templates/browse/actions.inc:3
+msgid "_Delete"
+msgstr "§R°£_D"
+
+#: contact.php:85
+msgid "_Edit"
+msgstr "½s¿è_E"
+
+#: lib/Turba.php:623
+msgid "_Import/Export"
+msgstr "¶×¤J/¶×¥X_I"
+
+#: templates/browse/actions.inc:49
+msgid "_Lists"
+msgstr "¸s²Õ_L"
+
+#: lib/Turba.php:611
+msgid "_My Address Books"
+msgstr "³q°T¿ýºÞ²z"
+
+#: lib/Turba.php:617
+msgid "_New Contact"
+msgstr "·s¼W³sµ¸¤H_N"
+
+#: lib/Turba.php:628
+msgid "_Print"
+msgstr "¦C¦L_P"
+
+#: templates/browse/actions.inc:3
+msgid "_Remove from this list"
+msgstr "±q³o­Ó¸s²Õ¤¤²¾°£_R"
+
+#: lib/Turba.php:619
+msgid "_Search"
+msgstr "·j´M_S"
+
+#: contact.php:82
+msgid "_View"
+msgstr "À˵ø_V"
+
+#: templates/browse/column_headers.inc:24
+msgid "ascending"
+msgstr "¤W¤É"
+
+#: lib/Views/Contact.php:76 lib/Views/Contact.php:87
+#, php-format
+msgid "by %s"
+msgstr "¥Ñ %s"
+
+#: lib/Views/Contact.php:78 lib/Views/Contact.php:89
+msgid "by me"
+msgstr "¥Ñ§Ú"
+
+#: vcard.php:45
+msgid "contact"
+msgstr "contact"
+
+#: data.php:207 data.php:212 templates/data/export.inc:1
+msgid "contacts.csv"
+msgstr "contacts.csv"
+
+#: data.php:232
+msgid "contacts.ldif"
+msgstr "contacts.ldif"
+
+#: data.php:217
+msgid "contacts.tsv"
+msgstr "contacts.tsv"
+
+#: data.php:227
+msgid "contacts.vcf"
+msgstr "contacts.vcf"
+
+#: templates/browse/column_headers.inc:24
+msgid "descending"
+msgstr "¤U­°"
+
+#: config/attributes.php.dist:387
+msgid "female"
+msgstr "¤k©Ê"
+
+#: lib/Block/tree_menu.php:37
+#, php-format
+msgid "in %s"
+msgstr "©ó %s"
+
+#: config/attributes.php.dist:387
+msgid "male"
+msgstr "¨k©Ê"
+
+#: config/prefs.php.dist:128
+msgid "no formatting"
+msgstr "µL"
+
+#: templates/prefs/imsp_opt.inc:32
+msgid "none"
+msgstr "¨S¦³"
+
+#: templates/browse/actions.inc:33
+msgid "to a Contact List"
+msgstr "¨ì¸s²Õ"
+
+#: templates/browse/actions.inc:22
+msgid "to a different Address Book"
+msgstr "¨ì¨ä¥Lªº³q°T¿ý"
+
+#: data.php:62 templates/browse/column_headers.inc:13
+#: templates/data/export.inc:15 templates/data/import.inc:15
+msgid "vCard"
+msgstr "vCard"
diff --git a/turba/scripts/.htaccess b/turba/scripts/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/turba/scripts/Turba.reg b/turba/scripts/Turba.reg
new file mode 100644 (file)
index 0000000..53c4069
Binary files /dev/null and b/turba/scripts/Turba.reg differ
diff --git a/turba/scripts/import_squirrelmail_file_abook.php b/turba/scripts/import_squirrelmail_file_abook.php
new file mode 100755 (executable)
index 0000000..859b3d2
--- /dev/null
@@ -0,0 +1,161 @@
+#!/usr/bin/php
+<?php
+/**
+ * This script imports SquirrelMail file-based addressbooks into Turba.
+ * It was developed against SquirrelMail 1.4.0, so use at your own risk
+ * against different versions.
+ *
+ * Input can be either a single squirrelmail .abook file, or a directory
+ * containing multiple .abook files.
+ *
+ * Copyright 2007-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Ben Chavet <ben@horde.org>
+ */
+
+@define('AUTH_HANDLER', true);
+@define('HORDE_BASE', dirname(__FILE__) . '/../..');
+@define('TURBA_BASE', dirname(__FILE__) . '/..');
+
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+
+// Makre sure no one runs this from the web.
+if (!Horde_Cli::runningFromCli()) {
+    exit("Must be run from the command line\n");
+}
+
+// Load the CLI environment - make sure there's no time limit, init some
+// variables, etc.
+$cli = &Horde_Cli::singleton();
+$cli->init();
+
+// Read command line parameters.
+if ($argc != 2) {
+    $cli->message('Too many or too few parameters.', 'cli.error');
+    $cli->writeln('Usage: import_squirrelmail_file_abook.php path-to-squirrelmail-data');
+    exit;
+}
+$data = $argv[1];
+
+// Make sure we load Horde base to get the auth config
+require_once HORDE_BASE . '/lib/base.php';
+if ($conf['auth']['admins']) {
+    Horde_Auth::setAuth($conf['auth']['admins'][0], array());
+}
+
+// Now that we are authenticated, we can load Turba's base. Otherwise, the
+// share code breaks, causing a new, completely empty share to be created on
+// the DataTree with no owner.
+require_once TURBA_BASE . '/lib/base.php';
+require_once TURBA_BASE . '/lib/Object/Group.php';
+
+// Get list of SquirrelMail address book files
+if (is_dir($data)) {
+    if (!($handle = opendir($data))) {
+        exit;
+    }
+    $files = array();
+    while (false !== ($file = readdir($handle))) {
+        if (preg_match('/.abook$/', $file)) {
+            $files[] = $data . '/' . $file;
+        }
+    }
+    closedir($handle);
+} else {
+    $files = array($data);
+}
+
+// Loop through SquirrelMail address book files
+foreach($files as $file) {
+    if (!($handle = fopen($file, 'r'))) {
+        continue;
+    }
+
+    // Set current user
+    $user = substr(basename($file), 0, -6);
+    Horde_Auth::setAuth($user, array());
+    $cli->message('Importing ' . $user . '\'s address book');
+
+    // Reset user prefs
+    unset($prefs);
+    $prefs = &Prefs::factory($conf['prefs']['driver'], 'turba', $user, null, null, false);
+
+    // Reset $cfgSources for current user.
+    unset($cfgSources);
+    include TURBA_BASE . '/config/sources.php';
+    $cfgSources = Turba::getConfigFromShares($cfgSources);
+    $cfgSources = Turba::permissionsFilter($cfgSources);
+
+    // Get user's default addressbook
+    $import_source = $prefs->getValue('default_dir');
+    if (empty($import_source)) {
+        $import_source = array_keys($cfgSources);
+        $import_source = $import_source[0];
+    }
+
+    // Check existance of the specified source.
+    if (!isset($cfgSources[$import_source])) {
+        PEAR::raiseError(sprintf(_("Invalid address book: %s"), $import_source), 'horde.warning');
+        continue;
+    }
+
+    // Initiate driver
+    $driver = &Turba_Driver::singleton($import_source);
+    if (is_a($driver, 'PEAR_Error')) {
+        PEAR::raiseError(sprintf(_("Connection failed: %s"), $driver->getMessage()), 'horde.error', null, null, $import_source);
+        continue;
+    }
+
+    // Read addressbook file, one line at a time
+    while (!feof($handle)) {
+        $buffer = fgets($handle);
+        if (empty($buffer)) {
+            continue;
+        }
+
+        $entry = explode('|', $buffer);
+        $members = explode(',', $entry[3]);
+
+        if (count($members) > 1) {
+            // Entry is a list of contacts, import each individually and
+            // create a group that contains them.
+            $attributes = array('alias' => $entry[0],
+                                'firstname' => $entry[1],
+                                'lastname' => $entry[2],
+                                'notes' => $entry[4]);
+            $gid = $driver->add($attributes);
+            $group = new Turba_Object_Group($driver, array_merge($attributes, array('__key' => $gid)));
+            foreach ($members as $member) {
+                $result = $driver->add(array('firstname' => $member, 'email' => $member));
+                if ($result && !is_a($result, 'PEAR_Error')) {
+                    $added = $group->addMember($result, $import_source);
+                    if (is_a($added, 'PEAR_Error')) {
+                        $cli->message('  ' . $added->getMessage(), 'cli.error');
+                    } else {
+                        $cli->message('  Added ' . $member, 'cli.success');
+                    }
+                }
+            }
+            $group->store();
+        } else {
+            // entry only contains one contact, import it
+            $contact = array('alias' => $entry[0],
+                             'firstname' => $entry[1],
+                             'lastname' => $entry[2],
+                             'email' => $entry[3],
+                             'notes' => $entry[4]);
+            $added = $driver->add($contact);
+            if (is_a($added, 'PEAR_Error')) {
+                $cli->message('  ' . $added->getMessage(), 'cli.error');
+            } else {
+                $cli->message('  Added ' . $entry[3], 'cli.success');
+            }
+        }
+    }
+
+    fclose($handle);
+}
diff --git a/turba/scripts/import_squirrelmail_sql_abook.php b/turba/scripts/import_squirrelmail_sql_abook.php
new file mode 100755 (executable)
index 0000000..4ceeafb
--- /dev/null
@@ -0,0 +1,167 @@
+#!/usr/bin/php
+<?php
+/**
+ * This script imports SquirrelMail database addressbooks into Turba.
+ *
+ * The first argument must be a DSN to the database containing the "address"
+ * table, e.g.: "mysql://root:password@localhost/squirrelmail".
+ *
+ * Copyright 2008-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Ben Chavet <ben@horde.org>
+ * @author Jan Schneider <jan@horde.org>
+ */
+
+@define('AUTH_HANDLER', true);
+@define('HORDE_BASE', dirname(__FILE__) . '/../..');
+@define('TURBA_BASE', dirname(__FILE__) . '/..');
+
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+
+// Makre sure no one runs this from the web.
+if (!Horde_Cli::runningFromCli()) {
+    exit("Must be run from the command line\n");
+}
+
+// Load the CLI environment - make sure there's no time limit, init some
+// variables, etc.
+$cli = &Horde_Cli::singleton();
+$cli->init();
+
+// Read command line parameters.
+if ($argc != 2) {
+    $cli->message('Too many or too few parameters.', 'cli.error');
+    $cli->writeln('Usage: import_squirrelmail_file_abook.php DSN');
+    exit;
+}
+$dsn = $argv[1];
+
+// Make sure we load Horde base to get the auth config
+require_once HORDE_BASE . '/lib/base.php';
+if ($conf['auth']['admins']) {
+    Horde_Auth::setAuth($conf['auth']['admins'][0], array());
+}
+
+// Now that we are authenticated, we can load Turba's base. Otherwise, the
+// share code breaks, causing a new, completely empty share to be created on
+// the DataTree with no owner.
+require_once TURBA_BASE . '/lib/base.php';
+require_once TURBA_BASE . '/lib/Object/Group.php';
+require_once 'Horde/Mime/Address.php';
+
+// Connect to database.
+$db = &DB::connect($dsn);
+if (is_a($db, 'PEAR_Error')) {
+    $cli->fatal($db->toString());
+}
+
+// Loop through SquirrelMail address books.
+$handle = $db->query('SELECT owner, nickname, firstname, lastname, email, label FROM address ORDER BY owner');
+if (is_a($handle, 'PEAR_Error')) {
+    $cli->fatal($handle->toString());
+}
+$turba_shares = &Horde_Share::singleton('turba');
+$user = null;
+$count = 0;
+while ($row = $handle->fetchRow(DB_FETCHMODE_ASSOC)) {
+    // Set current user
+    if ($row['owner'] != $user) {
+        if (!is_null($user)) {
+            $cli->message('  Added ' . $count . ' contacts', 'cli.success');
+            $count = 0;
+        }
+        $user = $row['owner'];
+        Horde_Auth::setAuth($user, array());
+        $cli->message('Importing ' . $user . '\'s address book');
+
+        // Reset user prefs
+        unset($prefs);
+        $prefs = &Prefs::factory($conf['prefs']['driver'], 'turba', $user, null, null, false);
+
+        // Reset $cfgSources for current user.
+        unset($cfgSources);
+        $hasShares = false;
+        include TURBA_BASE . '/config/sources.php';
+        foreach ($cfgSources as $key => $cfg) {
+            if (!empty($cfg['use_shares'])) {
+                $has_share = true;
+                break;
+            }
+        }
+        if ($has_share) {
+            $cfgSources = Turba::getConfigFromShares($cfgSources);
+        }
+        $cfgSources = Turba::permissionsFilter($cfgSources);
+        if (!count($cfgSources)) {
+            $cli->message('No address book available for ' . $user, 'cli.error');
+            continue;
+        }
+
+        // Get user's default addressbook
+        $import_source = $prefs->getValue('default_dir');
+        if (empty($import_source)) {
+            $import_source = array_keys($cfgSources);
+            $import_source = $import_source[0];
+        }
+
+        // Check existance of the specified source.
+        if (!isset($cfgSources[$import_source])) {
+            $cli->message('  ' . sprintf(_("Invalid address book: %s"), $import_source), 'cli.error');
+            continue;
+        }
+
+        // Initiate driver
+        $driver = &Turba_Driver::singleton($import_source);
+        if (is_a($driver, 'PEAR_Error')) {
+            $cli->message('  ' . sprintf(_("Connection failed: %s"), $driver->getMessage()), 'cli.error');
+            continue;
+        }
+    }
+
+    if (!count($cfgSources)) {
+        continue;
+    }
+
+    $members = Horde_Mime_Address::explode($row['email'], ',;');
+    if (count($members) > 1) {
+        // Entry is a list of contacts, import each individually and create a
+        // group that contains them.
+        $attributes = array('alias' => $row['nickname'],
+                            'firstname' => $row['firstname'],
+                            'lastname' => $row['lastname'],
+                            'notes' => $row['label']);
+        $gid = $driver->add($attributes);
+        $group = new Turba_Object_Group($driver, array_merge($attributes, array('__key' => $gid)));
+        $count++;
+        foreach ($members as $member) {
+            $result = $driver->add(array('firstname' => $member, 'email' => $member));
+            if ($result && !is_a($result, 'PEAR_Error')) {
+                $added = $group->addMember($result, $import_source);
+                if (is_a($added, 'PEAR_Error')) {
+                    $cli->message('  ' . $added->getMessage(), 'cli.error');
+                } else {
+                    $count++;
+                }
+            }
+        }
+        $group->store();
+    } else {
+        // Entry only contains one contact, import it.
+        $contact = array('alias' => $row['nickname'],
+                         'firstname' => $row['firstname'],
+                         'lastname' => $row['lastname'],
+                         'email' => $row['email'],
+                         'notes' => $row['label']);
+        $added = $driver->add($contact);
+        if (is_a($added, 'PEAR_Error')) {
+            $cli->message('  ' . $added->getMessage(), 'cli.error');
+        } else {
+            $count++;
+        }
+    }
+}
+$cli->message('  Added ' . $count . ' contacts', 'cli.success');
diff --git a/turba/scripts/import_vcards.php b/turba/scripts/import_vcards.php
new file mode 100755 (executable)
index 0000000..4f414ff
--- /dev/null
@@ -0,0 +1,67 @@
+#!/usr/bin/php
+<?php
+/**
+ * This script imports VCARD data into turba address books.
+ * The VCARD data is read from standard input, the address book and user name
+ * passed as parameters.
+ *
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Jan Schneider <jan@horde.org>
+ */
+
+@define('AUTH_HANDLER', true);
+@define('HORDE_BASE', dirname(__FILE__) . '/../..');
+
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+
+// Make sure no one runs this from the web.
+if (!Horde_Cli::runningFromCLI()) {
+    exit("Must be run from the command line\n");
+}
+
+// Load the CLI environment - make sure there's no time limit, init some
+// variables, etc.
+$cli = &Horde_Cli::singleton();
+$cli->init();
+
+// Read command line parameters.
+if (count($argv) != 3) {
+    $cli->message('Too many or too few parameters.', 'cli.error');
+    usage();
+}
+$source = $argv[1];
+$user = $argv[2];
+
+// Read standard input.
+$vcard = $cli->readStdin();
+if (empty($vcard)) {
+    $cli->message('No import data provided.', 'cli.error');
+    usage();
+}
+
+// Registry.
+$registry = Horde_Registry::singleton();
+
+// Set user.
+Horde_Auth::setAuth($user, array());
+
+// Import data.
+$result = $registry->call('contacts/import',
+                          array($vcard, 'text/x-vcard', $source));
+if (is_a($result, 'PEAR_Error')) {
+    $cli->fatal($result->toString());
+}
+
+$cli->message('Imported successfully ' . count($result) . ' contacts', 'cli.success');
+
+function usage()
+{
+    $GLOBALS['cli']->writeln('Usage: import_vcards.php source user');
+    exit;
+}
+
diff --git a/turba/scripts/ldap/addou b/turba/scripts/ldap/addou
new file mode 100644 (file)
index 0000000..cf1e4d8
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+for x in *; do /home/addou.pl $x; done
diff --git a/turba/scripts/ldap/addou.pl b/turba/scripts/ldap/addou.pl
new file mode 100644 (file)
index 0000000..bddc1b3
--- /dev/null
@@ -0,0 +1,32 @@
+#!/usr/bin/perl -w
+#
+# LDAP add personal ou's from /home
+# This script adds an ou for each directory in /home.
+#
+# Script by tarjei@nu.no.
+# Remember to remove ou's like mailman, mysql, postgres, etc.
+
+# Settings that should be changed for your setup:
+$basedn = "ou=personal_addressbook, dc=example, dc=com";
+$binddn = "uid=root, ou=People, dc=example, dc=com";
+$passwd = "";
+# End of configuration section - don't edit below here.
+
+use Getopt::Std;
+my %Options;
+$user = $ARGV[0];
+print "Adding ou: ou=$user,$basedn";
+
+$FILE = "|/usr/bin/ldapadd -x $options -D '$binddn' -w $passwd";
+
+open FILE or die;
+
+print FILE <<EOF;
+dn: ou=$user,$basedn
+objectclass: top
+objectClass: organizationalUnit
+ou: $user
+
+EOF
+close FILE;
+exit 0;
diff --git a/turba/scripts/ldap/rfc2739.schema b/turba/scripts/ldap/rfc2739.schema
new file mode 100644 (file)
index 0000000..406aa8d
--- /dev/null
@@ -0,0 +1,98 @@
+#
+# http://www.faqs.org/rfcs/rfc2739.html
+# 
+# From the RFC:
+# The calCalURI contains the URI to a snapshot of the user's entire
+# default calendar. The calFBURL contains the URI to the user's default
+# busy time data. The calCAPURI represents contains a URI that can be
+# used to communicate with the user's calendar. The calCalAdrURI
+# contains a URI that points to the location to which event requests
+# should be sent for that user.
+#
+# The calOtherCalURIs is a multi-valued property containing URIs to
+# snapshots of other calendars that the user may have. The
+# calOtherFBURLs is a multi-valued property containing URIs to other
+# free/busy data that the user may have. The calOtherCAPURIs attribute
+# is a multi-valued property containing URIs to other calendars that
+# the user may have. The calOtherCalAdrURIs attribute is a multi-valued
+# property containing URIs to other locations that a user may want
+# event requests sent to.
+#
+# There is no predetermined order to the values in either multi-valued
+# property.
+
+#      EQUALITY caseIgnoreIA5Match
+
+attribute (1.2.840.113556.1.4.478
+  NAME 'calCalURI'
+  DESC 'Snapshot of users entire default calendar'
+  EQUALITY caseIgnoreIA5Match
+  SUBSTR caseIgnoreIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ )
+
+attribute (1.2.840.113556.1.4.479
+  NAME 'calFBURL'
+  DESC 'URI of the uses free and busy information'
+  EQUALITY caseIgnoreIA5Match
+  SUBSTR caseIgnoreIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ )
+
+attribute (1.2.840.113556.1.4.480
+  NAME 'calCAPURI'
+  DESC 'URI used to communicate with the users calendar'
+  EQUALITY caseIgnoreIA5Match
+  SUBSTR caseIgnoreIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ )
+
+attribute (1.2.840.113556.1.4.481
+  NAME 'calCalAdrURI'
+  DESC 'URI to which event requests should be sent for the user'
+  EQUALITY caseIgnoreIA5Match
+  SUBSTR caseIgnoreIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ )
+
+attribute (1.2.840.113556.1.4.482
+  NAME 'calOtherCalURIs'
+  DESC 'URIs to non-default calendars belonging to the user'
+  EQUALITY caseIgnoreIA5Match
+  SUBSTR caseIgnoreIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ )
+
+attribute (1.2.840.113556.1.4.483
+  NAME 'calOtherFBURLs'
+  DESC 'URIs to non-default free and busy information files'
+  EQUALITY caseIgnoreIA5Match
+  SUBSTR caseIgnoreIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ )
+
+attribute (1.2.840.113556.1.4.484
+  NAME 'calOtherCAPURIs'
+  DESC 'URIs for communicating with non-default calendars'
+  EQUALITY caseIgnoreIA5Match
+  SUBSTR caseIgnoreIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ )
+
+attribute (1.2.840.113556.1.4.485
+  NAME 'calOtherCalAdrURIs'
+  DESC 'Destinations for event requests to non-default calendars'
+  EQUALITY caseIgnoreIA5Match
+  SUBSTR caseIgnoreIA5SubstringsMatch
+  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
+ )
+
+objectclass (1.2.840.113556.1.5.87
+ NAME 'calEntry' 
+ DESC 'Calendering and Free Busy information'
+ SUP top AUXILIARY
+ MAY (calCalURI $ calFBURL $ calCAPURI $ calCalAdrURI $ 
+      calOtherCalURIs $ calOtherFBURLs $ calOtherCAPURIs $
+      calOtherCalAdrURIs
+     )
+ )
diff --git a/turba/scripts/sql/test.xml b/turba/scripts/sql/test.xml
new file mode 100644 (file)
index 0000000..2a11a2f
--- /dev/null
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<database>
+
+ <name><variable>name</variable></name>
+ <create>false</create>
+ <overwrite>false</overwrite>
+
+ <table>
+
+  <name>hordetest_turba_objects</name>
+
+  <declaration>
+
+   <field>
+    <name>object_id</name>
+    <type>text</type>
+    <length>32</length>
+    <notnull>true</notnull>
+   </field>
+
+   <field>
+    <name>owner_id</name>
+    <type>text</type>
+    <length>255</length>
+    <notnull>true</notnull>
+   </field>
+
+   <field>
+    <name>object_type</name>
+    <type>text</type>
+    <length>255</length>
+    <notnull>true</notnull>
+    <default>Object</default>
+   </field>
+
+   <field>
+    <name>object_uid</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_members</name>
+    <type>clob</type>
+   </field>
+
+   <field>
+    <name>object_name</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_alias</name>
+    <type>text</type>
+    <length>32</length>
+   </field>
+
+   <field>
+    <name>object_email</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_homeaddress</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_workaddress</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_homephone</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_workphone</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_cellphone</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_fax</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_title</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_company</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_notes</name>
+    <type>clob</type>
+   </field>
+
+   <field>
+    <name>object_pgppublickey</name>
+    <type>clob</type>
+   </field>
+
+   <field>
+    <name>object_smimepublickey</name>
+    <type>clob</type>
+   </field>
+
+   <field>
+    <name>object_freebusyurl</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <index>
+    <name>hordetest_turba_objects_primary</name>
+    <primary>true</primary>
+    <field>
+     <name>object_id</name>
+    </field>
+   </index>
+
+   <index>
+    <name>hordetest_turba_objects_owner</name>
+    <field>
+     <name>owner_id</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+  </declaration>
+
+ </table>
+
+</database>
diff --git a/turba/scripts/sql/turba.mssql.sql b/turba/scripts/sql/turba.mssql.sql
new file mode 100644 (file)
index 0000000..77cd3d6
--- /dev/null
@@ -0,0 +1,94 @@
+CREATE TABLE turba_objects (
+    object_id VARCHAR(32) NOT NULL,
+    owner_id VARCHAR(255) NOT NULL,
+    object_type VARCHAR(255) DEFAULT 'Object' NOT NULL,
+    object_uid VARCHAR(255),
+    object_members BLOB,
+    object_firstname VARCHAR(255),
+    object_lastname VARCHAR(255),
+    object_middlenames VARCHAR(255),
+    object_nameprefix VARCHAR(32),
+    object_namesuffix VARCHAR(32),
+    object_alias VARCHAR(32),
+    object_photo BLOB,
+    object_phototype VARCHAR(10),
+    object_bday VARCHAR(10),
+    object_homestreet VARCHAR(255),
+    object_homepob VARCHAR(10),
+    object_homecity VARCHAR(255),
+    object_homeprovince VARCHAR(255),
+    object_homepostalcode VARCHAR(10),
+    object_homecountry VARCHAR(255),
+    object_workstreet VARCHAR(255),
+    object_workpob VARCHAR(10),
+    object_workcity VARCHAR(255),
+    object_workprovince VARCHAR(255),
+    object_workpostalcode VARCHAR(10),
+    object_workcountry VARCHAR(255),
+    object_tz VARCHAR(32),
+    object_geo VARCHAR(255),
+    object_email VARCHAR(255),
+    object_homephone VARCHAR(25),
+    object_workphone VARCHAR(25),
+    object_cellphone VARCHAR(25),
+    object_fax VARCHAR(25),
+    object_pager VARCHAR(25),
+    object_title VARCHAR(255),
+    object_role VARCHAR(255),
+    object_logo BLOB,
+    object_logotype VARCHAR(10),
+    object_company VARCHAR(255),
+    object_category VARCHAR(80),
+    object_notes VARCHAR(MAX),
+    object_url VARCHAR(255),
+    object_freebusyurl VARCHAR(255),
+    object_pgppublickey VARCHAR(MAX),
+    object_smimepublickey VARCHAR(MAX),
+--
+    PRIMARY KEY(object_id)
+);
+
+CREATE INDEX turba_owner_idx ON turba_objects (owner_id);
+CREATE INDEX turba_email_idx ON turba_objects (object_email);
+CREATE INDEX turba_firstname_idx ON turba_objects (object_firstname);
+CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
+
+CREATE TABLE turba_shares (
+    share_id INT NOT NULL,
+    share_name VARCHAR(255) NOT NULL,
+    share_owner VARCHAR(255) NOT NULL,
+    share_flags SMALLINT NOT NULL DEFAULT 0,
+    perm_creator SMALLINT NOT NULL DEFAULT 0,
+    perm_default SMALLINT NOT NULL DEFAULT 0,
+    perm_guest SMALLINT NOT NULL DEFAULT 0,
+    attribute_name VARCHAR(255) NOT NULL,
+    attribute_desc VARCHAR(255),
+    attribute_params VARCHAR(MAX),
+    PRIMARY KEY (share_id)
+);
+
+CREATE INDEX turba_shares_share_name_idx ON turba_shares (share_name);
+CREATE INDEX turba_shares_share_owner_idx ON turba_shares (share_owner);
+CREATE INDEX turba_shares_perm_creator_idx ON turba_shares (perm_creator);
+CREATE INDEX turba_shares_perm_default_idx ON turba_shares (perm_default);
+CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
+
+CREATE TABLE turba_shares_groups (
+    share_id INT NOT NULL,
+    group_uid VARCHAR(255) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_groups_share_id_idx ON turba_shares_groups (share_id);
+CREATE INDEX turba_shares_groups_group_uid_idx ON turba_shares_groups (group_uid);
+CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
+
+CREATE TABLE turba_shares_users (
+    share_id INT NOT NULL,
+    user_uid VARCHAR(255) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
+CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
diff --git a/turba/scripts/sql/turba.oci8.sql b/turba/scripts/sql/turba.oci8.sql
new file mode 100644 (file)
index 0000000..dd9ee32
--- /dev/null
@@ -0,0 +1,93 @@
+CREATE TABLE turba_objects (
+    object_id VARCHAR2(32) NOT NULL,
+    owner_id VARCHAR2(255) NOT NULL,
+    object_type VARCHAR2(255) DEFAULT 'Object' NOT NULL,
+    object_uid VARCHAR2(255),
+    object_members CLOB,
+    object_firstname VARCHAR2(255),
+    object_lastname VARCHAR2(255),
+    object_middlenames VARCHAR2(255),
+    object_nameprefix VARCHAR2(32),
+    object_namesuffix VARCHAR2(32),
+    object_alias VARCHAR2(32),
+    object_photo BLOB,
+    object_phototype VARCHAR2(10),
+    object_bday VARCHAR2(10),
+    object_homestreet VARCHAR2(255),
+    object_homepob VARCHAR2(10),
+    object_homecity VARCHAR2(255),
+    object_homeprovince VARCHAR2(255),
+    object_homepostalcode VARCHAR2(10),
+    object_homecountry VARCHAR2(255),
+    object_workstreet VARCHAR2(255),
+    object_workpob VARCHAR2(10),
+    object_workcity VARCHAR2(255),
+    object_workprovince VARCHAR2(255),
+    object_workpostalcode VARCHAR2(10),
+    object_workcountry VARCHAR2(255),
+    object_tz VARCHAR2(32),
+    object_geo VARCHAR2(255),
+    object_email VARCHAR2(255),
+    object_homephone VARCHAR2(25),
+    object_workphone VARCHAR2(25),
+    object_cellphone VARCHAR2(25),
+    object_fax VARCHAR2(25),
+    object_pager VARCHAR2(25),
+    object_title VARCHAR2(255),
+    object_role VARCHAR2(255),
+    object_logo BLOB,
+    object_logotype VARCHAR2(10),
+    object_company VARCHAR2(255),
+    object_category VARCHAR2(80),
+    object_notes CLOB,
+    object_url VARCHAR2(255),
+    object_freebusyurl VARCHAR2(255),
+    object_pgppublickey CLOB,
+    object_smimepublickey CLOB,
+    PRIMARY KEY(object_id)
+);
+
+CREATE INDEX turba_owner_idx ON turba_objects (owner_id);
+CREATE INDEX turba_email_idx ON turba_objects (object_email);
+CREATE INDEX turba_firstname_idx ON turba_objects (object_firstname);
+CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
+
+CREATE TABLE turba_shares (
+    share_id INT NOT NULL,
+    share_name VARCHAR2(255) NOT NULL,
+    share_owner VARCHAR2(255) NOT NULL,
+    share_flags SMALLINT NOT NULL DEFAULT 0,
+    perm_creator SMALLINT NOT NULL DEFAULT 0,
+    perm_default SMALLINT NOT NULL DEFAULT 0,
+    perm_guest SMALLINT NOT NULL DEFAULT 0,
+    attribute_name VARCHAR2(255) NOT NULL,
+    attribute_desc VARCHAR2(255),
+    attribute_params VARCHAR2(4000),
+    PRIMARY KEY (share_id)
+);
+
+CREATE INDEX turba_shares_share_name_idx ON turba_shares (share_name);
+CREATE INDEX turba_shares_share_owner_idx ON turba_shares (share_owner);
+CREATE INDEX turba_shares_perm_creator_idx ON turba_shares (perm_creator);
+CREATE INDEX turba_shares_perm_default_idx ON turba_shares (perm_default);
+CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
+
+CREATE TABLE turba_shares_groups (
+    share_id INT NOT NULL,
+    group_uid VARCHAR(255) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_groups_share_id_idx ON turba_shares_groups (share_id);
+CREATE INDEX turba_shares_groups_group_uid_idx ON turba_shares_groups (group_uid);
+CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
+
+CREATE TABLE turba_shares_users (
+    share_id INT NOT NULL,
+    user_uid VARCHAR2(255) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
+CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
diff --git a/turba/scripts/sql/turba.pgsql.sql b/turba/scripts/sql/turba.pgsql.sql
new file mode 100644 (file)
index 0000000..da8d15a
--- /dev/null
@@ -0,0 +1,95 @@
+CREATE TABLE turba_objects (
+    object_id VARCHAR(32) NOT NULL,
+    owner_id VARCHAR(255) NOT NULL,
+    object_type VARCHAR(255) DEFAULT 'Object' NOT NULL,
+    object_uid VARCHAR(255),
+    object_members TEXT,
+    object_firstname VARCHAR(255),
+    object_lastname VARCHAR(255),
+    object_middlenames VARCHAR(255),
+    object_nameprefix VARCHAR(32),
+    object_namesuffix VARCHAR(32),
+    object_alias VARCHAR(32),
+    object_photo TEXT,
+    object_phototype VARCHAR(10),
+    object_bday VARCHAR(10),
+    object_homestreet VARCHAR(255),
+    object_homepob VARCHAR(10),
+    object_homecity VARCHAR(255),
+    object_homeprovince VARCHAR(255),
+    object_homepostalcode VARCHAR(10),
+    object_homecountry VARCHAR(255),
+    object_workstreet VARCHAR(255),
+    object_workpob VARCHAR(10),
+    object_workcity VARCHAR(255),
+    object_workprovince VARCHAR(255),
+    object_workpostalcode VARCHAR(10),
+    object_workcountry VARCHAR(255),
+    object_tz VARCHAR(32),
+    object_geo VARCHAR(255),
+    object_email VARCHAR(255),
+    object_homephone VARCHAR(25),
+    object_workphone VARCHAR(25),
+    object_cellphone VARCHAR(25),
+    object_fax VARCHAR(25),
+    object_pager VARCHAR(25),
+    object_title VARCHAR(255),
+    object_role VARCHAR(255),
+    object_logo TEXT,
+    object_logotype VARCHAR(10),
+    object_company VARCHAR(255),
+    object_category VARCHAR(80),
+    object_notes TEXT,
+    object_url VARCHAR(255),
+    object_freebusyurl VARCHAR(255),
+    object_pgppublickey TEXT,
+    object_smimepublickey TEXT,
+
+    PRIMARY KEY(object_id)
+);
+
+CREATE INDEX turba_owner_idx ON turba_objects (owner_id);
+CREATE INDEX turba_email_idx ON turba_objects (object_email);
+CREATE INDEX turba_firstname_idx ON turba_objects (object_firstname);
+CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
+
+CREATE TABLE turba_shares (
+    share_id SMALLINT NOT NULL,
+    share_name VARCHAR(255) NOT NULL,
+    share_owner VARCHAR(255) NOT NULL,
+    share_flags SMALLINT NOT NULL DEFAULT 0,
+    perm_creator SMALLINT NOT NULL DEFAULT 0,
+    perm_default SMALLINT NOT NULL DEFAULT 0,
+    perm_guest SMALLINT NOT NULL DEFAULT 0,
+    attribute_name VARCHAR(255) NOT NULL,
+    attribute_desc VARCHAR(255),
+    attribute_params TEXT,
+    PRIMARY KEY (share_id)
+);
+
+CREATE INDEX turba_shares_share_name_idx ON turba_shares (share_name);
+CREATE INDEX turba_shares_share_owner_idx ON turba_shares (share_owner);
+CREATE INDEX turba_shares_perm_creator_idx ON turba_shares (perm_creator);
+CREATE INDEX turba_shares_perm_default_idx ON turba_shares (perm_default);
+CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
+
+CREATE TABLE turba_shares_groups (
+    share_id SMALLINT NOT NULL,
+    group_uid VARCHAR(255) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_groups_share_id_idx ON turba_shares_groups (share_id);
+CREATE INDEX turba_shares_groups_group_uid_idx ON turba_shares_groups (group_uid);
+CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
+
+CREATE TABLE turba_shares_users (
+    share_id SMALLINT NOT NULL,
+    user_uid VARCHAR(255) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
+CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
+
diff --git a/turba/scripts/sql/turba.sql b/turba/scripts/sql/turba.sql
new file mode 100644 (file)
index 0000000..c3c4904
--- /dev/null
@@ -0,0 +1,93 @@
+CREATE TABLE turba_objects (
+    object_id VARCHAR(32) NOT NULL,
+    owner_id VARCHAR(255) NOT NULL,
+    object_type VARCHAR(255) DEFAULT 'Object' NOT NULL,
+    object_uid VARCHAR(255),
+    object_members BLOB,
+    object_firstname VARCHAR(255),
+    object_lastname VARCHAR(255),
+    object_middlenames VARCHAR(255),
+    object_nameprefix VARCHAR(32),
+    object_namesuffix VARCHAR(32),
+    object_alias VARCHAR(32),
+    object_photo BLOB,
+    object_phototype VARCHAR(10),
+    object_bday VARCHAR(10),
+    object_homestreet VARCHAR(255),
+    object_homepob VARCHAR(10),
+    object_homecity VARCHAR(255),
+    object_homeprovince VARCHAR(255),
+    object_homepostalcode VARCHAR(10),
+    object_homecountry VARCHAR(255),
+    object_workstreet VARCHAR(255),
+    object_workpob VARCHAR(10),
+    object_workcity VARCHAR(255),
+    object_workprovince VARCHAR(255),
+    object_workpostalcode VARCHAR(10),
+    object_workcountry VARCHAR(255),
+    object_tz VARCHAR(32),
+    object_geo VARCHAR(255),
+    object_email VARCHAR(255),
+    object_homephone VARCHAR(25),
+    object_workphone VARCHAR(25),
+    object_cellphone VARCHAR(25),
+    object_fax VARCHAR(25),
+    object_pager VARCHAR(25),
+    object_title VARCHAR(255),
+    object_role VARCHAR(255),
+    object_logo BLOB,
+    object_logotype VARCHAR(10),
+    object_company VARCHAR(255),
+    object_category VARCHAR(80),
+    object_notes TEXT,
+    object_url VARCHAR(255),
+    object_freebusyurl VARCHAR(255),
+    object_pgppublickey TEXT,
+    object_smimepublickey TEXT,
+    PRIMARY KEY(object_id)
+);
+
+CREATE INDEX turba_owner_idx ON turba_objects (owner_id);
+CREATE INDEX turba_email_idx ON turba_objects (object_email);
+CREATE INDEX turba_firstname_idx ON turba_objects (object_firstname);
+CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
+
+CREATE TABLE turba_shares (
+    share_id INT NOT NULL,
+    share_name VARCHAR(255) NOT NULL,
+    share_owner VARCHAR(255) NOT NULL,
+    share_flags SMALLINT NOT NULL DEFAULT 0,
+    perm_creator SMALLINT NOT NULL DEFAULT 0,
+    perm_default SMALLINT NOT NULL DEFAULT 0,
+    perm_guest SMALLINT NOT NULL DEFAULT 0,
+    attribute_name VARCHAR(255) NOT NULL,
+    attribute_desc VARCHAR(255),
+    attribute_params TEXT,
+    PRIMARY KEY (share_id)
+);
+
+CREATE INDEX turba_shares_share_name_idx ON turba_shares (share_name);
+CREATE INDEX turba_shares_share_owner_idx ON turba_shares (share_owner);
+CREATE INDEX turba_shares_perm_creator_idx ON turba_shares (perm_creator);
+CREATE INDEX turba_shares_perm_default_idx ON turba_shares (perm_default);
+CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
+
+CREATE TABLE turba_shares_groups (
+    share_id INT NOT NULL,
+    group_uid VARCHAR(255) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_groups_share_id_idx ON turba_shares_groups (share_id);
+CREATE INDEX turba_shares_groups_group_uid_idx ON turba_shares_groups (group_uid);
+CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
+
+CREATE TABLE turba_shares_users (
+    share_id INT NOT NULL,
+    user_uid VARCHAR(255) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
+CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
diff --git a/turba/scripts/sql/turba.xml b/turba/scripts/sql/turba.xml
new file mode 100644 (file)
index 0000000..0ec8afe
--- /dev/null
@@ -0,0 +1,578 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<database>
+
+ <name><variable>name</variable></name>
+ <create>false</create>
+ <overwrite>false</overwrite>
+
+ <table>
+
+  <name>turba_objects</name>
+
+  <declaration>
+
+   <field>
+    <name>object_id</name>
+    <type>text</type>
+    <length>32</length>
+    <notnull>true</notnull>
+   </field>
+
+   <field>
+    <name>owner_id</name>
+    <type>text</type>
+    <length>255</length>
+    <notnull>true</notnull>
+   </field>
+
+   <field>
+    <name>object_type</name>
+    <type>text</type>
+    <length>255</length>
+    <notnull>true</notnull>
+    <default>Object</default>
+   </field>
+
+   <field>
+    <name>object_uid</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_members</name>
+    <type>clob</type>
+   </field>
+
+   <field>
+    <name>object_firstname</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_lastname</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_middlenames</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_nameprefix</name>
+    <type>text</type>
+    <length>32</length>
+   </field>
+
+   <field>
+    <name>object_namesuffix</name>
+    <type>text</type>
+    <length>32</length>
+   </field>
+
+   <field>
+    <name>object_alias</name>
+    <type>text</type>
+    <length>32</length>
+   </field>
+
+   <field>
+    <name>object_photo</name>
+    <type>blob</type>
+   </field>
+
+   <field>
+    <name>object_phototype</name>
+    <type>text</type>
+    <length>10</length>
+   </field>
+
+   <field>
+    <name>object_bday</name>
+    <type>text</type>
+    <length>10</length>
+   </field>
+
+   <field>
+    <name>object_homestreet</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_homepob</name>
+    <type>text</type>
+    <length>10</length>
+   </field>
+
+   <field>
+    <name>object_homecity</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_homeprovince</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_homepostalcode</name>
+    <type>text</type>
+    <length>10</length>
+   </field>
+
+   <field>
+    <name>object_homecountry</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_workstreet</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_workpob</name>
+    <type>text</type>
+    <length>10</length>
+   </field>
+
+   <field>
+    <name>object_workcity</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_workprovince</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_workpostalcode</name>
+    <type>text</type>
+    <length>10</length>
+   </field>
+
+   <field>
+    <name>object_workcountry</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_tz</name>
+    <type>text</type>
+    <length>32</length>
+   </field>
+
+   <field>
+    <name>object_geo</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_email</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_homephone</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_workphone</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_cellphone</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_fax</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_pager</name>
+    <type>text</type>
+    <length>25</length>
+   </field>
+
+   <field>
+    <name>object_title</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_role</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_logo</name>
+    <type>blob</type>
+   </field>
+
+   <field>
+    <name>object_logotype</name>
+    <type>text</type>
+    <length>10</length>
+   </field>
+
+   <field>
+    <name>object_company</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_category</name>
+    <type>text</type>
+    <length>80</length>
+   </field>
+
+   <field>
+    <name>object_notes</name>
+    <type>clob</type>
+   </field>
+
+   <field>
+    <name>object_url</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_freebusyurl</name>
+    <type>text</type>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>object_pgppublickey</name>
+    <type>clob</type>
+   </field>
+
+   <field>
+    <name>object_smimepublickey</name>
+    <type>clob</type>
+   </field>
+
+   <index>
+    <name>turba_primary</name>
+    <primary>true</primary>
+    <field>
+     <name>object_id</name>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_owner</name>
+    <field>
+     <name>owner_id</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_email</name>
+    <field>
+     <name>object_email</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_firstname</name>
+    <field>
+     <name>object_firstname</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_lastname</name>
+    <field>
+     <name>object_lastname</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+  </declaration>
+
+ </table>
+
+  <table>
+
+  <name>turba_shares</name>
+
+  <declaration>
+
+   <field>
+    <name>share_id</name>
+    <type>integer</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>4</length>
+   </field>
+
+   <field>
+    <name>share_name</name>
+    <type>text</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>share_owner</name>
+    <type>text</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>share_flags</name>
+    <type>integer</type>
+    <default>0</default>
+    <notnull>true</notnull>
+    <length>2</length>
+   </field>
+
+   <field>
+    <name>perm_creator</name>
+    <type>integer</type>
+    <default>0</default>
+    <notnull>true</notnull>
+    <length>2</length>
+   </field>
+
+   <field>
+    <name>perm_default</name>
+    <type>integer</type>
+    <default>0</default>
+    <notnull>true</notnull>
+    <length>2</length>
+   </field>
+
+   <field>
+    <name>perm_guest</name>
+    <type>integer</type>
+    <default>0</default>
+    <notnull>true</notnull>
+    <length>2</length>
+   </field>
+
+   <field>
+    <name>attribute_name</name>
+    <type>text</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>attribute_desc</name>
+    <type>text</type>
+    <default></default>
+    <notnull>false</notnull>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>attribute_params</name>
+    <type>clob</type>
+   </field>
+
+   <index>
+    <name>turba_shares_share_name</name>
+    <field>
+     <name>share_name</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_share_owner</name>
+    <field>
+     <name>share_owner</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_perm_creator</name>
+    <field>
+     <name>perm_creator</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_perm_default</name>
+    <field>
+     <name>perm_default</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_perm_guest</name>
+    <field>
+     <name>perm_guest</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_pKey</name>
+    <primary>true</primary>
+    <field>
+     <name>share_id</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+  </declaration>
+
+ </table>
+
+ <table>
+
+  <name>turba_shares_groups</name>
+
+  <declaration>
+
+   <field>
+    <name>share_id</name>
+    <type>integer</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>4</length>
+   </field>
+
+   <field>
+    <name>group_uid</name>
+    <type>text</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>perm</name>
+    <type>integer</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>2</length>
+   </field>
+
+   <index>
+    <name>turba_shares_groups_share_id</name>
+    <field>
+     <name>share_id</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_groups_group_uid</name>
+    <field>
+     <name>group_uid</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_groups_perm</name>
+    <field>
+     <name>perm</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+  </declaration>
+
+ </table>
+
+ <table>
+
+  <name>turba_shares_users</name>
+
+  <declaration>
+
+   <field>
+    <name>share_id</name>
+    <type>integer</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>4</length>
+   </field>
+
+   <field>
+    <name>user_uid</name>
+    <type>text</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>255</length>
+   </field>
+
+   <field>
+    <name>perm</name>
+    <type>integer</type>
+    <default></default>
+    <notnull>true</notnull>
+    <length>2</length>
+   </field>
+
+   <index>
+    <name>turba_shares_users_share_id</name>
+    <field>
+     <name>share_id</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_users_user_uid</name>
+    <field>
+     <name>user_uid</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+   <index>
+    <name>turba_shares_users_perm</name>
+    <field>
+     <name>perm</name>
+     <sorting>ascending</sorting>
+    </field>
+   </index>
+
+  </declaration>
+
+ </table>
+
+</database>
diff --git a/turba/scripts/upgrades/1.1_to_1.2.sql b/turba/scripts/upgrades/1.1_to_1.2.sql
new file mode 100644 (file)
index 0000000..d921cc1
--- /dev/null
@@ -0,0 +1,21 @@
+-- You can simply execute this file in your database.
+--
+-- For MySQL run:
+--
+-- $ mysql --user=root --password=<MySQL-root-password> <db name> < 1.1_to_1.2.sql
+--
+-- Or, for PostgreSQL:
+--
+-- $ psql <db name> -f 1.1_to_1.2.sql
+
+ALTER TABLE turba_objects CHANGE object_homeAddress object_homeaddress VARCHAR(255);
+ALTER TABLE turba_objects CHANGE object_workAddress object_workaddress VARCHAR(255);
+ALTER TABLE turba_objects CHANGE object_homePhone object_homephone VARCHAR(25);
+ALTER TABLE turba_objects CHANGE object_workPhone object_workphone VARCHAR(25);
+ALTER TABLE turba_objects CHANGE object_cellPhone object_cellphone VARCHAR(25);
+ALTER TABLE turba_objects MODIFY object_title VARCHAR(255);
+ALTER TABLE turba_objects MODIFY object_company VARCHAR(255);
+ALTER TABLE turba_objects ADD object_type VARCHAR(255) NOT NULL DEFAULT 'Object';
+ALTER TABLE turba_objects ADD object_members BLOB;
+CREATE INDEX turba_owner_idx ON turba_objects (owner_id);
+
diff --git a/turba/scripts/upgrades/1.2_to_2.0.oci8.sql b/turba/scripts/upgrades/1.2_to_2.0.oci8.sql
new file mode 100644 (file)
index 0000000..9935ca4
--- /dev/null
@@ -0,0 +1,4 @@
+ALTER TABLE turba_objects ADD object_uid VARCHAR(255);
+ALTER TABLE turba_objects ADD object_freebusyurl VARCHAR(255);
+ALTER TABLE turba_objects ADD object_smimepublickey CLOB;
+ALTER TABLE turba_objects ADD object_pgppublickey CLOB;
diff --git a/turba/scripts/upgrades/1.2_to_2.0.sql b/turba/scripts/upgrades/1.2_to_2.0.sql
new file mode 100644 (file)
index 0000000..65b090e
--- /dev/null
@@ -0,0 +1,15 @@
+-- You can simply execute this file in your database.
+--
+-- For MySQL run:
+--
+-- $ mysql --user=root --password=<MySQL-root-password> <db name> < 1.2_to_2.0.sql
+--
+-- Or, for PostgreSQL:
+--
+-- $ psql <db name> -f 1.2_to_2.0.sql
+
+
+ALTER TABLE turba_objects ADD COLUMN object_uid VARCHAR(255);
+ALTER TABLE turba_objects ADD COLUMN object_freebusyurl VARCHAR(255);
+ALTER TABLE turba_objects ADD COLUMN object_smimepublickey TEXT;
+ALTER TABLE turba_objects ADD COLUMN object_pgppublickey TEXT;
diff --git a/turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.mssql.sql b/turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.mssql.sql
new file mode 100644 (file)
index 0000000..117e30c
--- /dev/null
@@ -0,0 +1,39 @@
+CREATE TABLE turba_shares (
+    share_id INT NOT NULL,
+    share_name VARCHAR(255) NOT NULL,
+    share_owner VARCHAR(32) NOT NULL,
+    share_flags SMALLINT NOT NULL DEFAULT 0,
+    perm_creator SMALLINT NOT NULL DEFAULT 0,
+    perm_default SMALLINT NOT NULL DEFAULT 0,
+    perm_guest SMALLINT NOT NULL DEFAULT 0,
+    attribute_name VARCHAR(255) NOT NULL,
+    attribute_desc VARCHAR(255),
+    attribute_params VARCHAR(MAX),
+    PRIMARY KEY (share_id)
+);
+
+CREATE INDEX turba_shares_share_name_idx ON turba_shares (share_name);
+CREATE INDEX turba_shares_share_owner_idx ON turba_shares (share_owner);
+CREATE INDEX turba_shares_perm_creator_idx ON turba_shares (perm_creator);
+CREATE INDEX turba_shares_perm_default_idx ON turba_shares (perm_default);
+CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
+
+CREATE TABLE turba_shares_groups (
+    share_id INT NOT NULL,
+    group_uid INT NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_groups_share_id_idx ON turba_shares_groups (share_id);
+CREATE INDEX turba_shares_groups_group_uid_idx ON turba_shares_groups (group_uid);
+CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
+
+CREATE TABLE turba_shares_users (
+    share_id INT NOT NULL,
+    user_uid VARCHAR(32) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
+CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
diff --git a/turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.oci8.sql b/turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.oci8.sql
new file mode 100644 (file)
index 0000000..983783a
--- /dev/null
@@ -0,0 +1,39 @@
+CREATE TABLE turba_shares (
+    share_id INT NOT NULL,
+    share_name VARCHAR2(255) NOT NULL,
+    share_owner VARCHAR2(32) NOT NULL,
+    share_flags SMALLINT NOT NULL DEFAULT 0,
+    perm_creator SMALLINT NOT NULL DEFAULT 0,
+    perm_default SMALLINT NOT NULL DEFAULT 0,
+    perm_guest SMALLINT NOT NULL DEFAULT 0,
+    attribute_name VARCHAR2(255) NOT NULL,
+    attribute_desc VARCHAR2(255),
+    attribute_params VARCHAR2(4000),
+    PRIMARY KEY (share_id)
+);
+
+CREATE INDEX turba_shares_share_name_idx ON turba_shares (share_name);
+CREATE INDEX turba_shares_share_owner_idx ON turba_shares (share_owner);
+CREATE INDEX turba_shares_perm_creator_idx ON turba_shares (perm_creator);
+CREATE INDEX turba_shares_perm_default_idx ON turba_shares (perm_default);
+CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
+
+CREATE TABLE turba_shares_groups (
+    share_id INT NOT NULL,
+    group_uid INT NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_groups_share_id_idx ON turba_shares_groups (share_id);
+CREATE INDEX turba_shares_groups_group_uid_idx ON turba_shares_groups (group_uid);
+CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
+
+CREATE TABLE turba_shares_users (
+    share_id INT NOT NULL,
+    user_uid VARCHAR2(32) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
+CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
diff --git a/turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.pgsql.sql b/turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.pgsql.sql
new file mode 100644 (file)
index 0000000..44173e0
--- /dev/null
@@ -0,0 +1,39 @@
+CREATE TABLE turba_shares (
+    share_id SMALLINT NOT NULL,
+    share_name VARCHAR(255) NOT NULL,
+    share_owner VARCHAR(32) NOT NULL,
+    share_flags SMALLINT NOT NULL DEFAULT 0,
+    perm_creator SMALLINT NOT NULL DEFAULT 0,
+    perm_default SMALLINT NOT NULL DEFAULT 0,
+    perm_guest SMALLINT NOT NULL DEFAULT 0,
+    attribute_name VARCHAR(255) NOT NULL,
+    attribute_desc VARCHAR(255),
+    attribute_params TEXT,
+    PRIMARY KEY (share_id)
+);
+
+CREATE INDEX turba_shares_share_name_idx ON turba_shares (share_name);
+CREATE INDEX turba_shares_share_owner_idx ON turba_shares (share_owner);
+CREATE INDEX turba_shares_perm_creator_idx ON turba_shares (perm_creator);
+CREATE INDEX turba_shares_perm_default_idx ON turba_shares (perm_default);
+CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
+
+CREATE TABLE turba_shares_groups (
+    share_id SMALLINT NOT NULL,
+    group_uid SMALLINT NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_groups_share_id_idx ON turba_shares_groups (share_id);
+CREATE INDEX turba_shares_groups_group_uid_idx ON turba_shares_groups (group_uid);
+CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
+
+CREATE TABLE turba_shares_users (
+    share_id SMALLINT NOT NULL,
+    user_uid VARCHAR(32) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
+CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
diff --git a/turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.sql b/turba/scripts/upgrades/2.1_to_2.2_add_sql_share_tables.sql
new file mode 100644 (file)
index 0000000..e42cfbf
--- /dev/null
@@ -0,0 +1,40 @@
+CREATE TABLE turba_shares (
+    share_id INT NOT NULL,
+    share_name VARCHAR(255) NOT NULL,
+    share_owner VARCHAR(32) NOT NULL,
+    share_flags SMALLINT NOT NULL DEFAULT 0,
+    perm_creator SMALLINT NOT NULL DEFAULT 0,
+    perm_default SMALLINT NOT NULL DEFAULT 0,
+    perm_guest SMALLINT NOT NULL DEFAULT 0,
+    attribute_name VARCHAR(255) NOT NULL,
+    attribute_desc VARCHAR(255),
+    attribute_params TEXT,
+    PRIMARY KEY (share_id)
+);
+
+CREATE INDEX turba_shares_share_name_idx ON turba_shares (share_name);
+CREATE INDEX turba_shares_share_owner_idx ON turba_shares (share_owner);
+CREATE INDEX turba_shares_perm_creator_idx ON turba_shares (perm_creator);
+CREATE INDEX turba_shares_perm_default_idx ON turba_shares (perm_default);
+CREATE INDEX turba_shares_perm_guest_idx ON turba_shares (perm_guest);
+
+CREATE TABLE turba_shares_groups (
+    share_id INT NOT NULL,
+    group_uid INT NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_groups_share_id_idx ON turba_shares_groups (share_id);
+CREATE INDEX turba_shares_groups_group_uid_idx ON turba_shares_groups (group_uid);
+CREATE INDEX turba_shares_groups_perm_idx ON turba_shares_groups (perm);
+
+CREATE TABLE turba_shares_users (
+    share_id INT NOT NULL,
+    user_uid VARCHAR(32) NOT NULL,
+    perm SMALLINT NOT NULL
+);
+
+CREATE INDEX turba_shares_users_share_id_idx ON turba_shares_users (share_id);
+CREATE INDEX turba_shares_users_user_uid_idx ON turba_shares_users (user_uid);
+CREATE INDEX turba_shares_users_perm_idx ON turba_shares_users (perm);
+
diff --git a/turba/scripts/upgrades/2.1_to_2.2_sql_schema.php b/turba/scripts/upgrades/2.1_to_2.2_sql_schema.php
new file mode 100755 (executable)
index 0000000..5572edb
--- /dev/null
@@ -0,0 +1,303 @@
+#!/usr/bin/php
+<?php
+/**
+ * Very basic migration script for moving to the Turba 2.2 default sql schema.
+ *
+ * Note: This is NOT complete yet, but will get your Turba 2.1 data into
+ * enough shape to run with the new default sql schema in Turba 2.2.
+ *
+ * It is HIGHLY RECOMMENDED to back up your current Turba tables BEFORE
+ * attempting this upgrade!
+ *
+ * Copyright 2007-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ */
+
+/* Set this variable to 'true' to activate the script. */
+$for_real = false;
+
+/* You must set these to an appropriate user/pass/table for your server. */
+$db_user = 'root';
+$db_pass = '';
+$db_table = 'turba_objects';
+
+/* Allow skipping of parsing certain fields.
+ * You can force fields to not be parsed by setting the field to false
+ * below. */
+$do_name = true;
+$do_home = true;
+$do_work = true;
+$do_email = true;
+
+/* YOU SHOULD NOT HAVE TO TOUCH ANYTHING BELOW THIS LINE */
+@define('AUTH_HANDLER', true);
+@define('HORDE_BASE', dirname(__FILE__) . '/../../..');
+
+/* Set up the CLI environment */
+require_once HORDE_BASE . '/lib/core.php';
+if (!Horde_Cli::runningFromCli()) {
+    exit("Must be run from the command line\n");
+}
+$cli = &Horde_Cli::singleton();
+$cli->init();
+
+/* Grab what we need to steal the DB config */
+require_once HORDE_BASE . '/config/conf.php';
+require_once 'Horde/Form.php';
+require 'Horde/NLS/carsigns.php';
+require_once 'DB.php';
+
+$config = $GLOBALS['conf']['sql'];
+$config['username'] = $db_user;
+$config['password'] = $db_pass;
+unset($config['charset']);
+$db = DB::connect($config);
+if (is_a($db, 'PEAR_Error')) {
+    Horde::fatal($db, __FILE__, __LINE__);
+}
+if (!$for_real) {
+    $cli->message('No changes will done to the existing data. Please read the comments in the code, then set the $for_real flag to true before running.', 'cli.message');
+}
+
+/* Define how to transform the address book table */
+$queries = array(
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_firstname VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_lastname VARCHAR(255)',
+    'UPDATE ' . $db_table . ' SET object_lastname = object_name',
+    'ALTER TABLE ' . $db_table . ' DROP COLUMN object_name',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_middlenames VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_nameprefix VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_namesuffix VARCHAR(32)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_phototype VARCHAR(10)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_bday VARCHAR(10)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_homestreet VARCHAR(255)',
+    'UPDATE ' . $db_table . ' SET object_homestreet = object_homeaddress',
+    'ALTER TABLE ' . $db_table . ' DROP COLUMN object_homeaddress',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_homepob VARCHAR(10)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_homecity VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_homeprovince VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_homepostalcode VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_homecountry VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_workstreet VARCHAR(255)',
+    'UPDATE ' . $db_table . ' SET object_workstreet = object_workaddress',
+    'ALTER TABLE ' . $db_table . ' DROP COLUMN object_workaddress',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_workpob VARCHAR(10)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_workcity VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_workprovince VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_workpostalcode VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_workcountry VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_tz VARCHAR(32)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_geo VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_pager VARCHAR(25)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_role VARCHAR(255)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_logotype VARCHAR(10)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_category VARCHAR(80)',
+    'ALTER TABLE ' . $db_table . ' ADD COLUMN object_url VARCHAR(255)',
+    'CREATE INDEX turba_email_idx ON ' . $db_table . ' (object_email)',
+    'CREATE INDEX turba_firstname_idx ON ' . $db_table . ' (object_firstname)',
+    'CREATE INDEX turba_lastname_idx ON ' . $db_table . ' (object_lastname)',
+);
+switch ($config['phptype']) {
+case 'mssql':
+    $queries[] = 'ALTER TABLE ' . $db_table . ' ADD COLUMN object_photo VARBINARY(MAX)';
+    $queries[] = 'ALTER TABLE ' . $db_table . ' ADD COLUMN object_logo VARBINARY(MAX)';
+    break;
+case 'pgsql':
+    $queries[] = 'ALTER TABLE ' . $db_table . ' ADD COLUMN object_photo TEXT';
+    $queries[] = 'ALTER TABLE ' . $db_table . ' ADD COLUMN object_logo TEXT';
+    break;
+default:
+    $queries[] = 'ALTER TABLE ' . $db_table . ' ADD COLUMN object_photo BLOB';
+    $queries[] = 'ALTER TABLE ' . $db_table . ' ADD COLUMN object_logo BLOB';
+    break;
+}
+
+/* Perform the queries */
+/* @TODO - Better error handling */
+$error = false;
+foreach ($queries as $query) {
+    if ($for_real) {
+        $results = $db->query($query);
+        if (is_a($results, 'PEAR_Error')) {
+            $cli->message($results->toString(), 'cli.error');
+            $error = true;
+            continue;
+        }
+    }
+    $cli->message($query, 'cli.success');
+}
+if ($error &&
+    $cli->prompt('Continue?', array('y' => 'Yes', 'n' => 'No'), 'n') != 'y') {
+    exit(1);
+}
+
+/* Attempt to transform the fullname into lastname and firstname */
+if ($do_name) {
+    require_once HORDE_BASE . '/turba/lib/Turba.php';
+    $sql = 'SELECT object_id, ' . ($for_real ? 'object_lastname' : 'object_name') . ' FROM ' . $db_table;
+    $names = $db->getAssoc($sql);
+    if (is_a($names, 'PEAR_Error')) {
+        $cli->message($names->toString(), 'cli.error');
+        exit(1);
+    }
+    $insert_query = 'UPDATE ' . $db_table . ' SET object_firstname = ?, object_lastname = ? WHERE object_id = ?';
+    if (!$for_real) {
+        $cli->writeln($insert_query);
+    }
+    $insert = $db->prepare($insert_query);
+    foreach ($names as $id => $name ) {
+        $lastname = Turba::guessLastName($name);
+        $firstname = '';
+        if (strpos($name, ',') !== false) {
+            $firstname = preg_replace('/' . preg_quote($lastname, '/') . ',\s*/', '', $name);
+        } elseif ($name != $lastname) {
+            $firstname = preg_replace('/\s+' . preg_quote($lastname, '/') . '/', '', $name);
+        }
+        if ($for_real) {
+            $db->execute($insert, array($firstname, $lastname, $id));
+        } else {
+            $cli->writeln("ID=$id\nFirst name: $firstname; Last name: $lastname; Name: $name\n");
+        }
+    }
+    $cli->message('Contact name fields parsed.', 'cli.success');
+} else {
+    $cli->message('Contact name fields SKIPPED.', 'cli.success');
+}
+
+if ($do_home) {
+    $sql = 'SELECT object_id, ' . ($for_real ? 'object_homestreet' : 'object_homeaddress') . ' FROM ' . $db_table;
+    $addresses = $db->getAssoc($sql);
+    if (is_a($addresses, 'PEAR_Error')) {
+        $cli->message($addresses->toString(), 'cli.error');
+        exit(1);
+    }
+    $insert_query = 'UPDATE ' . $db_table . ' SET object_homestreet = ?, object_homecity = ?, object_homeprovince = ?, object_homepostalcode = ?, object_homecountry = ? WHERE object_id = ?';
+    if (!$for_real) {
+        $cli->writeln($insert_query);
+    }
+    $insert = $db->prepare($insert_query);
+    parseAddress($addresses, $insert, $for_real);
+    $cli->message('Home address fields parsed.', 'cli.success');
+} else {
+    $cli->message('Home address fields SKIPPED.', 'cli.success');
+}
+
+if ($do_work) {
+    $sql = 'SELECT object_id, ' . ($for_real ? 'object_workstreet' : 'object_workaddress') . ' FROM ' . $db_table;
+    $addresses = $db->getAssoc($sql);
+    if (is_a($addresses, 'PEAR_Error')) {
+        $cli->message($addresses->toString(), 'cli.error');
+        exit(1);
+    }
+    $insert_query = 'UPDATE ' . $db_table . ' SET object_workstreet = ?, object_workcity = ?, object_workprovince = ?, object_workpostalcode = ?, object_workcountry = ? WHERE object_id = ?';
+    if (!$for_real) {
+        $cli->writeln($insert_query);
+    }
+    $insert = $db->prepare($insert_query);
+    parseAddress($addresses, $insert, $for_real);
+    $cli->message('Work address fields parsed.', 'cli.success');
+} else {
+    $cli->message('Work address fields SKIPPED.', 'cli.success');
+}
+
+if ($do_email) {
+    $sql = 'SELECT object_id, object_email FROM ' . $db_table;
+    $emails = $db->getAssoc($sql);
+    if (is_a($emails, 'PEAR_Error')) {
+        $cli->message($emails->toString(), 'cli.error');
+        exit(1);
+    }
+   $insert_query = 'UPDATE ' . $db_table . ' SET object_email = ? WHERE object_id = ?';
+    if (!$for_real) {
+        $cli->writeln($insert_query);
+    }
+    if ($for_real) {
+        $insert = $db->prepare($insert_query);
+        foreach ($emails as $id => $email) {
+            $db->execute($insert, array(getBareEmail($email), $id));
+        }
+    } else {
+        $cli->writeln($insert_query);
+    }
+}
+
+/**
+ * Helper function to parse out freeform addresses
+ *
+ * Try to parse out the free form addresses.
+ * Assumptions we make to fit into our schema:
+ * - Postal code is on the same line as state/province information
+ * - If there is a line following the state/province/postal code line,
+ *   it is taken as a country.
+ * - Any lines before the postal code are treated as street address.
+ *
+ * @param array $addresses   An array of addresses to parse.
+ * @param object $insert     A prepared update query to write the results.
+ * @param boolean $for_real  Whether to really change any data.
+ */
+function parseAddress($addresses, $insert, $for_real)
+{
+    global $countries;
+
+    foreach ($addresses as $id => $address) {
+        if (empty($address)) {
+            continue;
+        }
+        $city = $state = $postalCode = $street = $country = '';
+        $p_address = Horde_Form_Type_address::parse($address);
+        if (!count($p_address)) {
+            $street = $address;
+        } else {
+            if (!empty($p_address['street'])) {
+                $street = $p_address['street'];
+            }
+            if (!empty($p_address['city'])) {
+                $city = $p_address['city'];
+            }
+            if (!empty($p_address['state'])) {
+                $state = $p_address['state'];
+            }
+            if (!empty($p_address['zip'])) {
+                $postalCode = $p_address['zip'];
+            }
+            if (!empty($p_address['country'])) {
+                $country = isset($countries[Horde_String::upper($p_address['country'])])
+                    ? $countries[Horde_String::upper($p_address['country'])]
+                    : Horde_String::upper($p_address['country']);
+            }
+        }
+        if ($for_real) {
+            $GLOBALS['db']->execute($insert, array($street, $city, $state, $postalCode, $country, $id));
+        } else {
+            $GLOBALS['cli']->writeln("ID: $id\nStreet: $street\nCity: $city\nState: $state\nPostal Code: $postalCode\nCountry: $country\nAddress:\n$address\n");
+        }
+    }
+}
+
+/**
+ * Static function to make a given email address rfc822 compliant.
+ *
+ * @param string $address  An email address.
+ *
+ * @return string  The RFC822-formatted email address.
+ */
+function getBareEmail($address)
+{
+    // Empty values are still empty.
+    if (!$address) {
+        return $address;
+    }
+
+    require_once 'Mail/RFC822.php';
+    require_once 'Horde/Mime/Address.php';
+
+    static $rfc822;
+    if (is_null($rfc822)) {
+        $rfc822 = new Mail_RFC822();
+    }
+
+    $rfc822->validateMailbox($address);
+    return Horde_Mime_Address::writeAddress($address->mailbox, $address->host);
+}
diff --git a/turba/scripts/upgrades/2.2.1_to_2.3.pgsql.sql b/turba/scripts/upgrades/2.2.1_to_2.3.pgsql.sql
new file mode 100644 (file)
index 0000000..e809eaf
--- /dev/null
@@ -0,0 +1,3 @@
+ALTER TABLE turba_shares ALTER share_owner TYPE VARCHAR(255);
+ALTER TABLE turba_shares_users ALTER user_uid TYPE VARCHAR(255);
+ALTER TABLE turba_shares_groups ALTER group_uid TYPE VARCHAR(255);
diff --git a/turba/scripts/upgrades/2.2.1_to_2.3.sql b/turba/scripts/upgrades/2.2.1_to_2.3.sql
new file mode 100644 (file)
index 0000000..2429538
--- /dev/null
@@ -0,0 +1,3 @@
+ALTER TABLE turba_shares CHANGE share_owner share_owner VARCHAR(255);
+ALTER TABLE turba_shares_users CHANGE user_uid user_uid VARCHAR(255);
+ALTER TABLE turba_shares_groups CHANGE group_uid group_uid VARCHAR(255);
diff --git a/turba/scripts/upgrades/2005-09-23_flat_comments.php b/turba/scripts/upgrades/2005-09-23_flat_comments.php
new file mode 100755 (executable)
index 0000000..0972991
--- /dev/null
@@ -0,0 +1,65 @@
+#!/usr/bin/php
+<?php
+/**
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Jan Schneider <jan@horde.org>
+ */
+
+@define('AUTH_HANDLER', true);
+@define('HORDE_BASE', dirname(__FILE__) . '/../../..');
+
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+
+// Make sure no one runs this from the web.
+if (!Horde_Cli::runningFromCLI()) {
+    exit("Must be run from the command line\n");
+}
+
+// Load the CLI environment - make sure there's no time limit, init some
+// variables, etc.
+Horde_Cli::init();
+
+@define('TURBA_BASE', dirname(__FILE__) . '/../..');
+require_once TURBA_BASE . '/lib/base.php';
+
+// Instantiate DataTree.
+require_once 'Horde/DataTree.php';
+$driver = $conf['datatree']['driver'];
+$params = array_merge(Horde::getDriverConfig('datatree', $driver),
+                      array('group' => 'agora.forums.turba'));
+$datatree = &DataTree::singleton($driver, $params);
+
+// Load comments.
+$forums = $datatree->get(DATATREE_FORMAT_TREE, DATATREE_ROOT);
+if (!is_array($forums[DATATREE_ROOT])) {
+    exit("No comments.\n");
+}
+
+// Loop through comments.
+$converted = 0;
+foreach ($forums[DATATREE_ROOT] as $source => $comments) {
+    if (!is_array($comments)) {
+        exit("Comments have already been flattened.\n");
+    }
+    $source_name = $datatree->getName($source);
+    foreach (array_keys($comments) as $comment) {
+        $name = $datatree->getName($comment);
+        $datatree->rename($name, $source_name . '.' . $datatree->getShortName($name));
+        $converted++;
+    }
+}
+$forums = $datatree->get(DATATREE_FORMAT_TREE, DATATREE_ROOT, true);
+foreach ($forums[DATATREE_ROOT] as $source => $comments) {
+    $source_name = $datatree->getName($source);
+    foreach (array_keys($comments) as $comment) {
+        $datatree->move($datatree->getName($comment));
+    }
+    $datatree->remove($source_name);
+}
+
+echo $converted . " comments flattened.\n";
diff --git a/turba/scripts/upgrades/2007-06-17_delete_old_vbooks.php b/turba/scripts/upgrades/2007-06-17_delete_old_vbooks.php
new file mode 100755 (executable)
index 0000000..04251ff
--- /dev/null
@@ -0,0 +1,68 @@
+#!/usr/bin/env php
+<?php
+/**
+ * This script deletes old virtual address books that will otherwise
+ * confuse the new Turba code.
+ */
+
+@define('AUTH_HANDLER', true);
+@define('TURBA_BASE', dirname(__FILE__) . '/../..');
+@define('HORDE_BASE', TURBA_BASE . '/..');
+
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+
+// Make sure no one runs this from the web.
+if (!Horde_Cli::runningFromCLI()) {
+    exit("Must be run from the command line\n");
+}
+
+// Load the CLI environment - make sure there's no time limit, init
+// some variables, etc.
+Horde_Cli::init();
+
+require_once TURBA_BASE . '/lib/base.php';
+
+// Re-load source config.
+// require TURBA_BASE . '/config/sources.php';
+
+// See if any of our sources are configured to use Horde_Share.
+if (empty($_SESSION['turba']['has_share'])) {
+    echo "No shares to convert. Done.\n";
+    exit(0);
+}
+
+$datatree = $turba_shares->_storage;
+$db = $datatree->_db;
+
+// Get the root vbook element.
+$sql = "SELECT datatree_id FROM horde_datatree WHERE group_uid = 'horde.shares.turba' AND datatree_name = 'vbook'";
+$vbook_parent = $db->getOne($sql);
+if (is_a($vbook_parent, 'PEAR_Error')) {
+    var_dump($vbook_parent);
+    exit(1);
+}
+$vbook_parent = (int)$vbook_parent;
+
+// Get child vbooks.
+$sql = "SELECT datatree_id FROM horde_datatree WHERE group_uid = 'horde.shares.turba' AND (datatree_parents = ':$vbook_parent' OR datatree_parents LIKE ':$vbook_parent:%')";
+$vbook_children = $db->getCol($sql);
+if (is_a($vbook_children, 'PEAR_Error')) {
+    var_dump($vbook_children);
+    exit(1);
+}
+
+// Build list of ids to delete.
+$datatree_ids = array($vbook_parent);
+foreach ($vbook_children as $child) {
+    $datatree_ids[] = (int)$child;
+}
+$datatree_ids = implode(',', $datatree_ids);
+
+// Delete.
+$db->query("DELETE FROM horde_datatree_attributes WHERE group_uid = 'horde.shares.turba' AND datatree_id IN ($datatree_ids)");
+$db->query("DELETE FROM horde_datatree WHERE group_uid = 'horde.shares.turba' AND datatree_id IN ($datatree_ids)");
+
+// Done.
+echo "Successfully deleted old virtual address books.\n";
+exit(0);
diff --git a/turba/scripts/upgrades/2007-06-17_flatten_shares.php b/turba/scripts/upgrades/2007-06-17_flatten_shares.php
new file mode 100755 (executable)
index 0000000..5aa47ed
--- /dev/null
@@ -0,0 +1,138 @@
+#!/usr/bin/env php
+<?php
+/**
+ * This script flattens shared address books out to meet the
+ * requirements of the future Share API.
+ */
+
+@define('AUTH_HANDLER', true);
+@define('TURBA_BASE', dirname(__FILE__) . '/../..');
+@define('HORDE_BASE', TURBA_BASE . '/..');
+
+// Do CLI checks and environment setup first.
+require_once HORDE_BASE . '/lib/core.php';
+
+// Make sure no one runs this from the web.
+if (!Horde_Cli::runningFromCLI()) {
+    exit("Must be run from the command line\n");
+}
+
+// Load the CLI environment - make sure there's no time limit, init
+// some variables, etc.
+Horde_Cli::init();
+
+require_once TURBA_BASE . '/lib/base.php';
+
+// Re-load source config.
+require TURBA_BASE . '/config/sources.php';
+
+// See if any of our sources are configured to use Horde_Share.
+if (empty($_SESSION['turba']['has_share'])) {
+    echo "No shares to convert. Done.\n";
+    exit(0);
+}
+
+// Check for multiple share-enabled backends and use the first one
+// as a 'primary' source - this is in case multiple backends would
+// have children with the same datatree_name (like when using two
+// SQL sources with shares for example
+foreach ($cfgSources as $type => $config) {
+    if (!empty($config['use_shares'])) {
+        $sourceTypes[] = $type;
+    }
+}
+$primary_source = $sourceTypes[0];
+$datatree = $turba_shares->_datatree;
+$db = $datatree->_db;
+
+// Get list of shares.
+$sql = "SELECT datatree_id, datatree_name, datatree_parents FROM horde_datatree WHERE group_uid = 'horde.shares.turba'";
+$datatree_elts = $db->getAssoc($sql);
+
+$changed_dns = array();
+
+// Look at each share, looking for orphans, old parent shares, etc.
+foreach ($datatree_elts as $id => $datatree_elt) {
+    $id = (int)$id;
+    $attributes = $db->getAll("SELECT * FROM horde_datatree_attributes WHERE datatree_id = $id");
+
+    // If there are no attributes, this will be an orphan. Delete it.
+    if (!count($attributes)) {
+        $db->query("DELETE FROM horde_datatree_attributes WHERE datatree_id = $id");
+        $db->query("DELETE FROM horde_datatree WHERE group_uid = 'horde.shares.turba' AND datatree_id = $id");
+        continue;
+    }
+
+    $datatree_name = $datatree_elt[0];
+    $datatree_parents = $datatree_elt[1];
+
+    // If there are no parents, this share is already flattened; ignore it.
+    if (empty($datatree_parents)) {
+        continue;
+    }
+
+    // Insert a new entry with the required params setting.
+    $source = $datatree_elts[substr($datatree_parents, 1)][0];
+
+    // I *really* don't like doing it this way, but I can't think of any other
+    // way to get the correct values for the 'name' param (at least without creating
+    // 'upgrade drivers' ;)
+    // In what way will this will affect kolab sources??
+    switch ($cfgSources[$source]['type']) {
+    case 'imsp':
+        foreach ($attributes as $attribute) {
+            if ($attribute[1] == 'name') {
+                $name = $attribute[3];
+            }
+
+            if ($attribute[1] == 'owner') {
+                $owner = $attribute[3];
+            }
+        }
+        $nameparam = $owner . '.' . $name;
+        break;
+
+    case 'sql':
+        foreach ($attributes as $attribute) {
+            if ($attribute[1] == 'uid') {
+                $nameparam = $attribute[3];
+                break;
+            }
+        }
+        break;
+    }
+
+    $db->query('INSERT INTO horde_datatree_attributes (datatree_id, attribute_name, attribute_key, attribute_value) VALUES (?, ?, ?, ?)',
+               array($id, 'params', '', serialize(array('source' => $source, 'name' => $nameparam))));
+
+    // Need to check for attribute_name of description and change it desc
+    $db->query('ALTER horde_datatree_attributes SET attribute_name = ? WHERE datatree_id = ? AND attribute_name = ?',
+               array('desc', $id, 'description'));
+
+    // See if we need to differentiate the datatree_name
+    // FIXME: Changing the datatree_name will break any contact lists
+    // with contacts from this source. We can update the SQL based lists here,
+    // but other sources will still break, and if we change the datatree_name
+    // here we will have no way to ever map contact list entries that broke
+    // to the correct list, since the original value is lost...maybe persist
+    // the original value somewhere in the share params then remove it after
+    // some sort of upgrade maint. is run after user's next login.
+    if ($source != $primary_source) {
+        $db->query('UPDATE horde_datatree SET datatree_name = ? WHERE datatree_id = ?', array($source . $datatree_name, $id));
+    }
+
+    // Delete old sourceType and uid settings.
+    $statement = $db->prepare('DELETE FROM horde_datatree_attributes WHERE datatree_id = ? AND attribute_name = ?');
+    $db->execute($statement, array($id, 'uid'));
+    $db->execute($statement, array($id, 'sourceType'));
+
+    // Get rid of the datatree_parents string.
+    $db->query('UPDATE horde_datatree SET datatree_parents = ? WHERE group_uid = ? AND datatree_id = ?',
+               array('', 'horde.shares.turba', $id));
+
+}
+
+// Done with actual shares
+echo "Successfully flattened shared address books.\n";
+
+exit(0);
diff --git a/turba/scripts/upgrades/2007-08-05_remove_lastname_null_constraint.sql b/turba/scripts/upgrades/2007-08-05_remove_lastname_null_constraint.sql
new file mode 100644 (file)
index 0000000..27f425b
--- /dev/null
@@ -0,0 +1,7 @@
+-- Simple upgrade script to remove the NOT NULL constraint on the
+-- default schema's object_lastname field.
+
+ALTER TABLE turba_objects MODIFY object_lastname VARCHAR(255);
+
+-- For posgresql:
+-- ALTER TABLE turba_objects ALTER object_lastname DROP NOT NULL;
diff --git a/turba/scripts/upgrades/2007-11-17_sql_schema.sql b/turba/scripts/upgrades/2007-11-17_sql_schema.sql
new file mode 100644 (file)
index 0000000..ecc781a
--- /dev/null
@@ -0,0 +1,14 @@
+ALTER TABLE turba_objects ADD object_middlenames VARCHAR(255);
+ALTER TABLE turba_objects ADD object_namesuffix VARCHAR(32);
+ALTER TABLE turba_objects ADD object_homepob VARCHAR(10);
+ALTER TABLE turba_objects ADD object_workpob VARCHAR(10);
+ALTER TABLE turba_objects ADD object_tz VARCHAR(32);
+ALTER TABLE turba_objects ADD object_geo VARCHAR(255);
+ALTER TABLE turba_objects ADD object_logo BLOB;
+ALTER TABLE turba_objects ADD object_logotype VARCHAR(10);
+
+ALTER TABLE turba_objects CHANGE object_blobtype object_phototype VARCHAR(10);
+
+CREATE INDEX turba_email_idx ON turba_objects (object_email);
+CREATE INDEX turba_firstname_idx ON turba_objects (object_firstname);
+CREATE INDEX turba_lastname_idx ON turba_objects (object_lastname);
diff --git a/turba/scripts/upgrades/2008-06-17_fix_varchar_lengths.sql b/turba/scripts/upgrades/2008-06-17_fix_varchar_lengths.sql
new file mode 100644 (file)
index 0000000..e8b962f
--- /dev/null
@@ -0,0 +1,2 @@
+ALTER TABLE turba_shares CHANGE share_owner share_owner VARCHAR(255);
+ALTER TABLE turba_shares_users CHANGE user_uid user_uid VARCHAR(255);
diff --git a/turba/scripts/upgrades/2008-09-23_fix_group_uid.sql b/turba/scripts/upgrades/2008-09-23_fix_group_uid.sql
new file mode 100644 (file)
index 0000000..6724d8f
--- /dev/null
@@ -0,0 +1 @@
+ALTER TABLE turba_shares_groups CHANGE group_uid group_uid VARCHAR(255);
diff --git a/turba/scripts/upgrades/convert_datatree_shares_to_sql.php b/turba/scripts/upgrades/convert_datatree_shares_to_sql.php
new file mode 100755 (executable)
index 0000000..6a11185
--- /dev/null
@@ -0,0 +1,204 @@
+#!/usr/bin/env php
+<?php
+/**
+ * This script migrates Turba's share data from the datatree Horde_Share
+ * driver to the new SQL Horde_Share driver. You should run the appropriate
+ * 2.1_to_2.2_add_sql_share_tables SQL creation script for your RDBMS before
+ * executing this script.
+ */
+
+@define('AUTH_HANDLER', true);
+@define('HORDE_BASE', dirname(__FILE__) . '/../../..');
+
+/* Set up the CLI environment */
+require_once HORDE_BASE . '/lib/core.php';
+if (!Horde_Cli::runningFromCli()) {
+    exit("Must be run from the command line\n");
+}
+$cli = &Horde_Cli::singleton();
+$cli->init();
+
+/* Grab what we need to steal the DB config */
+require_once HORDE_BASE . '/config/conf.php';
+require_once 'MDB2.php';
+
+$config = $GLOBALS['conf']['sql'];
+unset($config['charset']);
+$db = MDB2::factory($config);
+
+$error_cnt = 0;
+$delete_dt_data = false;
+$answer = $cli->prompt('Do you want to keep your old datatree data or delete it?', array('Keep', 'Delete'));
+if ($answer == 1) {
+    $delete_dt_data = true;
+}
+$answer = $cli->prompt(sprintf("Data will be copied into the new tables, and %s be deleted from the datatree.\n Is this what you want?", (($delete_dt_data) ? 'WILL' : 'WILL NOT')), array('y' => 'Yes', 'n' => 'No'));
+if ($answer != 'y') {
+    exit;
+}
+
+/* Get the share entries */
+$sql = 'SELECT datatree_id, datatree_name FROM horde_datatree WHERE '
+    . 'group_uid = \'horde.shares.turba\'';
+$shares_result = $db->query($sql);
+if (is_a($shares_result, 'PEAR_Error')) {
+    die($shares_result->toString());
+}
+
+while ($row = $shares_result->fetchRow(MDB2_FETCHMODE_ASSOC)) {
+    $share_id = $row['datatree_id'];
+    $share_name = $row['datatree_name'];
+
+    /* Build an array to hold the new row data */
+    $data = array('share_id' => $db->nextId('turba_shares'),
+                  'share_name' => $share_name);
+
+    $sql = 'SELECT attribute_name, attribute_key, attribute_value FROM horde_datatree_attributes WHERE datatree_id = ?';
+    $query = $db->prepare($sql);
+    $query_result = $query->execute($share_id);
+    $rows = $query_result->fetchAll(MDB2_FETCHMODE_ASSOC);
+    $users = array();
+    $groups = array();
+
+    foreach ($rows as $row) {
+        if ($row['attribute_name'] == 'perm_groups') {
+            /* Group table entry */
+            $groups[] = array('share_id' => $data['share_id'],
+                              'group_uid' => $row['attribute_key'],
+                              'perm' => $row['attribute_value']);
+        } elseif ($row['attribute_name'] == 'perm_users') {
+            /* User table entry */
+            $users[] = array('share_id' => $data['share_id'],
+                             'user_uid' => $row['attribute_key'],
+                             'perm' => $row['attribute_value']);
+        } else {
+            /* Everything else goes in the main share table */
+            switch ($row['attribute_name']) {
+            case 'perm_creator':
+            case 'perm_default':
+            case 'perm_guest':
+                $data[$row['attribute_name']] = $row['attribute_value'];
+                break;
+
+            case 'owner':
+                $data['share_owner'] = $row['attribute_value'];
+                break;
+
+            case 'name':
+                // Note the key to the $data array is not related to
+                // the attribute_name field in the dt_attributes table.
+                $data['attribute_name'] = $row['attribute_value'];
+                break;
+
+            case 'desc':
+                $data['attribute_desc'] = $row['attribute_value'];
+                break;
+
+            case 'params':
+                $data['attribute_params'] = $row['attribute_value'];
+                break;
+            }
+        }
+    }
+
+    /* Set flags */
+    $data['share_flags'] = 0;
+    if (count($users)) {
+        $data['share_flags'] |= 1;
+    }
+    if (count($groups)) {
+        $data['share_flags'] |= 2;
+    }
+
+    /* Insert the new data */
+    $cli->message('Migrating share data for share_id: ' . $share_id, 'cli.message');
+    $error = false;
+    $db->beginTransaction();
+    $result = insertData('turba_shares', $data);
+    if (is_a($result, 'PEAR_Error')) {
+        $cli->message($result->toString(), 'cli.error');
+        $error = true;
+    }
+    if (count($groups)) {
+        foreach ($groups as $group) {
+            $result = insertData('turba_shares_groups', $group);
+            if (is_a($result, 'PEAR_Error')) {
+                $cli->message($result->toString(), 'cli.error');
+                $error = true;
+            }
+        }
+    }
+    if (count($users)) {
+        foreach ($users as $user) {
+            $result = insertData('turba_shares_users', $user);
+            if (is_a($result, 'PEAR_Error')) {
+                $cli->message($result->toString(), 'cli.error');
+                $error = true;
+            }
+        }
+    }
+
+    /* Delete the datatree data, but ONLY if it was requested */
+    if ($delete_dt_data && !$error) {
+        $cli->message('DELETING datatree data for share_id: ' . $share_id, 'cli.message');
+        $delete = $db->prepare('DELETE FROM horde_datatree_attributes WHERE datatree_id = ?', null, MDB2_PREPARE_MANIP);
+        if (is_a($delete, 'PEAR_Error')) {
+            $cli->message($delete->toString(), 'cli.error');
+            $error = true;
+        } else {
+            $delete_result = $delete->execute(array($share_id));
+            if (is_a($delete_result, 'PEAR_Error')) {
+                $cli->message($delete_result->toString(), 'cli.error');
+                $error = true;
+            }
+        }
+        $delete->free();
+
+        $delete = $db->prepare('DELETE FROM horde_datatree WHERE datatree_id = ?', null, MDB2_PREPARE_MANIP);
+        if (is_a($delete, 'PEAR_Error')) {
+            $cli->message($delete->toString(), 'cli.error');
+            $error = true;
+        } else {
+            $delete_result = $delete->execute(array($share_id));
+            if (is_a($delete_result, 'PEAR_Error')) {
+                $cli->message($delete_result->toString(), 'cli.error');
+                $error = true;
+            }
+        }
+        $delete->free();
+    }
+
+    /* Cleanup */
+    $query_result->free();
+    unset($row, $rows, $data, $groups, $users);
+    if ($error) {
+        $db->rollback();
+        $cli->message('Rollback for share data for share_id: ' . $share_id, 'cli.message');
+        ++$error_cnt;
+    } else {
+        $db->commit();
+        $cli->message('Commit for share data for share_id: ' . $share_id, 'cli.message');
+    }
+}
+if ($error_cnt) {
+    $cli->message(sprintf("Encountered %u errors.", $error_cnt));
+}
+echo "\nDone.\n";
+
+/**
+ * Helper function
+ */
+function insertData($table, $data)
+{
+    $fields = array_keys($data);
+    $values = array_values($data);
+
+    $insert = $GLOBALS['db']->prepare('INSERT INTO ' . $table . ' (' . implode(', ', $fields) . ') VALUES (' . str_repeat('?, ', count($values) - 1) . '?)',
+                                      null, MDB2_PREPARE_MANIP);
+    if (is_a($insert, 'PEAR_Error')) {
+        return $insert;
+    }
+    $insert_result = $insert->execute($values);
+    $insert->free();
+    return $insert_result;
+}
diff --git a/turba/scripts/upgrades/public_to_horde_share.php b/turba/scripts/upgrades/public_to_horde_share.php
new file mode 100755 (executable)
index 0000000..09ee02c
--- /dev/null
@@ -0,0 +1,153 @@
+#!/usr/bin/php
+<?php
+/**
+ * Script to migrate an existing 'public' Turba address book to the
+ * Horde_Share based system.  This script is designed for a SQL source only.
+ * This script will move *ALL* existing entries in the turba_objects table into
+ * a single, globally shared Horde_Share owned by the user specified below.
+ * DO NOT RUN THIS SCRIPT UNLESS you have been using 'public' => true in
+ * a SQL source (such as 'localsql') - otherwise, you will turn every user's
+ * private address book into a public source!
+ *
+ * Copyright 2005-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author  Michael J. Rubinsky <mrubinsk@horde.org>
+ * @package Turba
+ */
+
+// Load Horde and Turba enviroments
+@define('AUTH_HANDLER', true);
+@define('HORDE_BASE', dirname(__FILE__) . '/../../..');
+@define('TURBA_BASE', dirname(__FILE__) . '/../..');
+require_once HORDE_BASE . '/lib/core.php';
+
+// Set up the CLI enviroment.
+if (!Horde_Cli::runningFromCLI()) {
+    exit("Must be run from the command line\n");
+}
+Horde_Cli::init();
+$CLI = &Horde_Cli::singleton();
+
+// Make sure we load Horde base to get the auth config
+require_once HORDE_BASE . '/lib/base.php';
+if ($conf['auth']['admins']) {
+    Horde_Auth::setAuth($conf['auth']['admins'][0], array());
+}
+
+// Now that we are authenticated, we can load Turba's base. Otherwise,
+// the share code breaks, causing a new, completely empty share to be
+// created on the DataTree with no owner.
+require_once TURBA_BASE . '/lib/base.php';
+
+$CLI->writeln('This script will turn all entries in the SQL address book into a globally shared address book.');
+$CLI->writeln('Make sure you read the script comments and be sure you know what you are doing.');
+$sure = $CLI->prompt('Are you ' . $CLI->bold('sure') . ' you want to do this?', array('no', 'yes'));
+if (!$sure) {
+    exit;
+}
+
+// Find out what our Auth driver will let us do and
+// get the list of all users if we can.  If your site
+// has a *large* number of users, you may want to comment
+// out this section to avoid unnecessary overhead.
+$authDriver = $conf['auth']['driver'];
+$auth = Horde_Auth::singleton($authDriver);
+if ($auth->hasCapability('list')) {
+    $users = $auth->listUsers();
+}
+
+// Get all the details.
+do {
+    $owner = $CLI->prompt('Username of the user you would like to own the new public source.');
+    // Might as well check this if we have the list.
+    if (!empty($users) && !in_array($owner, $users)) {
+        $CLI->message($owner . ' is not a valid user!', 'cli.error');
+        $owner = '';
+    }
+} while(!$owner);
+
+do {
+    $title = $CLI->prompt('Enter the title you would like to give to the new public source.');
+} while (!$title);
+
+$sourceKey = $CLI->prompt('What is the internal name of the share we are converting? [localsql]');
+if (!$sourceKey) {
+    $sourceKey = 'localsql';
+}
+
+// Create the new share.
+$owner_uid = md5(microtime());
+$share = &$turba_shares->newShare($sourceKey . ':' . $owner_uid);
+if (is_a($share, 'PEAR_Error')) {
+    var_dump($share);
+    exit;
+}
+$share->set('owner', $owner);
+$share->set('name', $title);
+$share->set('perm_default', PERMS_SHOW | PERMS_READ);
+$result = $turba_shares->addShare($share);
+if (is_a($result, 'PEAR_Error')) {
+    var_dump($result);
+    exit;
+}
+$share->save();
+$CLI->message('Created new Horde_Share object for the shared address book.', 'cli.success');
+
+// Share created, now get a Turba_Driver and make the changes.
+$driver = &Turba_Driver::singleton($sourceKey);
+if (is_a($driver, 'PEAR_Error')) {
+    var_dump($driver);
+    exit;
+}
+$db = & $driver->_db;
+if (is_a($db, 'PEAR_Error')) {
+    var_dump($db);
+}
+
+// Get the tablename in case we aren't using horde defaults.
+$tableName = $db->dsn['table'];
+$SQL = 'SELECT COUNT(*) FROM ' . $tableName . ';';
+$count = $db->getOne($SQL);
+$CLI->message("Moving $count contacts to $title.", 'cli.message');
+$SQL = 'UPDATE ' . $tableName . ' SET owner_id=\'' . $owner_uid . '\';';
+$result = $db->query($SQL);
+if (is_a($result, 'PEAR_Error')) {
+    var_dump($result);
+    exit;
+}
+$prefDriver = $conf['prefs']['driver'];
+if ($prefDriver == 'sql') {
+    // Automatically append this source to the addressbooks pref if desired.
+    $autoAppend = $CLI->prompt('Would you like to add the new public source to every user\'s address book preference?', array('no', 'yes'));
+    if ($autoAppend) {
+        $SQL = 'SELECT pref_uid, pref_value FROM horde_prefs WHERE pref_scope=\'turba\' AND pref_name=\'addressbooks\';';
+        $results = $db->getAll($SQL);
+        if (is_a($results, 'PEAR_Error')) {
+           $CLI->message('There was an error updating the user preferences: ' . $results->getMessage(), 'cli.error');
+        } else {
+            foreach ($results as $row) {
+                $newValue = $row[1] . "\n$sourceKey:$owner_uid";
+                $SQL = 'UPDATE horde_prefs SET pref_value=\'' . $newValue . '\' WHERE pref_uid=\'' . $row[0] . '\' AND pref_scope=\'turba\' AND pref_name=\'addressbooks\';';
+                $result = $db->query($SQL);
+                if (is_a($result, 'PEAR_Error')) {
+                    $CLI->message('Could not update preferences for ' . $row[0] . ': ' . $result->getMessage(), 'cli.error');
+                }
+            }
+        }
+        if (!is_a($results, 'PEAR_Error')) {
+            $CLI->message('Successfully added new shared address book to the user preferences.', 'cli.success');
+        }
+    }
+} else {
+    $CLI->message('Your preference backend does not support updating all user preferences.', 'cli.warning');
+    $CLI->message('Your users may have to manually add the new shared address book to their "addressbook" preference.', 'cli.warning');
+}
+
+// Share our success.
+$CLI->writeln($CLI->bold("*** $title successfully created ***"));
+$CLI->writeln('Share Info:');
+$CLI->writeln($CLI->indent('Title: ' . $share->get('name')));
+$CLI->writeln($CLI->indent('Owner: ' . $share->get('owner')));
diff --git a/turba/search.php b/turba/search.php
new file mode 100644 (file)
index 0000000..e8851fc
--- /dev/null
@@ -0,0 +1,201 @@
+<?php
+/**
+ * Turba search.php.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+/**
+ * Add a virtual address book for the current user.
+ *
+ * @param array  The parameters for this virtual address book.
+ *
+ * @return mixed  The virtual address book ID | PEAR_Error
+ */
+function _createVBook($params)
+{
+    $params = array(
+        'name' => $params['name'],
+        'params' => serialize(array('type' => 'vbook',
+                                    'source' => $params['source'],
+                                    'criteria' => $params['criteria'])));
+
+    $share = Turba::createShare(md5(microtime()), $params);
+    if (is_a($share, 'PEAR_Error')) {
+        return $share;
+    }
+
+    return $share->getName();
+}
+
+/**
+ * Check for requested changes in sort order and apply to prefs.
+ */
+function updateSortOrderFromVars()
+{
+    $vars = Horde_Variables::getDefaultVariables();
+    $source = Horde_Util::getFormData('source');
+
+    if (($sortby = $vars->get('sortby')) !== null && $sortby != '') {
+        $sources = Turba::getColumns();
+        $columns = isset($sources[$source]) ? $sources[$source] : array();
+        $column_name = Turba::getColumnName($sortby, $columns);
+
+        $append = true;
+        $ascending = ($vars->get('sortdir') == 0);
+        if ($vars->get('sortadd')) {
+            $sortorder = Turba::getPreferredSortOrder();
+            foreach ($sortorder as $i => $elt) {
+                if ($elt['field'] == $column_name) {
+                    $sortorder[$i]['ascending'] = $ascending;
+                    $append = false;
+                }
+            }
+        } else {
+            $sortorder = array();
+        }
+        if ($append) {
+            $sortorder[] = array('field' => $column_name,
+                                 'ascending' => $ascending);
+        }
+        $GLOBALS['prefs']->setValue('sortorder', serialize($sortorder));
+    }
+}
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+/* Verify if the search mode variable is passed in form or is
+ * registered in the session. Always use basic search by default. */
+if (Horde_Util::getFormData('search_mode')) {
+    $_SESSION['turba']['search_mode'] = Horde_Util::getFormData('search_mode');
+}
+if (!isset($_SESSION['turba']['search_mode'])) {
+    $_SESSION['turba']['search_mode'] = 'basic';
+}
+
+/* Get the current source. */
+$source = Horde_Util::getFormData('source', $default_source);
+if (!isset($cfgSources[$source])) {
+    reset($cfgSources);
+    $source = key($cfgSources);
+
+    /* If there are absolutely no valid sources, abort. */
+    if (!isset($cfgSources[$source])) {
+        $notification->push(_("No Address Books are currently available. Searching is disabled."), 'horde.error');
+        require TURBA_TEMPLATES . '/common-header.inc';
+        require TURBA_TEMPLATES . '/menu.inc';
+        require $registry->get('templates', 'horde') . '/common-footer.inc';
+        exit;
+    }
+}
+
+/* Grab the form data. */
+$criteria = Horde_Util::getFormData('criteria');
+$val = Horde_Util::getFormData('val');
+$action = Horde_Util::getFormData('actionID');
+$driver = Turba_Driver::singleton($source);
+if (is_a($driver, 'PEAR_Error')) {
+    $notification->push(sprintf(_("Failed to access the address book: %s"), $driver->getMessage()), 'horde.error');
+    $map = array();
+} else {
+    $map = $driver->getCriteria();
+    if ($_SESSION['turba']['search_mode'] == 'advanced') {
+        $criteria = array();
+        foreach ($map as $key => $value) {
+            if ($key != '__key') {
+                $val = Horde_Util::getFormData($key);
+                if (strlen($val)) {
+                    $criteria[$key] = $val;
+                }
+            }
+        }
+    }
+
+    /* Check for updated sort criteria */
+    updateSortOrderFromVars();
+
+    /* Only try to perform a search if we actually have search criteria. */
+    if ((is_array($criteria) && count($criteria)) || !empty($val)) {
+        if (Horde_Util::getFormData('save_vbook')) {
+            /* We create the vbook and redirect before we try to search
+             * since we are not displaying the search results on this page
+             * anyway. */
+            $vname = Horde_Util::getFormData('vbook_name');
+            if (empty($vname)) {
+                $notification->push(_("You must provide a name for virtual address books."), 'horde.error');
+                header('Location: ' . Horde::applicationUrl('search.php', true));
+                exit;
+            }
+
+            /* Create the vbook. */
+            $params = array(
+                'name' => $vname,
+                'source' => $source,
+                'criteria' => $_SESSION['turba']['search_mode'] == 'basic' ? array($criteria => $val) : $criteria,
+            );
+            $vid = _createVBook($params);
+            if (is_a($vid, 'PEAR_Error')) {
+                $notification->push(sprintf(_("There was a problem creating the virtual address book: %s"), $vid->getMessage()), 'horde.error');
+                header('Location: ' . Horde::applicationUrl('search.php', true));
+                exit;
+            }
+            $notification->push(sprintf(_("Successfully created virtual address book \"%s\""), $vname), 'horde.success');
+
+            $url = Horde::applicationURL('browse.php', true);
+            $url = Horde_Util::addParameter($url, array('source' => $vid, null, false));
+            header('Location: ' . $url);
+            exit;
+        }
+
+        /* Perform a search. */
+        if (($_SESSION['turba']['search_mode'] == 'basic' &&
+             is_object($results = $driver->search(array($criteria => $val)))) ||
+            ($_SESSION['turba']['search_mode'] == 'advanced' &&
+             is_object($results = $driver->search($criteria)))) {
+            if (is_a($results, 'PEAR_Error')) {
+                $notification->push($results, 'horde.error');
+            } else {
+                /* Read the columns to display from the preferences. */
+                $sources = Turba::getColumns();
+                $columns = isset($sources[$source]) ? $sources[$source] : array();
+                $results->sort(Turba::getPreferredSortOrder());
+
+                $view = new Turba_ListView($results, null, $columns);
+                $view->setType('search');
+            }
+        } else {
+            $notification->push(_("Failed to search the address book"), 'horde.error');
+        }
+    }
+}
+
+if ($_SESSION['turba']['search_mode'] == 'basic') {
+    $title = _("Basic Search");
+    $notification->push('document.directory_search.val.focus();', 'javascript');
+} else {
+    $title = _("Advanced Search");
+    $notification->push('document.directory_search.name.focus();', 'javascript');
+}
+
+Horde::addScriptFile('prototype.js', 'horde', true);
+Horde::addScriptFile('QuickFinder.js', 'horde', true);
+Horde::addScriptFile('effects.js', 'horde', true);
+Horde::addScriptFile('redbox.js', 'horde', true);
+require TURBA_TEMPLATES . '/common-header.inc';
+require TURBA_TEMPLATES . '/menu.inc';
+require TURBA_TEMPLATES . '/browse/search.inc';
+if ($_SESSION['turba']['search_mode'] == 'advanced') {
+    require TURBA_TEMPLATES . '/browse/search_criteria.inc';
+}
+require TURBA_TEMPLATES . '/browse/search_vbook.inc';
+if (isset($view) && is_object($view)) {
+    require TURBA_TEMPLATES . '/browse/javascript.inc';
+    require TURBA_TEMPLATES . '/browse/header.inc';
+    $view->display();
+}
+require $registry->get('templates', 'horde') . '/common-footer.inc';
diff --git a/turba/templates/.htaccess b/turba/templates/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/turba/templates/addressbook_list.php b/turba/templates/addressbook_list.php
new file mode 100644 (file)
index 0000000..dc19159
--- /dev/null
@@ -0,0 +1,39 @@
+<h1 class="header">
+ <?php echo _("Manage Address Books") ?>
+</h1>
+
+<div id="addressbook-list-buttons">
+ <form method="get" action="create.php">
+<?php echo Horde_Util::formInput() ?>
+  <input type="submit" class="button" value="<?php echo _("Create a new Address Book") ?>" />
+ </form>
+</div>
+
+<table summary="<?php echo _("Address Book List") ?>" cellspacing="0" id="addressbook-list" class="striped sortable">
+ <thead>
+  <tr>
+   <th class="addressbook-list-icon nosort"><?php echo $browse_img ?></th>
+<th class="sortdown"><?php echo _("Address Book") ?></th>
+   <th class="addressbook-list-icon nosort"><?php echo $edit_img ?></th>
+<?php if (empty($conf['share']['no_sharing'])): ?>
+   <th class="addressbook-list-icon nosort"><?php echo $perms_img ?></th>
+<?php endif; ?>
+   <th class="addressbook-list-icon nosort"><?php echo $delete_img ?></th>
+  </tr>
+ </thead>
+
+ <tbody>
+<?php foreach (array_keys($sorted_addressbooks) as $addressbook_id): ?>
+ <?php $addressbook = $addressbooks[$addressbook_id] ?>
+  <tr>
+   <td><a href="<?php echo Horde_Util::addParameter($browse_url_base, 'source', $addressbook->getName()) ?>" title="<?php echo _("Browse") ?>"><?php echo $browse_img ?></a></td>
+   <td><?php echo htmlspecialchars($addressbook->get('name')) ?></td>
+   <td><a href="<?php echo Horde_Util::addParameter($edit_url_base, 'a', $addressbook->getName()) ?>" title="<?php echo _("Edit") ?>"><?php echo $edit_img ?></a></td>
+<?php if (empty($conf['share']['no_sharing'])): ?>
+   <td><a onclick="return !popup(this.href);" href="<?php echo Horde_Util::addParameter($perms_url_base, 'share', $addressbook->getName()) ?>" target="_blank" title="<?php echo _("Change Permissions") ?>"><?php echo $perms_img ?></a></td>
+<?php endif; ?>
+   <td><a href="<?php echo Horde_Util::addParameter($delete_url_base, 'a', $addressbook->getName()) ?>" title="<?php echo _("Delete") ?>"><?php echo $delete_img ?></a></td>
+  </tr>
+<?php endforeach; ?>
+ </tbody>
+</table>
diff --git a/turba/templates/block/minisearch.inc b/turba/templates/block/minisearch.inc
new file mode 100644 (file)
index 0000000..70c052a
--- /dev/null
@@ -0,0 +1,24 @@
+<script type="text/javascript">
+function mini_search()
+{
+   $('turba_minisearch_searching', 'turba_minisearch_close', 'turba_minisearch_iframe').invoke('show');
+}
+function hide_mini_search()
+{
+   $('turba_minisearch_searching', 'turba_minisearch_close').invoke('hide');
+   var d = $('turba_minisearch_iframe').hide().contentWindow.document;
+   d.open();
+   d.close();
+}
+</script>
+
+<form name="turba_minisearch" action="<?php echo Horde::applicationUrl('minisearch.php') ?>" onsubmit="mini_search();" target="turba_minisearch_iframe">
+<?php Horde_Util::pformInput() ?>
+<?php echo Horde::label('search', _("Search for: ")) ?>
+<input name="search" id="search" size="35" />
+<input type="submit" class="button" value="<?php echo _("Search") ?>" />
+<input type="submit" class="button" style="display:none" value="<?php echo _("Close") ?>" id="turba_minisearch_close" onclick="hide_mini_search(); return false;" />
+<span id="turba_minisearch_searching" style="display:none"><?php echo Horde::img('loading.gif', '', '', $GLOBALS['registry']->getImageDir('horde'))?></span>
+</form>
+
+<div><iframe id="turba_minisearch_iframe" name="turba_minisearch_iframe" style="width:100%;border:none;display:none" frameborder="0" src="about:blank"></iframe></div>
diff --git a/turba/templates/browse/actions.inc b/turba/templates/browse/actions.inc
new file mode 100644 (file)
index 0000000..96dee8f
--- /dev/null
@@ -0,0 +1,54 @@
+<div class="control nowrap">
+<?php if ($hasDelete) {
+          echo Horde::widget('#', $this->getType() == 'list' ? _("Remove from this list") : _("Delete"), 'widget', '', "Submit('delete'); return false;", $this->getType() == 'list' ? _("_Remove from this list") : _("_Delete")) . ' | ';
+      }
+      if ($hasEdit) {
+          echo Horde::widget('#', _("Edit"), 'widget', '', "document.contacts.action='" . Horde::applicationUrl('edit.php') . "'; Submit('groupedit'); return false;", _("Edit")) . ' | ';
+      }
+?>
+ <?php if ($hasExport): ?>
+ <?php echo Horde::widget('#', _("Export"), 'widget', '', "document.contacts.action='" . Horde::applicationUrl('data.php') . "'; Submit('select'); return false;", _("Export")) . ' | ' ?>
+ <?php endif; ?>
+ <?php if (!empty($copymove_source_options)): $id = md5(mt_rand()); ?>
+ <form style="display:inline" name="f<?php echo $id ?>" action="javascript:void(0);" onsubmit="return false;">
+ <?php
+         if ($hasDelete) {
+             echo Horde::link('#', _("Move"), 'widget', '', "CopyMove('move', document.f" . $id . '.s' . $id . "); return false;") . _("Move") . '</a>, ';
+         }
+         echo Horde::link('#', _("Copy"), 'widget', '', "CopyMove('copy', document.f" . $id . '.s' . $id . "); return false;") . _("Copy") . '</a>';
+   ?>
+  <label for="s<?php echo $id ?>" class="hidden"><?php echo _("Target Address Book") ?></label>
+  <select name="s<?php echo $id ?>" id="s<?php echo $id ?>">
+   <option value=""><?php echo _("to a different Address Book") ?></option>
+   <?php echo $copymove_source_options ?>
+  </select>
+ </form> |
+ <?php endif; ?>
+
+ <?php if ($addToList): $id = md5(mt_rand()); ?>
+ <form style="display:inline; background:inherit;" name="f<?php echo $id ?>" action="javascript:void(0);" onsubmit="return false;">
+  <?php echo Horde::link('#', _("Add to"), 'widget', '', "Add(document.f" . $id . '.s' . $id . "); return false;") . _("Add") . '</a>' ?>
+ <label for="s<?php echo $id ?>" class="hidden"><?php echo _("Target Contact List") ?></label>
+ <select name="s<?php echo $id ?>" id="s<?php echo $id ?>">
+  <option value=""><?php echo _("to a Contact List") ?></option>
+  <option value="" disabled="disabled">- - - - - - - - -</option>
+  <?php foreach ($addToList as $list): ?>
+  <?php if (is_array($list)): ?>
+  <option value="<?php echo $list['source'] . ($list['key'] ? ':' . $list['key'] : '') ?>"><?php echo $list['name'] ?></option>
+  <?php else: ?>
+  <option value="" disabled="disabled"><?php echo $list ?></option>
+  <?php endif; endforeach; ?>
+ </select>
+ </form>
+ <?php endif; ?>
+
+<?php
+$browse_link = Horde::applicationUrl('browse.php');
+if ($this->getType() == 'directory' &&
+    !empty($cfgSources[$default_source]['map']['__type'])) {
+    printf(_("Show %s"), Horde::widget(Horde_Util::addParameter($browse_link, 'show', 'lists'), _("Show Lists"), 'widget', '', '', _("_Lists")) . ', ' .
+        Horde::widget(Horde_Util::addParameter($browse_link, 'show', 'contacts'), _("Show Contacts"), 'widget', '', '', _("_Contacts")) . ', ' .
+        Horde::widget(Horde_Util::addParameter($browse_link, 'show', 'all'), _("Show Both"), 'widget', '', '', _("Both")));
+}
+?>
+</div>
diff --git a/turba/templates/browse/column_footers.inc b/turba/templates/browse/column_footers.inc
new file mode 100644 (file)
index 0000000..ce707d1
--- /dev/null
@@ -0,0 +1,9 @@
+</tbody>
+</table>
+<input type="hidden" name="actionID" value="" />
+<input type="hidden" name="show" value="<?php echo htmlspecialchars(Horde_Util::getFormData('show', 'all')) ?>" />
+<input type="hidden" name="key" value="<?php echo htmlspecialchars(Horde_Util::getFormData('key')) ?>" />
+<input type="hidden" name="targetAddressbook" value="" />
+<input type="hidden" name="targetList" value="" />
+<input type="hidden" name="targetNew" value="" />
+</form>
diff --git a/turba/templates/browse/column_headers.inc b/turba/templates/browse/column_headers.inc
new file mode 100644 (file)
index 0000000..45019ce
--- /dev/null
@@ -0,0 +1,48 @@
+<form method="post" name="contacts" id="contacts" action="browse.php">
+<input type="hidden" name="source" value="<?php echo htmlspecialchars($GLOBALS['default_source']) ?>" />
+<?php echo Horde_Util::formInput() ?>
+<table cellspacing="0" width="100%" class="linedRow">
+<thead>
+ <tr>
+<?php $col_count = count($this->columns) + 1; if ($this->showMark): $col_count++; ?>
+  <th class="item leftAlign" width="1%" style="cursor:pointer" onclick="document.contacts.checkAll.checked = !document.contacts.checkAll.checked; SelectAll();" nowrap="nowrap"><label for="checkAll" class="hidden"><?php echo _("Check All/None") ?></label><input type="checkbox" id="checkAll" name="checkAll" onclick="document.contacts.checkAll.checked = !document.contacts.checkAll.checked; SelectAll();" <?php echo Horde::getAccessKeyAndTitle(_("Check _All/None")) ?> /></th>
+<?php endif; ?>
+<?php if ($this->showEdit): $col_count++; ?>
+  <th class="item" width="1%"><?php echo Horde::img('edit.png', _("Edit"), '', $GLOBALS['registry']->getImageDir('horde')) ?></th>
+<?php endif; ?>
+<?php if ($this->showVcard): $col_count++; ?>
+  <th class="item" width="1%"><?php echo Horde::img('mime/vcard.png', _("vCard"), '', $GLOBALS['registry']->getImageDir('horde')) ?></th>
+<?php endif; ?>
+<?php if ($this->showGroup): $col_count++; ?>
+  <th class="item" width="1%"><?php echo Horde::img('group.png', _("List")) ?></th>
+<?php endif; ?>
+  <?php $s_url = Horde_Util::removeParameter(Horde::selfUrl(true), array('sortadd', 'sortby', 'sortdir')); for ($i = 0, $imax = count($this->columns); $i <= $imax; ++$i): ?>
+    <?php $columnlabel = $GLOBALS['attributes'][$i == 0 ? 'name' : $this->getColumnName($i)]['label']; ?>
+  <th class="<?php echo ($this->showSort && $this->isSortColumn($i)) ? 'selected' : 'item' ?> leftAlign" width="<?php echo $width ?>%" nowrap="nowrap">
+<?php if ($this->showSort): ?>
+   <?php if ($this->isSortColumn($i)): ?>
+      <?php $sortdir = $this->getColumnSortDirection($i); ?>
+      <?php $changetitle = sprintf(_("Change %s sort to %s"), $columnlabel, $sortdir == 0 ? _("descending") : _("ascending")) ?>
+      <a class="widget" title="<?php echo $changetitle ?>" href="<?php echo Horde_Util::addParameter($s_url, array('sortadd' => 1, 'sortby' => $i, 'sortdir' => abs(1 - $sortdir))) ?>"><?php echo $this->getColumnSortImage($i) ?></a>
+      <?php $changetitle = sprintf(_("Sort by %s only"), $columnlabel) ?>
+      <a class="widget" title="<?php echo $changetitle ?>" href="<?php echo Horde_Util::addParameter($s_url, array('sortby' => $i, 'sortdir' => abs(1 - $sortdir))) ?>">
+   <?php else: ?>
+      <?php $sorttitle = sprintf(_("Sort by %s, then by %s"), $this->getSortOrderDescription(), $columnlabel) ?>
+      <a class="widget" title="<?php echo $sorttitle ?>" href="<?php echo Horde_Util::addParameter($s_url, array('sortadd' => 1, 'sortby' => $i, 'sortdir' => 0)) ?>"><?php echo $this->getColumnSortImage($i, $sorttitle) ?></a>
+      <a class="widget" title="<?php echo sprintf(_("Sort by %s"), $columnlabel) ?>" href="<?php echo Horde_Util::addParameter($s_url, array('sortby' => $i, 'sortdir' => 0)) ?>">
+   <?php endif; ?>
+<?php endif; ?>
+   <?php echo $columnlabel ?>
+<?php if ($this->showSort): ?></a><?php endif; ?>
+  </th>
+  <?php endfor; ?>
+ </tr>
+</thead>
+<tbody id="QuickFinderEmpty" style="display:none">
+ <tr>
+  <td colspan="<?php echo $col_count ?>">
+   <?php echo _("No contacts match the current filter.") ?>
+  </td>
+ </tr>
+</tbody>
+<tbody id="QuickFinderContacts">
diff --git a/turba/templates/browse/header.inc b/turba/templates/browse/header.inc
new file mode 100644 (file)
index 0000000..2419edc
--- /dev/null
@@ -0,0 +1,11 @@
+<div class="header">
+ <?php echo htmlspecialchars($title) ?>
+ <a id="quicksearchL" href="<?php echo Horde::applicationUrl('search.php') ?>" title="<?php echo _("Search") ?>" onclick="$('quicksearchL').hide(); $('quicksearch').show(); $('quicksearchT').focus(); return false;"><?php echo Horde::img('search.png', _("Search"), '', $GLOBALS['registry']->getImageDir('horde')) ?></a>
+ <div id="quicksearch" style="display:none">
+  <input type="text" name="quicksearchT" id="quicksearchT" for="QuickFinderContacts" empty="QuickFinderEmpty" />
+  <small>
+   <a title="<?php echo _("Close Search") ?>" href="#" onclick="$('quicksearch').hide(); $('quicksearchT').value = ''; QuickFinder.filter($('quicksearchT')); $('quicksearchL').show(); return false;">X</a>
+   <?php echo Horde::link(Horde::applicationUrl('search.php')) . _("More Options...") ?></a>
+  </small>
+ </div>
+</div>
diff --git a/turba/templates/browse/javascript.inc b/turba/templates/browse/javascript.inc
new file mode 100644 (file)
index 0000000..9f536ac
--- /dev/null
@@ -0,0 +1,88 @@
+<script type="text/javascript">
+
+function AnySelected()
+{
+    for (i = 0; i < document.contacts.elements.length; i++) {
+        if (document.contacts.elements[i].checked) {
+            return true;
+        }
+    }
+    return false;
+}
+
+function Add(select)
+{
+    if (!AnySelected()) {
+        window.alert('<?php echo addslashes(_("You must select at least one contact first.")) ?>');
+        return false;
+    }
+
+    key = select[select.selectedIndex].value;
+    if (key == '') {
+        alert('<?php echo addslashes(_("You must select a target contact list.")) ?>');
+        return false;
+    }
+
+    if (key.indexOf(':') == -1 || key.lastIndexOf(':') == key.length - 1) {
+        var newList = window.prompt('<?php echo addslashes(_("Please name the new contact list:")) ?>\n', '');
+        if (newList != null && newList != '') {
+            if (key.lastIndexOf(':') == key.length - 1) {
+                key = key.substr(0, key.length - 1);
+            }
+            document.contacts.targetAddressbook.value = key;
+            document.contacts.targetNew.value = 1;
+            document.contacts.targetList.value = newList;
+        } else {
+            return false;
+        }
+    } else {
+        document.contacts.targetList.value = key;
+    }
+
+    Submit('add');
+}
+
+function CopyMove(action, select)
+{
+    if (!AnySelected()) {
+        window.alert('<?php echo addslashes(_("You must select at least one contact first.")) ?>');
+        return false;
+    }
+
+    key = select[select.selectedIndex].value;
+    if (key == '') {
+        alert('<?php echo addslashes(_("You must select a target address book.")) ?>');
+        return false;
+    }
+
+    document.contacts.targetAddressbook.value = key;
+    Submit(action);
+}
+
+function Submit(action)
+{
+    if (AnySelected()) {
+        if (action != 'delete' ||
+            confirm('<?php echo addslashes(_("Are you sure that you want to delete the selected contacts?")) ?>')) {
+            document.contacts.actionID.value = action;
+            document.contacts.submit();
+        }
+    } else {
+        window.alert('<?php echo addslashes(_("You must select at least one contact first.")) ?>');
+        return false;
+    }
+}
+
+function SelectAll()
+{
+    for (var i = 0; i < document.contacts.elements.length; i++) {
+        document.contacts.elements[i].checked = document.contacts.checkAll.checked;
+    }
+}
+
+function confirmDelete(name)
+{
+    return confirm('<?php echo addslashes(_("Are you sure that you want to delete %s?")) ?>'.replace('%s', name));
+}
+
+</script>
diff --git a/turba/templates/browse/row.inc b/turba/templates/browse/row.inc
new file mode 100644 (file)
index 0000000..2d65d88
--- /dev/null
@@ -0,0 +1,114 @@
+<?php
+
+if ($ob->hasValue('name')) {
+    $link_text = htmlspecialchars(Turba::formatName($ob));
+} elseif (isset($ob->driver->alternativeName) &&
+          !in_array($ob->driver->alternativeName, $this->columns) &&
+          $ob->hasValue($ob->driver->alternativeName)) {
+    $link_text = htmlspecialchars($ob->getValue($ob->driver->alternativeName));
+} else {
+    $link_text = '<em>' . _("Blank name") . '</em>';
+}
+
+if ($own_source == $ob->getSource() && $own_id == $ob->getValue('__key')) {
+    $own_icon = Horde::img('user.png', _("Your own contact"),
+                           array('title' => _("Your own contact")),
+                           $GLOBALS['registry']->getImageDir('horde'));
+} else {
+    $own_icon = '&nbsp;';
+}
+
+$edit_url = $vcard_url = '&nbsp;';
+if ($ob->hasValue('__key')) {
+    $vcard_url = Horde_Util::addParameter('vcard.php',
+                                    array('source' => $ob->getSource(),
+                                          'key' => $ob->getValue('__key')));
+    $vcard_url = Horde::link(Horde::applicationUrl($vcard_url),
+                             _("Download vCard"))
+        . Horde::img('mime/vcard.png', _("Download vCard"), '',
+            $GLOBALS['registry']->getImageDir('horde'))
+        . '</a>';
+
+    $cell = Horde::link($ob->url()) . $link_text . '</a>';
+    if ($ob->hasPermission(PERMS_EDIT)) {
+        $edit_url = Horde_Util::addParameter(
+            'contact.php',
+            array('view' => 'EditContact',
+                  'source' => $ob->getSource(),
+                  'key' => $ob->getValue('__key'),
+                  'url' => Horde::selfUrl(true, false, true)));
+        $edit_url = Horde::link(Horde::applicationUrl($edit_url), _("Edit"))
+            . Horde::img('edit.png', _("Edit"), '',
+                         $GLOBALS['registry']->getImageDir('horde'))
+            . '</a>';
+    }
+} else {
+    $cell = $link_text;
+}
+
+?>
+<tr>
+<?php if ($this->showMark): ?>
+  <td><label for="<?php echo htmlspecialchars($ob->getSource() . ':' . $ob->getValue('__key')) ?>" class="hidden"><?php echo _("Select contact") ?></label><input type="checkbox" class="checkbox" name="objectkeys[]" id="<?php echo htmlspecialchars($ob->getSource() . ':' . $ob->getValue('__key')) ?>" value="<?php echo htmlspecialchars($ob->getSource() . ':' . $ob->getValue('__key')) ?>" /></td>
+<?php endif; ?>
+<?php if ($this->showEdit): ?>
+  <td><?php echo $edit_url ?></td>
+<?php endif; ?>
+<?php if ($this->showVcard): ?>
+  <td><?php echo $vcard_url ?></td>
+<?php endif; ?>
+<?php if ($this->showGroup): ?>
+  <td><?php echo $ob->isGroup() ? Horde::img('group.png', _("Group")) : $own_icon ?></td>
+<?php endif; ?>
+  <td<?php if ($this->showSort && $this->isSortColumn(0)) echo ' class="linedRowSelectedCol"' ?>><?php
+echo $cell;
+
+// We purposefully do this before the </td> so that if we end up including a
+// script file (say, for the IMP compose window), it's in a legal spot.
+//
+// Build the columns to display.
+$shown_columns = array();
+for ($c = 1; $c <= count($this->columns); $c++) {
+    $type = $GLOBALS['attributes'][$this->columns[$c - 1]]['type'];
+    $params = isset($GLOBALS['attributes'][$this->columns[$c - 1]]['params'])
+        ? $GLOBALS['attributes'][$this->columns[$c - 1]]['params']
+        : array();
+    if (!isset($this->variables[$this->columns[$c - 1]])) {
+        if ($type == 'email') {
+            $this->variables[$this->columns[$c - 1]] =
+                new Horde_Form_Variable('', $this->columns[$c - 1],
+                                        Horde_Form::getType('html'), false);
+        } else {
+            $this->variables[$this->columns[$c - 1]] =
+                new Horde_Form_Variable('', $this->columns[$c - 1],
+                                        Horde_Form::getType($type, $params),
+                                        false);
+        }
+    }
+    if ($ob->hasValue($this->columns[$c - 1])) {
+        $value = $ob->getValue($this->columns[$c - 1]);
+        $shown_columns[$c] = htmlspecialchars($value);
+        if ($type == 'email') {
+            $value = Turba::formatEmailAddresses($value,
+                                                 $ob->getValue('name'));
+        }
+        $this->vars->set($this->columns[$c - 1], $value);
+        $shown_columns[$c] = $this->renderer->render(
+            $this->form,
+            $this->variables[$this->columns[$c - 1]],
+            $this->vars);
+    } else {
+        $shown_columns[$c] = '&nbsp;';
+    }
+}
+
+echo '</td>';
+foreach ($shown_columns as $column => $value) {
+    echo '<td';
+    if ($this->showSort && $this->isSortColumn($column)) {
+        echo ' class="linedRowSelectedCol"';
+    }
+    echo '>' . $value . '</td>';
+}
+?>
+</tr>
diff --git a/turba/templates/browse/search.inc b/turba/templates/browse/search.inc
new file mode 100644 (file)
index 0000000..8d34d1e
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+/* Build the directory sources select widget. */
+$source_options = '';
+$criteria_options = '';
+$js_criteria = "var criteriaOptions = [];\n"
+    . "var shareSources = [];\n";
+
+$source_count = 0;
+foreach (Turba::getAddressBooks() as $key => $entry) {
+    $js_criteria .= "criteriaOptions[$source_count] = []\n"
+        . "criteriaOptions[$source_count][0] = '$key';\n";
+
+    /* Build the criteria select widget. */
+    $field_count = 1;
+    foreach ($entry['search'] as $field) {
+        $js_criteria .= "criteriaOptions[$source_count][$field_count] = ['$field', '" . $GLOBALS['attributes'][$field]['label'] . "'];\n";
+        if ($key == $source) {
+            $selected = ($criteria == $field) ? ' selected="selected"' : '';
+            $criteria_options .= "<option value=\"$field\"$selected>" .
+                htmlspecialchars($GLOBALS['attributes'][$field]['label']) . "</option>\n";
+        }
+        $field_count++;
+    }
+
+    $selected = ($key == $source) ? ' selected="selected"' : '';
+    $source_options .= "<option value=\"$key\"$selected>"
+        . htmlspecialchars($entry['title']) . "</option>\n";
+
+    $unique_source = $key;
+    $source_count++;
+
+    /* Remember vbooks and sources that are using shares. */
+    if ($entry['type'] != 'vbook') {
+        $js_criteria .= "shareSources['$key'] = true;\n";
+    } else {
+        $js_criteria .= "shareSources['$key'] = false;\n";
+    }
+}
+
+/* Build search mode tabs. */
+require_once 'Horde/UI/Tabs.php';
+$sUrl = Horde::applicationUrl('search.php');
+$vars = Horde_Variables::getDefaultVariables();
+$tabs = new Horde_UI_Tabs('search_mode', $vars);
+$tabs->addTab(_("Basic Search"), $sUrl, 'basic');
+$tabs->addTab(_("Advanced Search"), $sUrl, 'advanced');
+echo $tabs->render($_SESSION['turba']['search_mode']);
+
+?>
+<div class="text" style="padding:1em">
+<form name="directory_search" action="search.php" method="get" onsubmit="RedBox.loading(); return true;">
+<?php echo Horde_Util::formInput() ?>
+<?php if ($source_count == 1): ?>
+ <input type="hidden" name="source" value="<?php echo $unique_source ?>" />
+<?php endif; ?>
+
+<?php if ($_SESSION['turba']['search_mode'] == 'basic'): ?>
+<script type="text/javascript">
+<?php echo $js_criteria ?>
+function updateCriteria()
+{
+    var f = document.directory_search;
+    if (!f.source.options) {
+        return;
+    }
+
+    while (f.criteria.length > 0) {
+        f.criteria.options[f.criteria.length - 1] = null;
+    }
+
+    var index = f.source.selectedIndex;
+    if (!index) {
+        index = 0;
+    }
+
+    for (var i = 0; i < criteriaOptions.length; i++) {
+        if (criteriaOptions[i][0] == f.source.options[index].value) {
+            for (var j = 1; j < criteriaOptions[i].length; j++) {
+                f.criteria.options[f.criteria.length] = new Option(criteriaOptions[i][j][1], criteriaOptions[i][j][0]);
+            }
+            f.criteria.selectedIndex = 0;
+            if ($('vbook-form')) {
+                if (shareSources[criteriaOptions[i][0]] == true) {
+                    Element.show('vbook-form');
+                } else {
+                    Element.hide('vbook-form');
+                }
+            }
+            return;
+        }
+    }
+}
+Event.observe(window, 'load', updateCriteria);
+</script>
+
+<?php if ($source_count > 1): ?>
+ <strong><?php echo Horde::label('source', _("From")) ?></strong>
+ <select id="source" name="source" onchange="updateCriteria();">
+  <?php echo $source_options ?>
+ </select>
+<?php endif; ?>
+
+ <strong><?php echo Horde::label('criteria', _("Find")) ?></strong>
+ <select id="criteria" name="criteria">
+  <?php echo $criteria_options ?>
+ </select>
+
+ <strong><?php echo Horde::label('val', _("Matching")) ?></strong>
+ <input type="text" size="30" id="val" name="val" value="<?php echo htmlspecialchars($val) ?>" />
+ <input class="button" type="submit" name="search" value="<?php echo _("Search") ?>" />
+
+<?php else: ?>
+
+<table cellspacing="5" width="100%">
+ <tr>
+  <td>&nbsp;</td>
+  <td>
+   <input type="submit" class="button" name="search" value="<?php echo _("Search") ?>" />
+   <input type="reset" class="button" name="reset" value="<?php echo _("Reset to Defaults") ?>" />
+  </td>
+ </tr>
+ <?php if ($source_count > 1): ?>
+ <tr>
+  <td class="rightAlign"><strong><?php echo Horde::label('source', _("Address Book")) ?></strong></td>
+  <td class="leftAlign">
+   <select id="source" name="source" onchange="directory_search.submit()">
+    <?php echo $source_options ?>
+   </select>
+  </td>
+ </tr>
+ <?php endif; ?>
+<?php endif; ?>
diff --git a/turba/templates/browse/search_criteria.inc b/turba/templates/browse/search_criteria.inc
new file mode 100644 (file)
index 0000000..931fe61
--- /dev/null
@@ -0,0 +1,13 @@
+<?php
+foreach ($map as $name => $v) {
+    if (substr($name, 0, 2) != '__') {
+?>
+ <tr>
+  <td width="1%" class="nowrap rightAlign" ><strong><?php echo Horde::label($name, $GLOBALS['attributes'][$name]['label']) ?></strong></td>
+  <td class="leftAlign"><input type="text" size="30" id="<?php echo $name ?>" name="<?php echo $name ?>" value="<?php echo isset($criteria[$name]) ? htmlspecialchars($criteria[$name]) : '' ?>" /></td>
+ </tr>
+<?php
+    }
+}
+?>
+</table>
diff --git a/turba/templates/browse/search_vbook.inc b/turba/templates/browse/search_vbook.inc
new file mode 100644 (file)
index 0000000..087fdcb
--- /dev/null
@@ -0,0 +1,17 @@
+<?php if (!empty($_SESSION['turba']['has_share'])): ?>
+ <div id="vbook-form"<?php if (is_a($driver, 'Turba_Driver_vbook')) echo ' style="display:none"' ?>>
+  <input type="checkbox" id="save-vbook" name="save_vbook" />
+  <strong><?php echo Horde::label('save-vbook', _("Save search as a virtual address book?")) ?></strong>
+
+  <?php echo Horde::label('vbook_name', _("Name:")) ?>
+  <input type="text" id="vbook_name" name="vbook_name" />
+  <script type="text/javascript">
+  Event.observe($('vbook_name'), 'keyup', function() {
+      $('save-vbook').checked = $F('vbook_name') ? true : false;
+  });
+  </script>
+ </div>
+<?php endif; ?>
+</form>
+</div>
+<br />
diff --git a/turba/templates/common-header.inc b/turba/templates/common-header.inc
new file mode 100644 (file)
index 0000000..234db2b
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+global $language;
+if (isset($language)) {
+    header('Content-type: text/html; charset=' . Horde_Nls::getCharset());
+    header('Vary: Accept-Language');
+}
+?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd">
+<!-- Turba: Copyright 2000-2009 The Horde Project.  Turba is under an ASL license. -->
+<!--   Horde Project: http://www.horde.org/ | Turba: http://www.horde.org/turba/   -->
+<!--          Horde ASL License: http://www.horde.org/licenses/asl.php             -->
+<?php echo !empty($language) ? '<html lang="' . strtr($language, '_', '-') . '">' : '<html>' ?>
+<head>
+<?php
+
+$page_title = $registry->get('name');
+if (!empty($title)) $page_title .= ' :: ' . $title;
+if (!empty($refresh_time) && ($refresh_time > 0) && !empty($refresh_url)) {
+    echo "<meta http-equiv=\"refresh\" content=\"$refresh_time;url=$refresh_url\">\n";
+}
+Horde::includeScriptFiles();
+?>
+<title><?php echo htmlspecialchars($page_title) ?></title>
+<link href="<?php echo $GLOBALS['registry']->getImageDir()?>/favicon.ico" rel="SHORTCUT ICON" />
+<?php echo Horde::stylesheetLink('turba', empty($GLOBALS['print_view']) ? '' : 'print') ?>
+</head>
+
+<body<?php if ($bc = Horde_Util::nonInputVar('bodyClass')) echo ' class="' . $bc . '"' ?><?php if ($bi = Horde_Util::nonInputVar('bodyId')) echo ' id="' . $bi . '"'; ?>>
diff --git a/turba/templates/data/export.inc b/turba/templates/data/export.inc
new file mode 100644 (file)
index 0000000..916d5fb
--- /dev/null
@@ -0,0 +1,44 @@
+<form method="post" name="export" action="<?php echo Horde::downloadUrl(_("contacts.csv"), null, Horde::applicationUrl('data.php')) ?>">
+<?php echo Horde_Util::formInput() ?>
+<input type="hidden" name="actionID" value="export" />
+
+<h1 class="header">
+ <?php echo _("Export Address Book") ?>
+</h1>
+
+<div class="item">
+ <?php echo Horde::label('exportID', _("Select the export format:")) ?><br />
+ <select name="exportID" id="exportID">
+  <option value="<?php echo Horde_Data::EXPORT_CSV ?>"><?php echo _("Comma separated values") ?></option>
+  <option value="<?php echo Horde_Data::EXPORT_OUTLOOKCSV ?>"><?php echo _("Comma separated values (Microsoft Outlook)") ?></option>
+  <option value="<?php echo Horde_Data::EXPORT_TSV ?>"><?php echo _("Tab separated values") ?></option>
+  <option value="<?php echo Horde_Data::EXPORT_VCARD ?>"><?php echo _("vCard") ?></option>
+  <option value="ldif"><?php echo _("LDIF Address Book") ?></option>
+ </select><br />
+
+<?php if ($actionID == 'select' && Horde_Util::getFormData('objectkeys')): ?>
+ <br />
+ <input type="radio" name="selected" id="selected1" value="1" checked="checked" />
+ <?php echo Horde::label('selected1', _("Export only the selected contacts.")) ?>
+<?php foreach (Horde_Util::getFormData('objectkeys') as $key => $value): ?>
+ <input type="hidden" name="objectkeys[<?php echo htmlspecialchars($key) ?>]" value="<?php echo htmlspecialchars($value) ?>" />
+<?php endforeach; ?>
+ <br />
+ <input type="radio" name="selected" id="selected0" value="0" />
+ <?php echo Horde::label('selected0', _("Export the following address book completely.")) ?>
+ <br />
+<?php endif; ?>
+<?php if (count($source_options) > 1): ?>
+ <br />
+ <?php echo Horde::label('source', _("Select the address book to export from:")) ?><br />
+ <select name="source" id="source">
+  <?php echo implode('', $source_options) ?>
+ </select><br />
+<?php else: ?>
+ <input type="hidden" name="source" value="<?php echo htmlspecialchars($unique_source) ?>" />
+<?php endif; ?>
+ <br />
+
+ <input type="submit" value="<?php echo _("Export") ?>" class="button" />
+</div>
+</form>
diff --git a/turba/templates/data/import.inc b/turba/templates/data/import.inc
new file mode 100644 (file)
index 0000000..2076ad1
--- /dev/null
@@ -0,0 +1,50 @@
+<form method="post" name="import_form" enctype="multipart/form-data" action="data.php">
+<?php Horde_Util::pformInput() ?>
+<input type="hidden" name="actionID" value="<?php echo htmlspecialchars($next_step) ?>" />
+<input type="hidden" name="import_step" value="<?php echo (int)$import_step ?>" />
+
+<h1 class="header">
+ <?php printf(_("Import Address Book, Step %d"), (int)$import_step) ?>
+</h1>
+
+<div class="item">
+ <?php echo Horde::label('import_format', _("Select the format of the source file:")) ?><br />
+ <select name="import_format" id="import_format">
+  <option value="csv"><?php echo _("Comma separated values") ?></option>
+  <option value="tsv"><?php echo _("Tab separated values") ?></option>
+  <option value="vcard"><?php echo _("vCard") ?></option>
+  <option value="mulberry"><?php echo _("Mulberry Address Book") ?></option>
+  <option value="pine"><?php echo _("Pine Address Book") ?></option>
+  <option value="ldif"><?php echo _("LDIF Address Book") ?></option>
+ </select><br />
+
+ <input type="checkbox" align="middle" name="purge" id="purge" value="1" />
+ <?php echo Horde::label('purge', _("Replace existing address book with the imported one? <strong>Warning: This deletes all entries in your current address book.</strong>")) ?>
+ <br />
+
+<?php if (count($dest_options) > 1): ?>
+ <br />
+ <?php echo Horde::label('dest', _("Select the address book to import to:")) ?><br />
+ <select name="dest" id="dest">
+  <?php echo implode('', $dest_options) ?>
+ </select><br />
+<?php else: ?>
+ <input type="hidden" name="dest" value="<?php echo htmlspecialchars($unique_dest) ?>" />
+<?php endif; ?>
+ <br />
+
+ <?php echo Horde::label('charset', _("Select the charset of the source file:")) ?><br />
+ <select name="charset" id="charset" style="direction: ltr">
+<?php foreach ($charsets as $charset => $charset_name): ?>
+  <option value="<?php echo htmlspecialchars($charset) ?>"<?php if ($charset == $my_charset) echo ' selected="selected"' ?>><?php echo htmlspecialchars($charset_name) ?></option>
+<?php endforeach; ?>
+ </select>
+ <br /><br />
+
+ <?php echo Horde::label('import_file', _("Select the file to import:")) ?><br />
+ <input type="file" name="import_file" id="import_file" size="40" /><br /><br />
+ <input type="submit" value="<?php echo _("Next") ?>" class="button" />
+</div>
+</form>
+
+<br class="spacer" />
diff --git a/turba/templates/list/alphaPager.inc b/turba/templates/list/alphaPager.inc
new file mode 100644 (file)
index 0000000..5eeac3f
--- /dev/null
@@ -0,0 +1,24 @@
+<?php if ($this->count() > $prefs->getValue('perpage')): ?>
+<div class="turbaPager">
+<?php
+$show = Horde_Util::getFormData('show', 'all');
+$currentPage = Horde_String::upper($page);
+if ($currentPage == '*') {
+    echo '<strong>(' . _("All") . ')</strong>&nbsp;';
+} else {
+    echo Horde::link(Horde::applicationUrl(Horde_Util::addParameter($viewurl, array('page' => '*',
+                                                                              'show' => $show)))) . _("All") . '</a>&nbsp;';
+}
+for ($i = 65; $i < 91; $i++) {
+    $a = chr($i);
+    if ($currentPage == $a) {
+        echo '<strong>(' . $a . ')</strong>&nbsp;';
+    } else {
+        $link = Horde_Util::addParameter($viewurl, array('page' => $a,
+                                                   'show' => $show));
+        echo Horde::link(Horde::applicationUrl($link)) . $a . '</a>&nbsp;';
+    }
+}
+?>
+</div>
+<?php endif; ?>
diff --git a/turba/templates/list/numPager.inc b/turba/templates/list/numPager.inc
new file mode 100644 (file)
index 0000000..3fab8a2
--- /dev/null
@@ -0,0 +1,16 @@
+<div class="turbaPager">
+ <div class="leftFloat">
+  <strong><?php echo _("Contacts displayed:") ?></strong>
+<?php
+if ($numDisplayed) {
+    echo '[' . sprintf(_("%s to %s of %s"), $start, $end, $numitem) . ']';
+} else {
+    echo _("None");
+}
+echo '</div>';
+if (isset($pager)) {
+    echo $pager->render();
+}
+?>
+ <div class="clear"></div>
+</div>
diff --git a/turba/templates/menu.inc b/turba/templates/menu.inc
new file mode 100644 (file)
index 0000000..d064486
--- /dev/null
@@ -0,0 +1,16 @@
+<form name="directory_list" action="<?php echo Horde::applicationUrl('browse.php') ?>" method="get">
+<?php echo Horde_Util::formInput() ?>
+<div id="menu">
+<?php if ($browse_source_count > 1): ?>
+ <div class="rightFloat">
+  <label for="menu_source" class="hidden"><?php echo _("Source:") ?></label>
+  <select id="menu_source" name="source" onchange="document.directory_list.submit();"><?php echo $browse_source_options ?></select>
+  <noscript><input class="button" type="submit" value="<?php echo _("Browse") ?>" /></noscript>
+ </div>
+<?php endif; ?>
+ <div class="leftFloat">
+  <?php echo Turba::getMenu('string') ?>
+ </div>
+</div>
+</form>
+<?php $GLOBALS['notification']->notify(array('listeners' => 'status')) ?>
diff --git a/turba/templates/prefs/addressbookselect.inc b/turba/templates/prefs/addressbookselect.inc
new file mode 100644 (file)
index 0000000..0d9a1e9
--- /dev/null
@@ -0,0 +1,197 @@
+<?php
+
+$order = Turba::getAddressBookOrder();
+$js = "var addressbooks = [];\n";
+$source_count = 0;
+foreach ($GLOBALS['cfgSources'] as $source => $info) {
+    $selected = isset($order[$source]) ? 'true' : 'false';
+    $js .= "addressbooks[$source_count] = ['" . addslashes($source) . "', decodeURIComponent('" . rawurlencode($info['title']) . "'), $selected, " . (isset($order[$source]) ? (int)$order[$source] : 'null') . "];\n";
+    $source_count++;
+}
+
+if (!$prefs->isLocked('addressbooks') && $source_count):
+?>
+
+<script type="text/javascript">
+<!--
+<?php echo $js ?>
+
+function selectAddressBooks()
+{
+    var selected = [];
+    var unselected = [];
+    for (var i = 0; i < addressbooks.length; i++) {
+        if (addressbooks[i][2]) {
+            selected[addressbooks[i][3]] = [addressbooks[i][1], addressbooks[i][0]];
+        } else {
+            unselected[unselected.length] = [addressbooks[i][1], addressbooks[i][0]];
+        }
+    }
+    for (i = 0; i < selected.length; i++) {
+        f.selected_addressbooks.options[i + 1] = new Option(selected[i][0], selected[i][1]);
+    }
+    for (i = 0; i < unselected.length; i++) {
+        f.unselected_addressbooks.options[i + 1] = new Option(unselected[i][0], unselected[i][1]);
+    }
+}
+
+function deselectHeaders()
+{
+    document.prefs.unselected_addressbooks[0].selected = false;
+    document.prefs.selected_addressbooks[0].selected = false;
+}
+
+function resetHidden()
+{
+    var tmp = '';
+    for (var i = 1; i < f.selected_addressbooks.length; i++) {
+        if (tmp != '') {
+            tmp += '\n';
+        }
+        tmp += f.selected_addressbooks[i].value;
+    }
+    document.prefs.addressbooks.value = tmp;
+}
+
+function addAddressBook()
+{
+    for (i = 1; i < f.unselected_addressbooks.length; i++) {
+        if (f.unselected_addressbooks[i].selected) {
+            f.selected_addressbooks[f.selected_addressbooks.length] = new Option(f.unselected_addressbooks[i].text, f.unselected_addressbooks[i].value);
+            f.unselected_addressbooks[i] = null;
+            i--;
+        }
+    }
+
+    resetHidden();
+}
+
+function removeAddressBook()
+{
+    for (i = 1; i < f.selected_addressbooks.length; i++) {
+        if (f.selected_addressbooks[i].selected) {
+            f.unselected_addressbooks[f.unselected_addressbooks.length] = new Option(f.selected_addressbooks[i].text, f.selected_addressbooks[i].value)
+            f.selected_addressbooks[i] = null;
+            i--;
+        }
+    }
+
+    resetHidden();
+}
+
+function moveAddressBookUp()
+{
+    var sel = f.selected_addressbooks.selectedIndex;
+
+    if (sel <= 1 || f.selected_addressbooks.length <= 2) return;
+
+    // deselect everything but the first selected item
+    f.selected_addressbooks.selectedIndex = sel;
+    var up = f.selected_addressbooks[sel].value;
+
+    tmp = [];
+    for (i = 1; i < f.selected_addressbooks.length; i++) {
+        tmp[i - 1] = new Option(f.selected_addressbooks[i].text, f.selected_addressbooks[i].value)
+    }
+
+    for (i = 0; i < tmp.length; i++) {
+        if (i + 1 == sel - 1) {
+            f.selected_addressbooks[i + 1] = tmp[i + 1];
+        } else if (i + 1 == sel) {
+            f.selected_addressbooks[i + 1] = tmp[i - 1];
+        } else {
+            f.selected_addressbooks[i + 1] = tmp[i];
+        }
+    }
+
+    f.selected_addressbooks.selectedIndex = sel - 1;
+
+    for (i = 2; i < addressbooks.length - 1; i++) {
+        if (addressbooks[i][0] == up) {
+            addressbook = addressbooks[i];
+            addressbooks[i] = addressbooks[i - 1];
+            addressbooks[i - 1] = addressbook;
+        }
+    }
+
+    resetHidden();
+}
+
+function moveAddressBookDown()
+{
+    var sel = f.selected_addressbooks.selectedIndex;
+
+    if (sel == -1 || f.selected_addressbooks.length <= 2 || sel == f.selected_addressbooks.length - 1) return;
+
+    // deselect everything but the first selected item
+    f.selected_addressbooks.selectedIndex = sel;
+    var down = f.selected_addressbooks[sel].value;
+
+    tmp = [];
+    for (i = 1; i < f.selected_addressbooks.length; i++) {
+        tmp[i - 1] = new Option(f.selected_addressbooks[i].text, f.selected_addressbooks[i].value)
+    }
+
+    for (i = 0; i < tmp.length; i++) {
+        if (i + 1 == sel) {
+            f.selected_addressbooks[i + 1] = tmp[i + 1];
+        } else if (i + 1 == sel + 1) {
+            f.selected_addressbooks[i + 1] = tmp[i - 1];
+        } else {
+            f.selected_addressbooks[i + 1] = tmp[i];
+        }
+    }
+
+    f.selected_addressbooks.selectedIndex = sel + 1;
+
+    for (i = addressbooks.length - 2; i > 0; i--) {
+        if (addressbooks[i][0] == down || addressbooks[i + 1][0] == down) {
+            addressbook = addressbooks[i];
+            addressbooks[i] = addressbooks[i + 1];
+            addressbooks[i + 1] = addressbook;
+        }
+    }
+
+    resetHidden();
+}
+
+// -->
+</script>
+
+<input type="hidden" name="addressbooks" value="<?php echo htmlspecialchars($prefs->getValue('addressbooks')) ?>" />
+
+<?php echo _("Choose which address books to display, and in what order:") ?><br />
+<table>
+ <tr>
+  <td>
+   <label for="unselected_addressbooks" class="hidden"><?php echo _("Address books that will not be displayed:") ?></label>
+   <select id="unselected_addressbooks" name="unselected_addressbooks" multiple="multiple" size="5" style="width:300px" onchange="deselectHeaders();">
+    <option class="control" value=""><?php echo _("Address books that will not be displayed:") ?></option>
+   </select>
+  </td>
+  <td>
+   <a href="#" onclick="addAddressBook(); return false;"><?php echo Horde::img(isset($GLOBALS['nls']['rtl'][$GLOBALS['language']]) ? 'lhand.png' : 'rhand.png', _("Add address book"), null, $registry->getImageDir('horde')) ?></a>
+   <br />
+   <a href="#" onclick="removeAddressBook(); return false;"><?php echo Horde::img(isset($GLOBALS['nls']['rtl'][$GLOBALS['language']]) ? 'rhand.png' : 'lhand.png', _("Remove address book"), null, $registry->getImageDir('horde')) ?></a>
+  </td>
+  <td>
+   <label for="selected_addressbooks" class="hidden"><?php echo _("These address books will display in this order:") ?></label>
+   <select id="selected_addressbooks" name="selected_addressbooks" multiple="multiple" size="5" style="width:300px" onchange="deselectHeaders();">
+    <option class="control" value=""><?php echo _("These address books will display in this order:") ?></option>
+   </select>
+  </td>
+  <td>
+   <a href="#" onclick="moveAddressBookUp(); return false;"><?php echo Horde::img('nav/up.png', _("Move left"), null, $registry->getImageDir('horde')) ?></a>
+   <br />
+   <a href="#" onclick="moveAddressBookDown(); return false;"><?php echo Horde::img('nav/down.png', _("Move right"), null, $registry->getImageDir('horde')) ?></a>
+  </td>
+ </tr>
+</table>
+<script type="text/javascript">
+<!--
+var f = document.prefs;
+selectAddressBooks();
+// -->
+</script>
+
+<?php endif; // End if not locked && address books exist.
diff --git a/turba/templates/prefs/columnselect.inc b/turba/templates/prefs/columnselect.inc
new file mode 100644 (file)
index 0000000..20f3f3e
--- /dev/null
@@ -0,0 +1,121 @@
+<?php if (!$prefs->isLocked('columns')):
+
+Horde::addScriptFile('prototype.js', 'horde', true);
+Horde::addScriptFile('effects.js', 'horde', true);
+Horde::addScriptFile('dragdrop.js', 'horde', true);
+
+global $cfgSources, $attributes;
+$sources = Turba::getColumns();
+
+?>
+
+<script type="text/javascript">
+var cur_source;
+function updateColumnsPref()
+{
+    $('columns').value = $$('.turba-prefs-cols-panel').collect(updateColumnsPref_1).join("\n");
+}
+function updateColumnsPref_1(panel)
+{
+    var p = panel.id.replace('turba-prefs-cols-panel-', '');
+    cur_source = p;
+    var c = panel.select('input[type=checkbox]:checked').collect(updateColumnsPref_2).join("\t");
+    if (c) {
+        p += "\t" + c;
+    }
+    return p;
+}
+function updateColumnsPref_2(checkbox)
+{
+    if (checkbox.checked) {
+        return checkbox.id.replace('turba-prefs-cols-' + cur_source + '-', '');
+    }
+}
+</script>
+
+<input type="hidden" name="columns" id="columns" value="<?php echo htmlspecialchars($prefs->getValue('columns')) ?>" />
+
+<?php if (count($cfgSources) > 0): ?>
+
+<div id="turba-prefs-cols-container">
+<?php echo _("Click an address book to sort its columns. Drag columns to re-arrange them. Check a column to enable it.") ?><br /><br />
+
+<div id="turba-prefs-cols-list">
+ <ul>
+  <?php $first = true; foreach ($cfgSources as $key => $info): ?>
+  <li<?php if ($first) echo ' class="active"'; $first = false; ?>><a href="#" onclick="$$('#turba-prefs-cols-list .active').invoke('removeClassName', 'active'); $(this).up().addClassName('active'); $$('.turba-prefs-cols-panel').invoke('hide'); $('turba-prefs-cols-panel-' + this.readAttribute('sourcename')).show();" sourcename="<?php echo htmlspecialchars($key) ?>"><?php echo htmlspecialchars($info['title']) ?></a></li>
+  <?php endforeach; ?>
+ </ul>
+</div>
+
+ <div id="turba-prefs-cols-columns">
+
+ <?php $first = true; foreach ($cfgSources as $source => $info): ?>
+  <div class="turba-prefs-cols-panel" id="turba-prefs-cols-panel-<?php echo htmlspecialchars($source) ?>" style="display:<?php echo ($first ? 'block' : 'none'); $first = false; ?>;">
+   <ol id="turba-prefs-<?php echo htmlspecialchars($source) ?>">
+<?php
+
+// First the selected columns in their current order.
+$i = 0;
+if (isset($sources[$source])) {
+    $selected = array_flip($sources[$source]);
+    foreach ($sources[$source] as $column) {
+        if (substr($column, 0, 2) == '__' || $column == 'name') {
+            continue;
+        }
+        $checked = isset($selected[$column]) ? ' checked="checked"' : '';
+        $name = htmlspecialchars('turba-prefs-cols-' . $source . '-' . $column);
+        echo '<li id="turba-prefs-cols-' . htmlspecialchars($source) . '_'
+            . $i . '"><input name="' . $name . '" id="' . $name
+            . '" type="checkbox" class="checkbox"' . $checked . ' />'
+            . htmlspecialchars($attributes[$column]['label']) . '</li>';
+        $i++;
+    }
+} else {
+    // Need to unset this for the loop below, otherwise selected columns from
+    // another source could interfere
+    unset($selected);
+}
+
+// Then the unselected columns in source order.
+foreach (array_keys($info['map']) as $column) {
+    if (substr($column, 0, 2) == '__' || $column == 'name' ||
+        isset($selected[$column])) {
+        continue;
+    }
+    $checked = isset($selected[$column]) ? ' checked="checked"' : '';
+    $name = htmlspecialchars('turba-prefs-cols-' . $source . '-' . $column);
+    echo '<li id="turba-prefs-cols-' . htmlspecialchars($source) . '_' . $i
+        . '"><input name="' . $name . '" id="' . $name
+        . '" type="checkbox" class="checkbox"' . $checked . ' />'
+        . htmlspecialchars($attributes[$column]['label']) . '</li>';
+    $i++;
+}
+?>
+   </ol>
+   <script type="text/javascript">
+   Sortable.create('turba-prefs-<?php echo htmlspecialchars($source, ENT_QUOTES) ?>', { onUpdate: updateColumnsPref });
+   </script>
+  </div>
+ <?php endforeach; ?>
+</div>
+
+<br class="clear" />
+
+</div>
+
+<?php if ($browser->isBrowser('msie') && $browser->getMajor() < 7): ?>
+<div style="clear:both;">&nbsp;</div>
+<?php endif; ?>
+
+<script type="text/javascript">
+$('turba-prefs-cols-columns').observe('click', function(event) {
+    if (event.element().match('input[type=checkbox]')) {
+        updateColumnsPref();
+    }
+});
+</script>
+
+<?php
+endif; // End form elements when at least 1 source.
+endif; // End prefs UI if not locked.
diff --git a/turba/templates/prefs/imsp_opt.inc b/turba/templates/prefs/imsp_opt.inc
new file mode 100644 (file)
index 0000000..a10d8c1
--- /dev/null
@@ -0,0 +1,44 @@
+<?php
+
+if (!$prefs->isLocked('imsp_opt')):
+    global $cfgSources;
+    $source_count = 0;
+    $imsp_souces = array();
+
+    foreach ($cfgSources as $key => $value) {
+        if (($value['type'] == 'imsp') && (!$value['params']['is_root']) &&
+            (strpos($value['params']['my_rights'], 'd') != false)) {
+            $source_count++;
+            $imsp_sources[$key] = $value;
+        }
+    }
+
+?>
+<script type="text/javascript">
+<!--
+function showAlert()
+{
+    if (document.prefs.imsp_books_delete.value != 'none') {
+        window.alert('<?php echo addslashes(_("Once you save this option page, the address book will be permanently deleted. If this is not what you want, then you must change your selection to \"None\".")) ?>');
+    }
+}
+//-->
+</script>
+<table>
+ <tr>
+  <td><?php echo Horde::label('imsp_books_delete', _(" Delete IMSP Address Book")) ?></td>
+  <td>
+   <select id="imsp_books_delete" name="imsp_books_delete" style="width:200px" onchange="showAlert();">
+    <option value="none"><?php echo _("none") ?></option>
+    <?php foreach ($imsp_sources as $key => $value): ?>
+    <option value="<?php echo htmlspecialchars($key) ?>"><?php echo htmlspecialchars($value['title']) ?></option>
+    <?php endforeach ?>
+   </select>
+  </td>
+ </tr>
+ <tr>
+  <td><?php echo Horde::label('imsp_name', _(" Add an IMSP Address Book")) ?></td>
+  <td><input id="imsp_name" name="imsp_name" type="text" style="width:200px" /></td>
+ </tr>
+</table>
+<?php endif; ?>
diff --git a/turba/test.php b/turba/test.php
new file mode 100644 (file)
index 0000000..b1c0f48
--- /dev/null
@@ -0,0 +1,152 @@
+<?php
+/**
+ * Turba's test script.
+ *
+ * Copyright 1999-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Brent J. Nordquist <bjn@horde.org>
+ */
+
+/* Include Horde's core.php file. */
+require_once dirname(__FILE__) . '/lib/base.load.php';
+include_once HORDE_BASE . '/lib/core.php';
+
+/* We should have loaded the String class, from the Horde_Util
+ * package, in core.php. If Horde_String:: isn't defined, then we're not
+ * finding some critical libraries. */
+if (!class_exists('Horde_String')) {
+    echo '<br /><h2 style="color:red">The Horde_Util package was not found. If PHP\'s error_reporting setting is high enough and display_errors is on, there should be error messages printed above that may help you in debugging the problem. If you are simply missing these files, then you need to get the <a href="http://cvs.horde.org/cvs.php/framework">framework</a> module from <a href="http://www.horde.org/source/">Horde CVS</a>, and install the packages in it with the install-packages.php script.</h2>';
+    exit;
+}
+
+/* Initialize the Horde_Test:: class. */
+if (!is_readable(HORDE_BASE . '/lib/Test.php')) {
+    echo 'ERROR: You must install Horde before running this script.';
+    exit;
+}
+require_once HORDE_BASE . '/lib/Test.php';
+$horde_test = new Horde_Test();
+
+/* Turba version. */
+$module = 'Turba';
+require_once TURBA_BASE . '/lib/version.php';
+$module_version = TURBA_VERSION;
+
+require TEST_TEMPLATES . 'header.inc';
+require TEST_TEMPLATES . 'version.inc';
+
+/* Display PHP Version information. */
+$php_info = $horde_test->getPhpVersionInformation();
+require TEST_TEMPLATES . 'php_version.inc';
+
+/* PHP modules. */
+$module_list = array(
+    'mysql' => 'MySQL Support',
+    'pgsql' => 'PostgreSQL Support',
+    'mssql' => 'Microsoft SQL Support',
+    'oci8' => 'Oracle Support',
+    'odbc' => 'Unified ODBC Support',
+    'ldap' => 'LDAP Support'
+);
+
+/* PEAR packages. */
+$pear_list = array(
+    'Net_LDAP' => array(
+        'path' => 'Net/LDAP.php',
+        'error' => 'Net_LDAP is required when doing schema checks with LDAP address books.',
+    ),
+);
+
+/* Get the status output now. */
+$module_output = $horde_test->phpModuleCheck($module_list);
+$pear_output = $horde_test->PEARModuleCheck($pear_list);
+
+?>
+
+<h1>PHP Module Capabilities</h1>
+<ul>
+ <?php echo $module_output ?>
+</ul>
+
+<h1>PEAR</h1>
+<ul>
+ <?php echo $pear_output ?>
+</ul>
+
+<h1>PHP LDAP Support Test</h1>
+<?php
+
+$server = isset($_POST['server']) ? $_POST['server'] : ''; // 'server.example.com';
+$port = isset($_POST['port']) ? $_POST['port'] : ''; // '389';
+$basedn = isset($_POST['basedn']) ? $_POST['basedn'] : ''; // 'dc=example,dc=com';
+$user = isset($_POST['user']) ? $_POST['user'] : '';     // 'user';
+$passwd = isset($_POST['passwd']) ? $_POST['passwd'] : ''; // 'password';
+$filter = isset($_POST['filter']) ? $_POST['filter'] : ''; // 'cn=Babs Jensen';
+$proto = isset($_POST['version']) ? $_POST['version'] : ''; // 'LDAPv3';
+
+if (!empty($server) && !empty($basedn) && !empty($filter)) {
+    if (empty($port)) {
+        $port = '389';
+    }
+    echo 'server="', htmlspecialchars($server), '" basedn="', htmlspecialchars($basedn), '" filter="', htmlspecialchars($filter), '"<br />';
+    if ($user) {
+        echo 'bind as user="', htmlspecialchars($user), '"<br />';
+    } else {
+        echo 'bind anonymously<br />';
+    }
+    $ldap = ldap_connect($server, $port);
+    if ($ldap) {
+        if (!empty($proto) && ($proto == '3')) {
+            ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
+        }
+        if (!empty($user) && !ldap_bind($ldap, $user, $passwd)) {
+            echo '<p>unable to bind as ' . htmlspecialchars($user) . ' to LDAP server</p>';
+            ldap_close($ldap);
+            $ldap = '';
+        } elseif (empty($user) && !ldap_bind($ldap)) {
+            echo "<p>unable to bind anonymously to LDAP server</p>\n";
+            ldap_close($ldap);
+            $ldap = '';
+        }
+        if ($ldap) {
+            $result = ldap_search($ldap, $basedn, $filter);
+            if ($result) {
+                echo '<p>search returned ' . ldap_count_entries($ldap, $result) . " entries</p>\n";
+                $info = ldap_get_entries($ldap, $result);
+                for ($i = 0; $i < $info['count']; $i++) {
+                    echo '<p>dn is: ' . $info[$i]['dn'] . '<br />';
+                    echo 'first cn entry is: ' . $info[$i]['cn'][0] . '<br />';
+                    echo 'first mail entry is: ' . $info[$i]['mail'][0] . '</p>';
+                    if ($i >= 10) {
+                        echo '<p>(only first 10 entries displayed)</p>';
+                        break;
+                    }
+                }
+            } else {
+                echo '<p>unable to search LDAP server</p>';
+            }
+        }
+    } else {
+        echo '<p>unable to connect to LDAP server</p>';
+    }
+} else {
+    ?>
+<form name="form1" method="post" action="test.php">
+<table>
+<tr><td align="right"><label for="server">Server</label></td><td><input type="text" id="server" name="server" /></td></tr>
+<tr><td align="right"><label for="port">Port</label></td><td><input type="text" id="port" name="port" /></td><td>(defaults to "389")</td></tr>
+<tr><td align="right"><label for="basedn">Base DN</label></td><td><input type="text" id="basedn" name="basedn" /></td><td>(e.g. "dc=example,dc=com")</td></tr>
+<tr><td align="right"><label for="user">User</label></td><td><input type="text" id="user" name="user" /></td><td>(leave blank for anonymous)</td></tr>
+<tr><td align="right"><label for="passwd">Password</label></td><td><input type="password" id="passwd" name="passwd" /></td></tr>
+<tr><td align="right"><label for="filter">Filter</label></td><td><input type="text" id="filter" name="filter" /></td><td>(e.g. "cn=Babs Jensen")</td></tr>
+<tr><td align="right"><label for="proto">Protocol</label></td><td><select id="version" name="version"><option value="2">LDAPv2 (Deprecated)</option><option value="3" selected="selected">LDAPv3</option></td><td>(LDAP protocol version)</select></td></tr>
+<tr><td></td><td><input type="submit" name="f_submit" value="Submit" /><input type="reset" name="f_reset" value="Reset" /></td></tr>
+</table>
+</form>
+<?php } ?>
+
+<?php
+require TEST_TEMPLATES . 'footer.inc';
diff --git a/turba/themes/bluewhite/screen.css b/turba/themes/bluewhite/screen.css
new file mode 100644 (file)
index 0000000..814a285
--- /dev/null
@@ -0,0 +1,3 @@
+#quicksearch a {
+    background: #339;
+}
diff --git a/turba/themes/graphics/az.png b/turba/themes/graphics/az.png
new file mode 100644 (file)
index 0000000..2b646f9
Binary files /dev/null and b/turba/themes/graphics/az.png differ
diff --git a/turba/themes/graphics/az_secondary.png b/turba/themes/graphics/az_secondary.png
new file mode 100644 (file)
index 0000000..9e0c7d6
Binary files /dev/null and b/turba/themes/graphics/az_secondary.png differ
diff --git a/turba/themes/graphics/contact.png b/turba/themes/graphics/contact.png
new file mode 100644 (file)
index 0000000..bdd0053
Binary files /dev/null and b/turba/themes/graphics/contact.png differ
diff --git a/turba/themes/graphics/favicon.ico b/turba/themes/graphics/favicon.ico
new file mode 100644 (file)
index 0000000..208b098
Binary files /dev/null and b/turba/themes/graphics/favicon.ico differ
diff --git a/turba/themes/graphics/group.png b/turba/themes/graphics/group.png
new file mode 100644 (file)
index 0000000..692a123
Binary files /dev/null and b/turba/themes/graphics/group.png differ
diff --git a/turba/themes/graphics/menu/browse.png b/turba/themes/graphics/menu/browse.png
new file mode 100644 (file)
index 0000000..f52d05a
Binary files /dev/null and b/turba/themes/graphics/menu/browse.png differ
diff --git a/turba/themes/graphics/menu/new.png b/turba/themes/graphics/menu/new.png
new file mode 100644 (file)
index 0000000..e3a6dbe
Binary files /dev/null and b/turba/themes/graphics/menu/new.png differ
diff --git a/turba/themes/graphics/new.png b/turba/themes/graphics/new.png
new file mode 100644 (file)
index 0000000..e3a6dbe
Binary files /dev/null and b/turba/themes/graphics/new.png differ
diff --git a/turba/themes/graphics/redbox_spinner.gif b/turba/themes/graphics/redbox_spinner.gif
new file mode 100644 (file)
index 0000000..35218b3
Binary files /dev/null and b/turba/themes/graphics/redbox_spinner.gif differ
diff --git a/turba/themes/graphics/search.png b/turba/themes/graphics/search.png
new file mode 100644 (file)
index 0000000..94c47d4
Binary files /dev/null and b/turba/themes/graphics/search.png differ
diff --git a/turba/themes/graphics/turba.png b/turba/themes/graphics/turba.png
new file mode 100644 (file)
index 0000000..bdd0053
Binary files /dev/null and b/turba/themes/graphics/turba.png differ
diff --git a/turba/themes/graphics/za.png b/turba/themes/graphics/za.png
new file mode 100644 (file)
index 0000000..a154237
Binary files /dev/null and b/turba/themes/graphics/za.png differ
diff --git a/turba/themes/graphics/za_secondary.png b/turba/themes/graphics/za_secondary.png
new file mode 100644 (file)
index 0000000..bddda3c
Binary files /dev/null and b/turba/themes/graphics/za_secondary.png differ
diff --git a/turba/themes/ideas/screen.css b/turba/themes/ideas/screen.css
new file mode 100644 (file)
index 0000000..43b06ba
--- /dev/null
@@ -0,0 +1,10 @@
+/**
+ * Ideas theme by Roel Gloudemans <r.gloudemans@i-to-i.nl>
+ * Based on the Ideas to Interconnect BV website (http://www.i-to-i.nl)
+ */
+
+.text:hover td {
+    background-color: #bad0e7;
+}
+
+
diff --git a/turba/themes/screen.css b/turba/themes/screen.css
new file mode 100644 (file)
index 0000000..e8de02e
--- /dev/null
@@ -0,0 +1,163 @@
+/* Menu bottom margin, added for BC. */
+#menu {
+    margin-bottom: 8px;
+}
+
+/* Added for BC. */
+.hidden {
+    display: none;
+}
+
+.QuickFinderNoMatch {
+    display: none;
+}
+#QuickFinderEmpty {
+    font-style: italic;
+}
+
+#quicksearch {
+    display: inline;
+}
+#quicksearch input {
+    background-image: url("graphics/search.png");
+    background-repeat: no-repeat;
+    background-position: 2px center;
+    padding: 1px 0 1px 20px;
+}
+#quicksearch a {
+    display: inline-block;
+    padding: 2px 4px;
+}
+
+.turbaPager {
+    text-align: center;
+    padding: 3px;
+    background: #fff;
+    border-top: 1px solid #ccc;
+    border-bottom: 1px solid #ccc;
+}
+
+#vbook-form {
+    margin: 1em 0 0 0;
+}
+
+
+/* Tables. */
+table#addressbook-list {
+    width: 99%;
+    margin: 0 0 8px 5px;
+    border-top: 1px solid #ddd;
+    border-left: 1px solid #ddd;
+}
+table#addressbook-list th {
+    padding: 3px;
+    background: #e9e9e9;
+    border-right: 1px solid #ccc;
+    text-align: left;
+}
+table#addressbook-list td {
+    padding: 3px;
+    border-right: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+}
+table#addressbook-list th.sortup {
+    background: #bbcbff url("graphics/za.png") center left no-repeat;
+    padding-left: 10px;
+}
+table#addressbook-list th.sortdown {
+    background: #bbcbff url("graphics/az.png") center left no-repeat;
+    padding-left: 10px;
+}
+
+#addressbook-list-buttons {
+    padding: 1em;
+}
+#addressbook-list-buttons form {
+    display: inline;
+}
+.addressbook-list-icon {
+    width: 1%;
+}
+
+/* Preferences pages */
+#turba-prefs-cols-list {
+    float: left;
+    width: 15em;
+}
+#turba-prefs-cols-list ul {
+    list-style-type: none;
+}
+#turba-prefs-cols-list li {
+    padding: 3px;
+}
+#turba-prefs-cols-list li a {
+    display: block;
+}
+#turba-prefs-cols-list li.active {
+    font-weight: bold;
+    border: 1px solid #ccc;
+    border-right: none;
+}
+
+#turba-prefs-cols-columns {
+    float: left;
+    padding: 3px;
+    border: 1px solid #ccc;
+}
+#turba-prefs-cols-columns ol {
+    list-style-type: none;
+}
+#turba-prefs-cols-columns li {
+    padding: 2px;
+    cursor: move;
+}
+#turba-prefs-cols-columns .checkbox {
+    margin-right: 2px;
+    cursor: default;
+}
+
+/* Redbox styles. */
+#RB_overlay {
+    position: absolute;
+    z-index: 100;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    min-height: 100%;
+    background-color: #000;
+    opacity: .6;
+    filter: alpha(opacity=60);
+}
+#RB_loading {
+    z-index: 101;
+    width: 66;
+    margin-left: auto;
+    margin-right: auto;
+    margin-top: 200px;
+    padding-bottom: 66px;
+    text-align: center;
+    background: url("graphics/redbox_spinner.gif") no-repeat bottom center;
+}
+#RB_window {
+    z-index: 102;
+    background-color: #fff;
+    display: block;
+    text-align: left;
+    overflow: hidden;
+    margin: 20px auto 0 auto;
+    position: fixed;
+    position: absolute;
+}
+
+#RB_confirm {
+    width: 20em;
+    padding: 1em;
+    border: 1px solid #ccc;
+    background: #ffc;
+}
+#RB_confirm input {
+    margin: .2em;
+}
diff --git a/turba/themes/silver/graphics/az.png b/turba/themes/silver/graphics/az.png
new file mode 100644 (file)
index 0000000..f52e828
Binary files /dev/null and b/turba/themes/silver/graphics/az.png differ
diff --git a/turba/themes/silver/graphics/az_secondary.png b/turba/themes/silver/graphics/az_secondary.png
new file mode 100644 (file)
index 0000000..202126f
Binary files /dev/null and b/turba/themes/silver/graphics/az_secondary.png differ
diff --git a/turba/themes/silver/graphics/contact.png b/turba/themes/silver/graphics/contact.png
new file mode 100644 (file)
index 0000000..c02f315
Binary files /dev/null and b/turba/themes/silver/graphics/contact.png differ
diff --git a/turba/themes/silver/graphics/favicon.ico b/turba/themes/silver/graphics/favicon.ico
new file mode 100644 (file)
index 0000000..461907c
Binary files /dev/null and b/turba/themes/silver/graphics/favicon.ico differ
diff --git a/turba/themes/silver/graphics/group.png b/turba/themes/silver/graphics/group.png
new file mode 100644 (file)
index 0000000..7fb4e1f
Binary files /dev/null and b/turba/themes/silver/graphics/group.png differ
diff --git a/turba/themes/silver/graphics/menu/browse.png b/turba/themes/silver/graphics/menu/browse.png
new file mode 100644 (file)
index 0000000..b73419b
Binary files /dev/null and b/turba/themes/silver/graphics/menu/browse.png differ
diff --git a/turba/themes/silver/graphics/menu/new.png b/turba/themes/silver/graphics/menu/new.png
new file mode 100644 (file)
index 0000000..2a68453
Binary files /dev/null and b/turba/themes/silver/graphics/menu/new.png differ
diff --git a/turba/themes/silver/graphics/new.png b/turba/themes/silver/graphics/new.png
new file mode 100644 (file)
index 0000000..2a68453
Binary files /dev/null and b/turba/themes/silver/graphics/new.png differ
diff --git a/turba/themes/silver/graphics/turba.png b/turba/themes/silver/graphics/turba.png
new file mode 100644 (file)
index 0000000..b73419b
Binary files /dev/null and b/turba/themes/silver/graphics/turba.png differ
diff --git a/turba/themes/silver/graphics/za.png b/turba/themes/silver/graphics/za.png
new file mode 100644 (file)
index 0000000..32e427a
Binary files /dev/null and b/turba/themes/silver/graphics/za.png differ
diff --git a/turba/themes/silver/graphics/za_secondary.png b/turba/themes/silver/graphics/za_secondary.png
new file mode 100644 (file)
index 0000000..22857a0
Binary files /dev/null and b/turba/themes/silver/graphics/za_secondary.png differ
diff --git a/turba/themes/silver/screen.css b/turba/themes/silver/screen.css
new file mode 100644 (file)
index 0000000..ec3a9a8
--- /dev/null
@@ -0,0 +1,6 @@
+table#addressbook-list th.sortup {
+    background: #ccc url("graphics/za.png") center left no-repeat;
+}
+table#addressbook-list th.sortdown {
+    background: #ccc url("graphics/az.png") center left no-repeat;
+}
diff --git a/turba/themes/silver/themed_graphics b/turba/themes/silver/themed_graphics
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/turba/themes/tango-blue/graphics/az_secondary.png b/turba/themes/tango-blue/graphics/az_secondary.png
new file mode 100644 (file)
index 0000000..9e0c7d6
Binary files /dev/null and b/turba/themes/tango-blue/graphics/az_secondary.png differ
diff --git a/turba/themes/tango-blue/graphics/contact.png b/turba/themes/tango-blue/graphics/contact.png
new file mode 100644 (file)
index 0000000..92f53f0
Binary files /dev/null and b/turba/themes/tango-blue/graphics/contact.png differ
diff --git a/turba/themes/tango-blue/graphics/favicon.ico b/turba/themes/tango-blue/graphics/favicon.ico
new file mode 100644 (file)
index 0000000..c79c875
Binary files /dev/null and b/turba/themes/tango-blue/graphics/favicon.ico differ
diff --git a/turba/themes/tango-blue/graphics/group.png b/turba/themes/tango-blue/graphics/group.png
new file mode 100644 (file)
index 0000000..9d2d500
Binary files /dev/null and b/turba/themes/tango-blue/graphics/group.png differ
diff --git a/turba/themes/tango-blue/graphics/menu/browse.png b/turba/themes/tango-blue/graphics/menu/browse.png
new file mode 100644 (file)
index 0000000..028675e
Binary files /dev/null and b/turba/themes/tango-blue/graphics/menu/browse.png differ
diff --git a/turba/themes/tango-blue/graphics/menu/new.png b/turba/themes/tango-blue/graphics/menu/new.png
new file mode 100644 (file)
index 0000000..698bebd
Binary files /dev/null and b/turba/themes/tango-blue/graphics/menu/new.png differ
diff --git a/turba/themes/tango-blue/graphics/new.png b/turba/themes/tango-blue/graphics/new.png
new file mode 100644 (file)
index 0000000..698bebd
Binary files /dev/null and b/turba/themes/tango-blue/graphics/new.png differ
diff --git a/turba/themes/tango-blue/graphics/turba.png b/turba/themes/tango-blue/graphics/turba.png
new file mode 100644 (file)
index 0000000..be7f445
Binary files /dev/null and b/turba/themes/tango-blue/graphics/turba.png differ
diff --git a/turba/themes/tango-blue/graphics/za_secondary.png b/turba/themes/tango-blue/graphics/za_secondary.png
new file mode 100644 (file)
index 0000000..bddda3c
Binary files /dev/null and b/turba/themes/tango-blue/graphics/za_secondary.png differ
diff --git a/turba/themes/tango-blue/themed_graphics b/turba/themes/tango-blue/themed_graphics
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/turba/vcard.php b/turba/vcard.php
new file mode 100644 (file)
index 0000000..fa190b4
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Turba vcard.php.
+ *
+ * Copyright 2000-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Chuck Hagenbuch <chuck@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+$source = Horde_Util::getFormData('source');
+if (!isset($cfgSources[$source])) {
+    $notification->push(_("The contact you requested does not exist."), 'horde.error');
+    header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+    exit;
+}
+
+$driver = Turba_Driver::singleton($source);
+
+/* Set the contact from the key requested. */
+$key = Horde_Util::getFormData('key');
+$object = $driver->getObject($key);
+if (is_a($object, 'PEAR_Error')) {
+    $notification->push($object->getMessage(), 'horde.error');
+    header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+    exit;
+}
+
+/* Check permissions on this contact. */
+if (!$object->hasPermission(PERMS_READ)) {
+    $notification->push(_("You do not have permission to view this object."), 'horde.error');
+    header('Location: ' . Horde::applicationUrl($prefs->getValue('initial_page'), true));
+    exit;
+}
+
+$vcard = Horde_Data::singleton('vcard');
+$filename = str_replace(' ', '_', $object->getValue('name'));
+if (!$filename) {
+    $filename = _("contact");
+}
+$vcard->exportFile($filename . '.vcf', array($driver->tovCard($object)), Horde_Nls::getCharset());
diff --git a/turba/view.php b/turba/view.php
new file mode 100644 (file)
index 0000000..f96d36d
--- /dev/null
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Turba view.php.
+ *
+ * Copyright 2004-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file LICENSE for license information (ASL).  If you
+ * did not receive this file, see http://www.horde.org/licenses/asl.php.
+ *
+ * @author Jan Schneider <jan@horde.org>
+ */
+
+require_once dirname(__FILE__) . '/lib/base.php';
+
+if ($conf['documents']['type'] == 'none') {
+    Horde::fatal(new Horde_Exception(_("The VFS backend needs to be configured to enable attachment uploads.")));
+}
+
+$source = Horde_Util::getFormData('source');
+$key = Horde_Util::getFormData('key');
+$actionID = Horde_Util::getFormData('actionID');
+$filename = Horde_Util::getFormData('file');
+$type = Horde_Util::getFormData('type');
+
+/* Get the object. */
+if (!isset($cfgSources[$source])) {
+    Horde::fatal(_("The contact you requested does not exist."), __FILE__, __LINE__);
+}
+$driver = Turba_Driver::singleton($source);
+$object = $driver->getObject($key);
+if (is_a($object, 'PEAR_Error')) {
+    Horde::fatal($object, __FILE__, __LINE__);
+}
+
+/* Check permissions. */
+if (!$object->hasPermission(PERMS_READ)) {
+    Horde::fatal(_("You do not have permission to view this contact."), __FILE__, __LINE__);
+}
+
+$v_params = Horde::getVFSConfig('documents');
+if (is_a($v_params, 'PEAR_Error')) {
+    Horde::fatal($v_params, __FILE__, __LINE__);
+}
+$vfs = VFS::singleton($v_params['type'], $v_params['params']);
+if (is_a($vfs, 'PEAR_Error')) {
+    Horde::fatal($vfs, __FILE__, __LINE__);
+} else {
+    $data = $vfs->read(TURBA_VFS_PATH . '/' . $object->getValue('__uid'), $filename);
+}
+if (is_a($data, 'PEAR_Error')) {
+    Horde::logMessage($data, __FILE__, __LINE__, PEAR_LOG_ERR);
+    Horde::fatal(sprintf(_("Access denied to %s"), $filename), __FILE__, __LINE__);
+}
+
+/* Run through action handlers */
+switch ($actionID) {
+case 'download_file':
+     $browser->downloadHeaders($filename);
+     echo $data;
+     exit;
+
+case 'view_file':
+    $mime_part = new Horde_Mime_Part();
+    $mime_part->setType(Horde_Mime_Magic::extToMime($type));
+    $mime_part->setContents($data);
+    $mime_part->setName($filename);
+    $mime_part->buildMimeIds();
+    $viewer = Horde_Mime_Viewer::factory($mime_part);
+
+    $content = $viewer->render('full');
+    $body = $content[1]['data'];
+
+    $browser->downloadHeaders($filename, $content[1]['type'], true, strlen($body));
+    echo $body;
+    exit;
+}