Merge commit 'syncevolution-1-0' into meego-1.0

Conflicts:
	po/de.po
	po/es.po
	po/it.po
	po/ja.po
	po/ru.po

Translations were updated independently, leading
mostly to conflicts because of line number changes.
This commit is contained in:
Patrick Ohly 2010-07-16 16:09:14 +02:00
commit ab6ae20a51
117 changed files with 7532 additions and 2998 deletions

74
HACKING
View file

@ -1,3 +1,77 @@
Compiling from Source
---------------------
To compile the code the source or an installation of the Synthesis
SyncML engine is needed. A compatible snapshot of it is included in
SyncEvolution source packages and will be used automatically.
The section _`Checking out the source` explains how to work
with sources obtained via the git repositories.
Also needed are the Evolution and Boost (>= 1.35) development
files. For HTTP, either Curl or libsoup can be used.
On Debian based systems the required packages can be installed with
apt-get install evolution-data-server-dev \
libecal1.2-dev libebook1.2-dev \
libsoup2.4-dev \
libboost-dev
libboost-dev >= 1.34, available as libboost1.35-dev backport for Debian Etch.
Necessary on some distros due to bad dependencies (not needed by SyncEvolution itself):
apt-get install libdb3-dev
Optional (enables reading proxy settings from GNOME preferences):
apt-get install libsoup-gnome2.4-dev
Optional (enables direct sync with phones):
apt-get install libopenobex-dev libbluetooth-dev
Optional (only used for SHA-256 when glib is not already a dependency):
apt-get install libnss3-dev
For compiling libsynthesis:
apt-get install libpcre3-dev libsqlite3-dev libexpat-dev libz-dev
This was copied from the libsynthesis README.
The test framework also requires CPPUnit:
apt-get install libcppunit-dev
For the GUI and its D-Bus based service backend:
apt-get install libdbus-glib-1-dev \
xsltproc \
libglib2.0-dev \
libgtk2.0-dev libglade2-dev \
libgnome-keyring-dev \
libgconf2-dev libgnomevfs2-dev
Optional packages for GUI:
apt-get install libunique-dev
libunique = ensure that GTK GUI only runs once per user
Optional packages for GNOME Bluetooth Panel plugin:
apt-get install libgnome-bluetooth-dev
The plugin adds a button to invoke sync-UI after a device
was paired which supports SyncML.
The build system is the normal autotools system. See INSTALL for
general instructions how to use that and "./configure --help" for
SyncEvolution specific options.
Note that compiling without the Evolution development files is
possible. But because this is usually not what people want,
the configure script needs explicit --disable-ecal --disable-ebook
parameters, otherwise it will refuse to compile without Evolution
support.
When compiling from a git checkout, remember to run "./autogen.sh".
It depends on:
apt-get install libtool intltool automake
Checking out the Source
-----------------------

View file

@ -2,11 +2,18 @@
ACLOCAL_AMFLAGS = -I m4 -I m4-repo
man_MANS =
dist_doc_DATA =
SUBDIRS = src
if COND_CORE
SUBDIRS += po test
dist_doc_DATA += README NEWS COPYING $(TEST_README_FILES)
if COND_HTML_README
dist_doc_DATA += README.html
endif
if COND_MAN_PAGES
man_MANS += syncevolution.1
endif
endif
DIST_SUBDIRS = src po test
@ -14,6 +21,7 @@ EXTRA_DIST = \
HACKING \
LICENSE.txt \
LICENSE.LGPL-21 \
README.rst \
description \
configure-pre.in \
configure-post.in \
@ -33,7 +41,7 @@ DEV_FILE_PATTERN = $(1)$(2)/etc $(1)$(2)/include $(1)$(2)/lib/*.so $(1)$(2)/lib/
if COND_DBUS
# when building with D-Bus, we have no choice: the service has to go into /usr
# in order to be found
distbin : README NEWS COPYING $(TEST_README_FILES) INSTALL-tar-gz all
distbin : $(dist_doc_DATA) INSTALL-tar-gz all
@ [ "$(BINSUFFIX)" ] || (echo "please invoke with e.g. 'make distbin BINSUFFIX=debian-3.1'"; exit 1 )
@ [ "$(prefix)" == "/usr" ] || (echo "please reconfigure with --prefix=/usr"; exit 1 )
rm -rf $(distdir)
@ -43,20 +51,20 @@ distbin : README NEWS COPYING $(TEST_README_FILES) INSTALL-tar-gz all
for i in `find $(distdir) -type d | sort -r`; do rmdir $$i 2>/dev/null || true; done
mkdir -p $(distdir)/usr/share/doc/syncevolution
cp $(srcdir)/INSTALL-tar-gz $(distdir)/INSTALL
cp $(srcdir)/README $(srcdir)/NEWS $(srcdir)/COPYING $(TEST_README_FILES) $(distdir)/usr/share/doc/syncevolution
cp $(filter-out all, $+) $(distdir)/usr/share/doc/syncevolution
tar zcf $(distdir)-$(BINSUFFIX).tar.gz $(distdir)
rm -rf $(distdir)
else
# without D-Bus, we can simply create an archive with a bin directory
# and everything works
distbin : README NEWS COPYING all
distbin : $(dist_doc_DATA) all
@ [ "$(BINSUFFIX)" ] || (echo "please invoke with e.g. 'make distbin BINSUFFIX=debian-3.1'"; exit 1 )
rm -rf $(distdir)
$(MAKE) prefix=`pwd`/$(distdir) install
echo removing developer files and empty directories
rm -rf $(call DEV_FILE_PATTERN,$(distdir),/)
for i in `find $(distdir) -type d | sort -r`; do rmdir $$i 2>/dev/null || true; done
cp $(srcdir)/README $(srcdir)/NEWS $(srcdir)/COPYING $(TEST_README_FILES) $(distdir)
cp $(filter-out all, $+) $(distdir)
tar zcf $(distdir)-$(BINSUFFIX).tar.gz $(distdir)
rm -rf $(distdir)
endif
@ -212,3 +220,23 @@ installcheck-local:
fi \
done
endif
# patch README.rst properties on-the-fly with sed expressions
PATCH_README = -e "s/^:Version: .*/:Version: $(VERSION)/" -e "s/:Date: .*/:Date: `date +%Y-%m-%d`/"
# produce man pages
syncevolution.1: README.rst
sed $(PATCH_README) $< | $(RST2MAN) --exit-status=3 - >$@
CLEANFILES += syncevolution.1
# README is the traditional name in the distribution,
# continue using it instead of README.rst.
README: README.rst
sed $(PATCH_README) $< >$@
CLEANFILES += README
# The README.html is also used on syncevolution.org as "Usage" page,
# therefore we must use <h3> headers and lower to fit into the page.
README.html: README.rst
sed $(PATCH_README) $< | $(RST2HTML) --initial-header-level=3 --exit-status=3 - >$@
CLEANFILES += README.html

192
NEWS
View file

@ -1,4 +1,185 @@
SyncEvolution 1.0 beta 2 -> beta 3, xxxxxxxxxx
SyncEvolution 0.9.2 -> 1.0, 11.06.2010
======================================
Major new features compared to previous stable release:
* synchronize directly with a phone over Bluetooth/OBEX
* accept Bluetooth/OBEX connections in cooperation with obexd >= 0.19
* run SyncEvolution as a rudimentary HTTP SyncML server
The GTK sync-UI can be used to select a paired phone and create a
configuration for it based on the bundled configuration templates.
Configuration templates are included for Nokia phones; for other
phones see the http://syncevolution.org/development/sync-phone HOWTO
and check out the Wiki there. Some users have already reported success
for Sony Ericsson phones and added setup instructions. New templates
from the Wiki can be dropped into ~/.config/syncevolution-templates
under an arbitrary file name.
Unexpected slow syncs can be detected when running as client (MB
#2416) and unless turned off (see "preventSlowSync"), SyncEvolution
aborts the session so that the situation can be analyzed. A refresh
from client or server might be more suitable. The command line tool
provides instructions at the end of its output. The GTK sync-UI
points towards its recovery dialog.
Automatic synchronization is supported by the syncevo-dbus-server (MB
#6378). When that is installed, it will be started as part of a user
session and keep running to trigger syncs in the
background. Notifications are emitted when syncs start, end or fail
(MB #10000).
Automatic synchronization can be enabled separately for each peer
("autoSync=0/1", off by default), will be done at regular intervals
("autoSyncInterval=30" minutes) when online long enough
("autoSyncDelay=5" minutes). That last option ensures that a) an
automatic sync does not attempt to use a network connection unless it
was already active and b) hopefully is also around long enough to
complete the sync.
The Synthesis XML configuration was split up into different parts
which are assembled from /usr/share/syncevolution/xml. Files in
~/.config/syncevolution-xml override and extend the default files,
which my be useful when adding support for a new phone.
SyncML servers:
* ZYB.com now works thanks to a workaround for anchor handling (MB #2424);
only contacts tested because everything else is considered legacy by ZYB.com
* Horde: avoid confusing the server with a deviceId that starts like the
ones used in old Funambol clients, helps with calendar sync (MB #9347)
* Mobical.net (and other, similar services): fix vCalendar 1.0 alarm
properties before importing them (MB #10458)
* desknow.com works when switching to SyncMLVersion = 1.1
* Funambol, Memotoo (and probably others): preserve meeting series when
receiving update for detached recurrence (MBC #1916)
Evolution:
* addressbook backend: avoid picking CouchDB, second try (MB #7877)
* calendar backend: minor fix for change tracking when deleting
a single instance of a recurring event
* workaround for Evolution 2.30: "timezone cannot be retrieved because it
doesn't exist" is triggered incorrectly when importing non-standard
timezone definitions because libecal changed an error code (MB #9820)
Performance and reliability improvements (MB #7708):
* synccompare much faster
* database dumps consume less disk space
* more intelligent about expiring obsolete session directories
and backups
* database accesses are reduced in several backends
* shorter logs (MB #8092)
* message resending helps under unreliable network connectivity ("RetryInterval")
* full support for suspend&resume in SyncEvolution client to SyncEvolution or
Synthesis server syncs
* better handling of certain third-party time zone definitions (MBC #1332)
Improved GTK sync-UI:
* revised config screen: all in one list where entries can be expanded,
integrated setup of sync with other devices
* recovery support: restore from backup, unexpected slow sync handling
* spinner while network is in use (MB #2229)
* interactive password requests (MB #6376)
* uses new D-Bus API
Command line:
* fixed printing of rejected items (MB #7755)
* consistent logging of added/updated/deleted items with short
description
* improved error reporting (textual descriptions instead of plain
error codes MB #2069, partial success MB #7755, record and show
first ERROR encountered MB #7708)
* can create new sources (MB #8424)
* runs operations inside daemon and thus avoids conflicts with
operations done by other clients; for testing purposes (like
running a client which talks to a local server in the daemon) it is
still possible to ignore the daemon (--daemon=no, MB #5043)
* revised README, now also available as man page (MBC #690)
Redesigned and reimplemented D-Bus API, used by sync-UI and command line:
* central syncevo-dbus-server controls configurations and sync sessions:
http://syncevolution.org/development/direct-synchronization-aka-syncml-server
* accepts incoming SyncML connection requests and messages received by
independent transport stubs (obexd, HTTP server, ...)
* can be used by multiple user interfaces at once
* fully documented, see src/dbus/interfaces and http://api.syncevolution.org
* no longer depends on dbus-glib with hand-written glue code for C++,
instead uses gdbus plus automatic C++ binding generated via C++ templates
Revised configuration layout (MB #8048, design document at
http://syncevolution.org/development/configuration-handling):
* several peer-independent sync and source properties are shared
between multiple peers
* they can be accessed without selecting a specific peer, by using an
empty config name or with the new "@<specific context>" syntax
* user interface of command line unchanged
* old configurations can be read and written, without causing
unwanted slow syncs when moving between stable and unstable
SyncEvolution versions
* old configurations can be migrated with the "--migrate" command
line switch; however, then older SyncEvolution can no longer
access them and migrating more than one old configuration causes
the second or later configuration to loose its "deviceId" property
(which is shared now), causing a slow sync once
* config names may contain characters that are not allowed in the
file names used for the underlying files; will be replaced with
underscores automatically (MB #8350)
Upgrading from 0.9.x:
* Upgrading and downgrading should work seamlessly when using existing
configurations.
* The new configuration layout is only used when creating new
configurations or explicitly invoking "syncevolution --migrate" (see
above). Such configs cannot be used by older SyncEvolution releases.
* The new "RetryInterval" property causes messages to be resent
after 2 minutes (increased from 1 minute in previous 1.0 betas).
At least the Funambol server is known to not handle this correctly
in all cases (http://funzilla.funambol.com/show_bug.cgi?id=7910).
So in the Funambol config template the interval is set to zero,
disabling the feature. Disabling the feature must be done manually
in existing Funambol configurations.
SyncEvolution 1.0 beta 3 -> 1.0 final, 11.06.2010
=================================================
Bug fixes and new features:
* Configuration templates are stored in a single file (MBC #1208).
New templates (like something downloaded from http://syncevolution.org/wiki)
can be dropped into $HOME/.config/syncevolution-templates using an arbitrary
file name.
* Progress and per-source status are now also reported and recorded when
running in server mode (MBC #1359). There are still several limitations
(sync mode not reported, no information about sent/received/processed items
while the sync runs, see MBC #2786).
* Better handling of certain third-party time zone definitions (MBC #1332).
Better logging to track down such problems.
* D-Bus server + command line: return error code when failed (MBC #2193)
* syncevo-phone-config: simplified command line options, several bug fixes
(syntax error, incorrect handling of calendar+todo, MBC #1197)
* Revised README, now also available as man page (MBC #690). Conversion of D-Bus API
documentation into .html page (MBC #1745).
* Funambol, Memotoo (and probably others): preserve meeting series when
receiving update for detached recurrence (MBC #1916)
* Fix for potential out-of-bounds memory access (MBC #1007).
* HTTP server: fix for potential crash when second session was requested while an
older one was still running, initial sync was done without libical time zone
information and thus may have mismatched times (MBC #2435)
* Nokia E55: convert alarm times (MBC #1657). This is done via a new remote rule
in /usr/share/syncevolution/xml/remoterules/server/46_E55.xml
If another phone needs the same treatment, then copy that file to
~/.config/syncevolution-xml/remoterules/server and edit the <model> element.
* GTK GUI: styling fix (MBC #1372), updated toolbar for MeeGo 1.0 (MBC #1970),
avoid duplicating configs when selecting a config created by syncevo-phone-config
or the command line (MBC #1266), scroll bars for emergency window (MBC #1296),
avoid compile problem on Fedora Core 13 due to name collision with system sync()
call, updated translations.
SyncEvolution 1.0 beta 2 -> beta 3, 20.04.2010
==============================================
One more step towards the long awaited 1.0. 0.1 was released over four
@ -49,6 +230,15 @@ interoperability testing with such phones has been done at this
time. When acting as client, that same property allows talking to
older SyncML servers, like desknow.com.
A minor workaround and the right configuration make it possible to
synchronize with Nokia N85 and probably also other S60
devices. Added a template for "Nokia S60". Also made the template
for "Nokia N900" accessible in the GTK GUI.
Because determining which configuration works for a phone involves
a lot of trial-and-error, the new "syncevo-phone-config" script
automates that process.
Other changes:
* Mobical.net (and other, similar services): fix vCalendar 1.0 alarm

856
README
View file

@ -1,856 +0,0 @@
Introduction
------------
SyncEvolution synchronizes personal information management (PIM) data
like contacts, calendars, tasks and memos via the SyncML information
synchronization standard. It supports all of these for GNOME's
Evolution and contacts for the system address book of the Nokia
Internet Tablets, Mac OS X and (at one point, but not anymore) the
iPhone. The command-line tool 'syncevolution' (compiled separately for
each of these platforms) executes the synchronization. On platforms
with GTK, the 'sync-ui' provides a graphical user interface. The
project 'Genesis' (available separately) implements a graphical
frontend that sits in the system tray.
The items are exchanged in the vCard 2.1/3.0, iCalender 2.0/vCalendar 1.0
and textual format via the open source Synthesis SyncML engine,
which makes SyncEvolution compatible with the majority of SyncML
servers. Full, one-way and incremental synchronization of items are
supported.
Normally, SyncEvolution does not synchronize with another SyncML
capable device or another computer directly. A SyncML server that that
device and SyncEvolution can talk to is needed. There are several
options for that:
- using a web service like ScheduleWorld or myFUNAMBOL which store
the data to be synchronized on a server and provide access to it
via SyncML
- installing a SyncML server like the free one from Funambol on
one's own server
- installing a SyncML server on the desktop
Since 1.0, SyncEvolution is also capable of synchronizing with another
device via Bluetooth directly. There is also a SyncEvolution HTTP
server which works for single-user scenarios. This is both still a bit
experimental and not explained further here.
The recommended solution is ScheduleWorld because it is easier than
setting up a server and provides better support for vCard and
iCalendar data than the stock Funambol server installation. Setting up
a server on the desktop has the additional problem that not all mobile
devices can communicate with the desktop via HTTP.
All SyncML synchronization modes are supported by SyncEvolution:
- exchanging just the changes between client and server ("two-way")
- sending just the changes in one direction ("one-way-from-client/server")
- replacing all items with the ones stored in the peer
("refresh-from-client/server")
- a full synchronization where all items are sent to the server and
the server then decides which items need to be deleted, added or
updated on the client ("slow")
The remainder of this document assumes that either Funambol's
myFUNAMBOL service or ScheduleWorld are used: because ScheduleWorld is
based on the Funambol server, configuration and usage are often
similar.
With a server that fully supports SyncML and vCard/iCalender
the following works:
- copy a complete database to the server and restore it
from the server later
- delete or modify an item locally, then make the same change
on the server
- delete, modify or add items on the server (by synchronizing with
another client or using a web interface), then apply the same
change locally
- conflict resolution (where two clients modify the same item,
then sync with the server) is handled by the server, but
SyncEvolution has support which ensures that no data is lost
by creating duplicates (see "Conflict Resolution" below)
For conflict resolution and synchronization between clients which
support different attributes of items the server needs an
understanding of the format of items. The Funambol server supports
that for contacts, but not yet for the calendar events and tasks that
SyncEvolution sends; see "Configuration with Funambol" below for more
information. ScheduleWorld also works with SyncEvolution for
calendars plus tasks.
Installation
------------
To install SyncEvolution, just unpack an archive with a precompiled
binary for your platform in a directory of your choice or install one
of the packages. Then create a configuration as described below under
"Configuration". No special environment variables are needed, although
one might want to add the directory which contains the "syncevolution"
binary to the shell's PATH variable.
When a binary packages is not available for the target system
and/or is not up-to-date, compiling from source can also be used
to produce a binary. See below in "Compiling from Source" for details.
Although all of the features are covered by unit testing and
have been verified to work, it is highly recommended that you
make a backup of your
$HOME/.evolution/addressbook
$HOME/.evolution/calendar
$HOME/.evolution/tasks
$HOME/.evolution/memos
directories before running SyncEvolution for the first time with
Evolution. In older Evolution versions the same data is found in
$HOME/evolution.
Configuration templates for SyncML peers are searched in the following
order:
- $SYNCEVOLUTION_TEMPLATE_DIR
- "/usr/share/syncevolution/templates" (prefix may be different,
depending on compilation)
- built-in templates
The properties defined in a template override the default properties,
so usually only those properties which specifically need to be set for
a certain peer should be listed in its template config. Don't copy
these files, they are not complete! Use the command line or a GUI
instead, which reads the files and produces complete configurations.
Usage
-----
Currently SyncEvolution comes as a simple command line tool which is
configured via files. The general synopsis of the command line
parameters is:
syncevolution [<options>] [<config>] [<source> ...]
The <config> and the <source> strings are used to find the
configuration files which determine how synchronization is going to
proceed. Each source corresponds to one local address book, calendar,
task list or set of memos and the corresponding database on the
peer. Depending on which parameters are given, different operations
are executed.
Starting with SyncEvolution 1.0, <config> strings can have different
meanings. Typically, a simple string like "scheduleworld" refers to
the configuration for that peer, as it did in previous releases. A
peer is either a SyncML server (the traditional usage of
SyncEvolution) or a client (the new feature in 1.0).
Each peer configuration exists inside a specific context, typically
the "@default" context. All peers in the same context share some parts
of their configuration, for example, which local databases are to be
synchronized. In that sense, a configuration context can be seen as a
set of local databases plus the peer configurations that are
synchronized against those databases.
When different peers are meant to synchronize different local
databases, then different contexts have to be used when setting up the
peers by appending a context name after the "at" sign, as in
"scheduleworld2@other-context". Later on, if "scheduleworld2" is
unique, the "@other-context" suffix becomes optional.
Sometimes it is also useful to change configuration options of a
context, without modifying a specific peer. This can be done by using
"@default" (or some other context name) without anything before the
"at" sign. The empty string "" is the same as "@default".
syncevolution
If no arguments are given, then SyncEvolution will list all available
data sources regardless whether there is a configuration file for them
or not. The output includes the identifiers which can then be used to
select those sources in a configuration file. For each source one can
set a different synchronization mode in its configuration file.
syncevolution <config>
Without the optional list of sources all sources which are enabled in
their configuration file are synchronized.
syncevolution <config> <source> ...
Otherwise only the ones mentioned on the command line are active. It
is possible to configure sources without activating their
synchronization: if the synchronization mode of a source is set to
"none", the source will be ignored. Explicitly listing such a source
will synchronize it in "two-way" mode once.
Progress and error messages are written into a log file that is
preserved for each synchronization run. Details about that is found in
the "Automatic Backups and Logging" section below. All errors and
warnings are printed directly to the console in addition to writing
them into the log file. Before quitting SyncEvolution will print a
summary of how the local data was modified. This is done with the
"synccompare" utility script described in the "Exchanging Data"
section.
When the "logdir" option is enabled (since v0.9 done by default for
new configurations), then the same comparison is also done before the
synchronization starts.
In case of a severe error the synchronization run is aborted
prematurely and SyncEvolution will return a non-zero value. Recovery
from failed synchronization is done by forcing a full synchronization
during the next run, i.e. by sending all items and letting the SyncML
server compare against the ones it already knows. This is avoided
whenever possible because matching items during a slow synchronization
can lead to duplicate entries.
After a successful synchronization the server's configuration file is
updated so that the next run can be done incrementally. If the
configuration file has to be recreated e.g. because it was lost, the
next run recovers from that by doing a full synchronization. The risk
associated with this is that the server might not recognize items that
it already has stored previously which then would lead to duplication
of items.
syncevolution --configure <options for configuration> <config> [<source> ...]
Options in the configuration can be modified via the command
line. Source properties are changed for all sources unless sources are
listed explicitly. Some source properties have to be different for
each source, in which case syncevolution must be called multiple times
with one source listed in each invocation.
syncevolution --remove <config>
Deletes the configuration. If the <config> refers to a specific
peer, only that peer's configuration is removed. If it refers to
a context, that context and all peers inside it are removed.
Note that there is no confirmation question. Neither local data
referenced by the configuration nor the content of log dirs are
deleted.
syncevolution --run <options for run> <config> [<source> ...]
Options can also be overridden for just the current run, without
changing the configuration. In order to prevent accidentally running a
sync session when a configuration change was intended, either
--configure or --run must be given explicitly if options are specified
on the command line.
syncevolution --status <config> [<source> ...]
Prints what changes were made locally since the last synchronization.
Depends on access to database dumps from the last run, so using the
"logdir" option is recommended.
syncevolution --print-servers|--print-configs|--print-peers
syncevolution --print-config [--quiet] <config> [main|<source> ...]
syncevolution --print-sessions [--quiet] <config>
These commands print information about existing configurations. When
printing a configuration a short version without comments can be
selected with --quiet. When sources are listed, only their
configuration is shown. "Main" instead or in combination with sources
lists only the main peer configuration.
With --print-session information about previous synchronization
sessions for the selected peer or context are printed. This depends on
the "logdir" option. The information includes the log directory name
(useful for --restore) and the synchronization report. In combination
with --quiet, only the paths are listed.
syncevolution --restore <session directory> --before|--after [--dry-run] <config> <source> ...
This restores local data from the backups made before or after a
synchronization session. The --print-sessions command can be used to
find these backups. The source(s) have to be listed explicitly. There
is intentionally no default, because as with --remove there is no
confirmation question. With --dry-run, the restore is only simulated.
The session directory has to be specified explicitly with its path
name (absolute or relative to current directory). It does not have to
be one of the currently active log directories, as long as it contains
the right database dumps for the selected sources.
A restore tries to minimize the number of item changes (see section
"Item Changes and Data Changes"). This means that items that are
identical before and after the change will not be transmitted anew to
the server during the next synchronization. If the server somehow
needs to get a clean copy of all items on the client then, use "--sync
refresh-from-client" in the next run.
Here is a full description of all <options> that can be put in front
of the server name. Whenever an option accepts multiple values, a
question mark can be used to get the corresponding help text and/or
a list of valid values.
--sync|-s <mode>
--sync|-s ?
Temporarily synchronize the active sources in that mode. Useful
for a "refresh-from-server" or "refresh-from-client" sync which
clears all data at one end and copies all items from the other.
--print-servers|--print-configs|--print-peers
Prints the names of all configured peers to stdout. There is no
difference between these options, the are just aliases.
--print-config|-p
Prints the complete configuration for the selected <config>
to stdout, including up-to-date comments for all properties. The
format is the normal .ini format with source configurations in
different sections introduced with [<source>] lines. Can be combined
with --sync-property and --source-property to modify the configuration
on-the-fly. When one or more sources are listed after the <config>
name on the command line, then only the configs of those sources are
printed. "main" selects the main configuration instead of source
configurations. Using --quiet suppresses the comments for each property.
When setting a --template, then the reference configuration for
that peer is printed instead of an existing configuration.
--configure|-c
Modify the configuration files for the selected peer. If no such
configuration exists, then a new one is created using one of the
template configurations (see --template option). When creating
a new configuration only the active sources will be set to active
in the new configuration, i.e. "syncevolution -c scheduleworld addressbook"
followed by "syncevolution scheduleworld" will only synchronize the
address book. The other sources are created in a disabled state.
When modifying an existing configuration and sources are specified,
then the source properties of only those sources are modified.
--run|-r
To prevent accidental sync runs when a configuration change was
intended, but the "--configure" option was not used, "--run" must be
specified explicitly when sync or source properties are selected
on the command line and they are meant to be used during a sync
session triggered by the invocation.
--migrate
In older SyncEvolution releases a different layout of configuration files
was used. Using --migrate will automatically migrate to the new
layout and rename the <config> into <config>.old to prevent accidental use
of the old configuration. WARNING: old SyncEvolution releases cannot
use the new configuration!
The switch can also be used to migrate a configuration in the current
configuration directory: this preserves all property values, discards
obsolete properties and sets all comments exactly as if the configuration
had been created from scratch. WARNING: custom comments in the
configuration are not preserved.
--migrate implies --configure and can be combined with modifying
properties.
--sync-property|-y <property>=<value>
--sync-property|-y ?
--sync-property|-y <property>=?
Overrides a source-independent configuration property for the
current synchronization run or permanently when --configure is used
to update the configuration. Can be used multiple times. Specifying
an unused property will trigger an error message.
When using the configuration layout introduced with 1.0, some of the
sync properties are shared between peers, for example the directory
where sessions are logged. Permanently changing such a shared
property for one peer will automatically update the property for all
other peers in the same context because the property is stored in a
shared config file. When printing a config in verbose mode, a summary
comment shows which properties are shared in which way.
--source-property|-z <property>=<value>
--source-property|-z ?
--source-property|-z <property>=?
Same as --sync-property, but applies to the configuration of all active
sources. "--sync <mode>" is a shortcut for "--source-property sync=<mode>".
When combined with "--configure", the configuration of all sources is
modified. Properties cannot be specified differently for different
sources, so if you want to change a source property of just one specific
sync source, then use "--configure --source-property ... <server> <source>".
As with sync properties, some properties are shared between peers,
in particular the selection of which local data to synchronize.
--template|-l <peer name>|default|?<device>
Can be used to select from one of the built-in default configurations
for known SyncML peers. Defaults to the <config> name, so --template
only has to be specified when creating multiple different configurations
for the same peer, or when using a template that is named differently
than the peer. "default" is an alias for "scheduleworld" and can be
used as the starting point for servers which do not have a built-in
template.
Each template contains a pseudo-random device ID. Therefore setting the
"deviceId" sync property is only necessary when manually recreating a
configuration or when a more descriptive name is desired.
The available templates for different known SyncML servers are listed when
using a single question mark instead of template name. When using the
?<device> format, a fuzzy search for a template that might be
suitable for talking to such a device is done. The matching works best
when using <device> = <Manufacturer>_<Model>. If you don't know the
manufacturer, you can just keep it as empty. The output in this mode
gives the template name followed by a short description and a rating how well
the template matches the device (higher is better).
--status|-t
The changes made to local data since the last synchronization are
shown without starting a new one. This can be used to see in advance
whether the local data needs to be synchronized with the server.
--quiet|-q
Suppresses most of the normal output during a synchronization. The
log file still contains all the information.
--keyring|-k
Save or retrieve passwords from the GNOME keyring when modifying the
configuration or running a synchronization. Note that using this option
applies to *all* passwords in a configuration, so setting a single
password as follows moves the other passwords into the keyring, if
they were not stored there already:
--keyring --configure --sync-property proxyPassword=foo
When passwords were stored in the keyring, their value is set to "-"
in the configuration. This means that when running a synchronization
without the --keyring argument, the password has to be entered
interactively. The --print-config output always shows "-" instead of
retrieving the password from the keyring.
--help|-h
Prints usage information.
--version
Prints the SyncEvolution version.
Use Cases
---------
Migrate a configuration from the <= 0.7 format to the current one
and/or updates the configuration so that it looks like configurations
created anew with the current syncevolution:
$ syncevolution --migrate scheduleworld
Deactivate all sources:
$ syncevolution --configure \
--source-property sync=none \
scheduleworld
Activate address book synchronization again, using the --sync shortcut:
$ syncevolution --configure \
--sync two-way \
scheduleworld addressbook
Change the password for a configuration:
$ syncevolution --configure \
--sync-property password=foo \
scheduleworld
Set up another configuration for scheduleworld under a different name:
$ syncevolution --configure \
--sync-property username=joe \
--sync-property password=foo \
--template scheduleworld \
scheduleworld_joe
Configuration
-------------
The configuration file of a certain <peer>@<context> is stored in
$XDG_CONFIG_HOME/syncevolution/<context>/peers/<peer>/config.ini
with " $HOME/.config" as fallback if XDG_CONFIG_HOME is not
set. The per-peer data source properties are configured in
$XDG_CONFIG_HOME/syncevolution/<context>/peers/<peer>/sources/<source>/config.ini
The shared properties are in:
$XDG_CONFIG_HOME/syncevolution/config.ini
$XDG_CONFIG_HOME/syncevolution/<context>/config.ini
$XDG_CONFIG_HOME/syncevolution/<context>/sources/
There are also some hidden .synthesis, .internal.ini and
.server.ini directories resp. files. These are used internally
and are not meant to be edited manually.
The configuration of older SyncEvolution releases in the
following directory is also still supported for reading and
updating, but cannot be created anymore from scratch:
$HOME/.sync4j/evolution/<server>/spds/syncml/config.txt
$XDG_CONFIG_HOME/syncevolution/<server>/
The format is a simple list of
<property> = <value>
pairs with one pair per line. Leading spaces and space around the
equals character and at the end of the line are skipped. In other words,
values can neither start or end with spaces nor contain line breaks. Do not
put quotation marks around <value>, they would be treated as part of the
value itself. Lines starting with a hash (#) after optional leading
spaces are treated as comments and skipped.
All supported properties are listed in the template configurations.
Those which have reasonable defaults do not have to be set and are
commented out in the template configurations. Normally at least the
following configuration options need to be adapted:
<peer>/config.ini
syncURL
username
password
<peer>/sources/*/config.ini
uri
type
See "syncevolution --sync-property ?" for options in the peer
configuration and "syncevolution --source-property ?"
for options in each data source configuration.
Each data source corresponds to one database at the SyncML peer.
The local data source is determined by the type of data given in
"type" and uniquely identified with the "evolutionsource" property.
To get a list of available data sources, run SyncEvolution with no
arguments. "evolutionsource" can be set to either the name or URL
of a data source that SyncEvolution prints then.
The "uri" property is used to identify with which database on the
SyncML server the local data is to be synchronized. Each server
usually documents what needs to be configured here. The template
configurations already have this set correctly.
One can synchronize with multiple server databases in one run, but the
same server database can only be accessed once. To synchronize the
same server database with multiple local data sources, one
has to setup two independent configurations with different "deviceId"
settings and synchronize them separately. To create such a setup simply
copy the whole configuration context, e.g.:
cp -r ~/.config/syncevolution/localhost ~/.config/syncevolution/localhost_copy
and then edit ~/.config/syncevolution/localhost_copy/config.ini
to update the "deviceId" and the sources/*/config.ini files to update
the "evolutionsource".
If an Evolution data source requires authentication, the
"evolutionuser" and "evolutionpassword" are used as credentials.
In this case the directory that contains the source's config.ini should
only be accessible by the user. Usually these fields can be left
empty. Specifying a single hyphen ("-") as value for a password
instructs SyncEvolution to look for the password in an encrypted
keyring (see --keyring) or to ask for the password at runtime. The
value "${<name of environment variable>}" takes the password from
the named environment variable. Entering the password manually
is the most secure method.
***
*** Warning: setting evolutionuser/password in cases where it is not
*** needed as with local calendars and addressbooks can cause
*** the Evolution backend to hang.
***
SSL encryption of the HTTP connection is supported if the underlying
platform supports it. In order to enable it, use a syncURL with https
instead of http prefix. Not all servers support this, though. In the
default configuration, servers must present a trusted certificate
where the host name of the certificate matches the host name of the
URL. Configuration settings can be used to relax this checking, but
this makes the connection less secure and is not recommended.
If you get errors about a missing certificate file under
/etc/ssl/certs, then check whether the system packages which provide
that file are installed. On Debian/Ubuntu the package is called
"ca-certificates". Alternatively it is possible to specify a different
location of a custom certificate file in the configuration.
Automatic Backups and Logging
-----------------------------
To support recovery from a synchronization which damaged the
local data or modified it in an unexpected way, SyncEvolution
can create the following files during a synchronization:
- a dump of the data in a format which can be imported
back into Evolution, e.g. .vcf for address books
- a full log file with debug information
- a dump of the data after the synchronization for
automatic comparison of the before/after state with
"synccompare"
If the server configuration option "logdir" is set, then
a new directory will be created for each synchronization
in that directory, using the format
<peer>-<yyyy>-<mm>-<dd>-<hh>-<mm>[-<seq>]
with the various fields filled in with the time when the
synchronization started. The sequence suffix will only be
used when necessary to make the name unique. By default,
SyncEvolution will never delete any data in that log
directory unless explicitly asked to keep only a limited
number of previous log directories.
This is done by setting the "maxlogdirs" limit to something
different than the empty string and 0. If a limit is set,
then SyncEvolution will only keep that many log directories
and start removing the oldest ones when it reaches the limit.
This cleanup is only done after a successful synchronization
and is limited to directories that match the pattern for
SyncEvolution log directory names, so it is safe to put other
files or directories into the configured log directory.
To avoid writing any additional log file or database dumps during
a synchronization the "logdir" can be set to "none". To reduce
the verbosity of the log, set "loglevel". If not set or 0, then
the verbosity is set to 3 = DEBUG when writing to a log file and
2 = INFO when writing to the console directly.
Configuration with ScheduleWorld
--------------------------------
It is recommended to sync against the new vCard 3.0 URI (card3) and
iCalendar 2.0 URIs (cal2, task2), using the "text/vcard", "text/calendar"
and "text/x-todo" type setting respectively. These are the native formats of
Evolution and a lot of effort went into ensuring that they store as
much Evolution data as possible. The "note" URI and "text/x-journal" type
can be used to synchronize memos.
SyncEvolution is primarily tested against ScheduleWorld. The
"scheduleworld" configuration template is ready to be used with these
URIs, one only has to fill in the real username and password.
Configuration with Funambol
---------------------------
A default Funambol installation already contains databases which
SyncEvolution can synchronize with Evolution address books and
calendars. They are adressed in a source config with
uri = card
for contacts and
uri = cal
for calendars. Tasks (aka todos) are supported but not shown on
the myFUNAMBOL web site.
At some point the Funambol server started supporting iCalendar 2.0 for
calendars. This is the more capable (and recommended!) format, but the
server does not suggest it as "preferred". Therefore the client's
configuration must use the exclamation qualifier to pick the
2.0 format (part of the current template):
type = calendar:text/calendar!
Exchanging Data
---------------
SyncEvolution transmits address book entries as vCard 2.1 or 3.0
depending on the type chosen in the configuration. Evolution uses
3.0 internally, so SyncEvolution converts between the two formats
as needed. Calendar items and tasks can be sent and received
in iCalendar 2.0 as well as vCalendar 1.0, but vCalendar 1.0 should
be avoided if possible because it cannot represent all data that
Evolution stores.
How the server stores the items depends on its implementation and
configuration. In the default Funambol server installation, contacts
and calendar items are converted into an internal format, but at
least for contacts it preserves most of the properties used by
Evolution whereas iCalendar 2.0 items are not preserved properly
in Funambol 6.0. ScheduleWorld uses the same format as Evolution for
calendars and tasks and thus requires no conversion.
To check which data is preserved, one can use this procedure
(described for contacts, but works the same way for calendars and
tasks):
1. synchronize the address book with the server
2. create a new address book in Evolution and view it in Evolution
once (the second step is necessary in at least Evolution 2.0.4
to make the new address book usable in SyncEvolution)
3. add a configuration for that second address book and the
same URI on the SyncML server
4. synchronize again, this time using the other data source
Now one can either compare the address books in Evolution or do that
automatically, described here for contacts:
- save the complete address books: mark all entries, save as vCard
- invoke synccompare with two file names as arguments and it will
normalize and compare them automatically
Normalizing is necessary because the order of cards and their
properties as well as other minor formatting aspects may be
different. The output comes from a side-by-side comparison, but
is augmented by the script so that the context of each change
is always the complete item that was modified. Lines or items
following a ">" on the right side were added, those on the
left side followed by a "<" were removed, and those with
a "|" between text on the left and right side were modified.
The automatic unit testing (see HACKING) contains a "testItems"
test which verifies the copying of special entries using the
same method.
Modifying one of the address books or even both at the same time and
then synchronizing back and forth can be used to verify that
SyncEvolution works as expected. If you do not trust SyncEvolution or
the server, then it is prudent to run these checks with a copy of the
original address book. Make a backup of the .evolution/addressbook
directory.
Item Changes and Data Changes
-----------------------------
SyncML clients and servers consider each entry in a database as one
item. Items can be added, removed or updated. This is the item change
information that client and server exchange during a normal,
incremental synchronization.
If an item is saved, removed locally, and reimported, then this is
usually reported to a peer as "one item removed, one added" because
the information available to SyncEvolution is not sufficient to
determine that this is in fact the same item. One exception are
iCalendar 2.0 items with their globally unique ID: the modification
above will be reported to the server as "one item updated".
That is better, but still not quite correct because the content of the
item has not changed, only the meta information about it which is used
to detect changes. This cannot be avoided without creating additional
overhead for normal synchronizations.
SyncEvolution reports "item changes" (the number of added, removed and
updated items) as well as data changes. These data changes are
calculated by comparing database dumps. Because this data comparison
ignores information about which data belongs to which item, it is able
to detect that re-adding an item that was removed earlier does not
change the data, in contrast to the item changes. On the other hand,
removing one item and adding a different one may look like updating
just one item, which is not quite correct.
Conflict Resolution
-------------------
If two clients make changes to the same item, the first one to
synchronize will copy its changes to the server. The second one
then runs into a conflict when it tries to push its own changes
into the server.
The SyncML server now has to decide how to proceed. Some decide
to preserve both conflicting items, leading to duplicates which
have to be merged manually later. Other servers merge automatically
and throw away conflicting data based on heuristics; this may
remove valid data. The client has no control over the method
chosen by the server.
Merging items on the server is difficult because the SyncML protocol
does not specify which parts of a conflicting item were updated.
In general a server can only make more or less educated guesses
which might lead to data loss. It is better to avoid this situation
in the first place by synchronizing before making changes.
Known Problems + Support
------------------------
Please visit http://syncevolution.org/ for up-to-date
information about known problems and links to places where further
help can be found.
Compiling from Source
---------------------
To compile the code the source or an installation of the Synthesis
SyncML engine is needed. A compatible snapshot of it is included in
SyncEvolution source packages and will be used
automatically. Instructions for working with upstream Synthesis
sources directly are contained in the HACKING document.
Also needed are the Evolution and Boost (>= 1.35) development
files. For HTTP, either Curl or libsoup can be used.
On Debian based systems the required packages can be installed with
apt-get install evolution-data-server-dev \
libecal1.2-dev libebook1.2-dev \
libsoup2.4-dev \
libboost-dev
libboost-dev >= 1.34, available as libboost1.35-dev backport for Debian Etch.
Necessary on some distros due to bad dependencies (not needed by SyncEvolution itself):
apt-get install libdb3-dev
Optional (enables reading proxy settings from GNOME preferences):
apt-get install libsoup-gnome2.4-dev
Optional (enables direct sync with phones):
apt-get install libopenobex-dev libbluetooth-dev
Optional (only used for SHA-256 when glib is not already a dependency):
apt-get install libnss3-dev
For compiling libsynthesis:
apt-get install libpcre3-dev libsqlite3-dev libexpat-dev libz-dev
This was copied from the libsynthesis README.
The test framework also requires CPPUnit:
apt-get install libcppunit-dev
For the GUI and its D-Bus based service backend:
apt-get install libdbus-glib-1-dev \
xsltproc \
libglib2.0-dev \
libgtk2.0-dev libglade2-dev \
libgnome-keyring-dev \
libgconf2-dev libgnomevfs2-dev
Optional packages for GUI:
apt-get install libunique-dev
libunique = ensure that GTK GUI only runs once per user
Optional packages for GNOME Bluetooth Panel plugin:
apt-get install libgnome-bluetooth-dev
The plugin adds a button to invoke sync-UI after a device
was paired which supports SyncML.
The build system is the normal autotools system. See INSTALL for
general instructions how to use that and "./configure --help" for
SyncEvolution specific options.
Note that compiling without the Evolution development files is
possible. But because this is usually not what people want,
the configure script needs explicit --disable-ecal --disable-ebook
parameters, otherwise it will refuse to compile without Evolution
support.
When compiling from a git checkout, remember to run "./autogen.sh".
It depends on:
apt-get install libtool intltool automake
Supporting SyncEvolution
------------------------
SyncEvolution is free software: available free of charge and you have
the freedom of modifying and distributing it. If you are a software
developer, the best way to support SyncEvolution is to port it to
other backends and systems. Get in touch if you want to hear more
about this.
If you are a (hopefully happy) user of SyncEvolution, then you can
make your appreciation or suggestions for improvements known in
several ways. Although SyncEvolution is free, this does not mean that
its development did not cost much effort - quite the opposite, a lot
of time went into it.
- Send a postcard to the author (see main page).
- Leave comments on the author's blog (http://www.estamos.de/blog).
- Donations are not necessary and cannot be accepted either.
Authors
-------
Patrick Ohly
patrick.ohly@intel.com
http://www.estamos.de/
... plus several others:
http://syncevolution.org/about/contributors
To contact the project publicly (preferred):
syncevolution@syncevolution.org
For confidential emails there is a team mailing list:
syncevolution@lists.intel.com

631
README.rst Normal file
View file

@ -0,0 +1,631 @@
===============
SyncEvolution
===============
------------------------------------------------
synchronize personal information management data
------------------------------------------------
:Manual section: 1
:Version: 1.0
:Date: Apr 28, 2010
SYNOPSIS
========
Show available sources:
syncevolution
Show information about configuration(s):
syncevolution --print-servers|--print-configs|--print-peers
Show information about a specific configuration:
syncevolution --print-config [--quiet] <config> [main|<source> ...]
List sessions:
syncevolution --print-sessions [--quiet] <config>
Show information about SyncEvolution:
syncevolution --help|-h|--version
Run a synchronization as configured:
syncevolution <config> [<source> ...]
Run a synchronization with properties changed just for this run:
syncevolution --run <options for run> <config> [<source> ...]
Restore data from the automatic backups:
syncevolution --restore <session directory> --before|--after [--dry-run] <config> <source> ...
Modify a configuration:
syncevolution --remove|--migrate|--configure <options> <config>
DESCRIPTION
===========
This text explains the usage of the SyncEvolution command line.
SyncEvolution synchronizes personal information management (PIM) data
such as contacts, appointments, tasks and memos using the Synthesis
sync engine, which provides support for the SyncML synchronization
protocol.
SyncEvolution synchronizes with SyncML servers over HTTP and with
SyncML capable phones locally over Bluetooth (new in 1.0). Plugins
provide access to the data which is to be synchronized. Binaries are
available for Linux desktops (synchronizing data in GNOME Evolution,
with KDE supported indirectly already and Akonadi support in
development), for MeeGo (formerly Moblin) and for Maemo 5/Nokia
N900. The source code can be compiled for Unix-like systems and
provides a framework to build custom SyncML clients or servers.
USAGE
=====
The <config> and the <source> strings are used to find the
configuration files which determine how synchronization is going to
proceed. Each source corresponds to one local address book, calendar,
task list or set of memos and the corresponding database on the
peer. Depending on which parameters are given, different operations
are executed.
Starting with SyncEvolution 1.0, <config> strings can have different
meanings. Typically, a simple string like `scheduleworld` refers to
the configuration for that peer, as it did in previous releases. A
peer is either a SyncML server (the traditional usage of
SyncEvolution) or a client (the new feature in 1.0).
Each peer configuration exists inside a specific context, typically
the `@default` context. All peers in the same context share some parts
of their configuration, for example, which local databases are to be
synchronized. In that sense, a configuration context can be seen as a
set of local databases plus the peer configurations that are
synchronized against those databases.
When different peers are meant to synchronize different local
databases, then different contexts have to be used when setting up the
peers by appending a context name after the `at` sign, as in
`scheduleworld2@other-context`. Later on, if `scheduleworld2` is
unique, the `@other-context` suffix becomes optional.
Sometimes it is also useful to change configuration options of a
context, without modifying a specific peer. This can be done by using
`@default` (or some other context name) without anything before the
`at` sign. The empty string "" is the same as `@default`. ::
syncevolution
If no arguments are given, then SyncEvolution will list all available
data sources regardless whether there is a configuration file for them
or not. The output includes the identifiers which can then be used to
select those sources in a configuration file. For each source one can
set a different synchronization mode in its configuration file. ::
syncevolution <config>
Without the optional list of sources all sources which are enabled in
their configuration file are synchronized. ::
syncevolution <config> <source> ...
Otherwise only the ones mentioned on the command line are active. It
is possible to configure sources without activating their
synchronization: if the synchronization mode of a source is set to
`none`, the source will be ignored. Explicitly listing such a source
will synchronize it in `two-way` mode once.
Progress and error messages are written into a log file that is
preserved for each synchronization run. Details about that is found in
the `Automatic Backups and Logging` section below. All errors and
warnings are printed directly to the console in addition to writing
them into the log file. Before quitting SyncEvolution will print a
summary of how the local data was modified. This is done with the
`synccompare` utility script described in the `Exchanging Data`
section.
When the `logdir` option is enabled (since v0.9 done by default for
new configurations), then the same comparison is also done before the
synchronization starts.
In case of a severe error the synchronization run is aborted
prematurely and SyncEvolution will return a non-zero value. Recovery
from failed synchronization is done by forcing a full synchronization
during the next run, i.e. by sending all items and letting the SyncML
server compare against the ones it already knows. This is avoided
whenever possible because matching items during a slow synchronization
can lead to duplicate entries.
After a successful synchronization the server's configuration file is
updated so that the next run can be done incrementally. If the
configuration file has to be recreated e.g. because it was lost, the
next run recovers from that by doing a full synchronization. The risk
associated with this is that the server might not recognize items that
it already has stored previously which then would lead to duplication
of items. ::
syncevolution --configure <options for configuration> <config> [<source> ...]
Options in the configuration can be modified via the command
line. Source properties are changed for all sources unless sources are
listed explicitly. Some source properties have to be different for
each source, in which case syncevolution must be called multiple times
with one source listed in each invocation. ::
syncevolution --remove <config>
Deletes the configuration. If the <config> refers to a specific
peer, only that peer's configuration is removed. If it refers to
a context, that context and all peers inside it are removed.
Note that there is no confirmation question. Neither local data
referenced by the configuration nor the content of log dirs are
deleted. ::
syncevolution --run <options for run> <config> [<source> ...]
Options can also be overridden for just the current run, without
changing the configuration. In order to prevent accidentally running a
sync session when a configuration change was intended, either
--configure or --run must be given explicitly if options are specified
on the command line. ::
syncevolution --status <config> [<source> ...]
Prints what changes were made locally since the last synchronization.
Depends on access to database dumps from the last run, so using the
`logdir` option is recommended. ::
syncevolution --print-servers|--print-configs|--print-peers
syncevolution --print-config [--quiet] <config> [main|<source> ...]
syncevolution --print-sessions [--quiet] <config>
These commands print information about existing configurations. When
printing a configuration a short version without comments can be
selected with --quiet. When sources are listed, only their
configuration is shown. `Main` instead or in combination with sources
lists only the main peer configuration.
With --print-session information about previous synchronization
sessions for the selected peer or context are printed. This depends on
the `logdir` option. The information includes the log directory name
(useful for --restore) and the synchronization report. In combination
with --quiet, only the paths are listed. ::
syncevolution --restore <session directory> --before|--after
[--dry-run] <config> <source> ...
This restores local data from the backups made before or after a
synchronization session. The --print-sessions command can be used to
find these backups. The source(s) have to be listed explicitly. There
is intentionally no default, because as with --remove there is no
confirmation question. With --dry-run, the restore is only simulated.
The session directory has to be specified explicitly with its path
name (absolute or relative to current directory). It does not have to
be one of the currently active log directories, as long as it contains
the right database dumps for the selected sources.
A restore tries to minimize the number of item changes (see section
`Item Changes and Data Changes`_). This means that items that are
identical before and after the change will not be transmitted anew to
the server during the next synchronization. If the server somehow
needs to get a clean copy of all items on the client then, use "--sync
refresh-from-client" in the next run.
OPTIONS
=======
Here is a full description of all <options> that can be put in front
of the server name. Whenever an option accepts multiple values, a
question mark can be used to get the corresponding help text and/or
a list of valid values.
--sync|-s <mode>|?
Temporarily synchronize the active sources in that mode. Useful
for a `refresh-from-server` or `refresh-from-client` sync which
clears all data at one end and copies all items from the other.
--print-servers|--print-configs|--print-peers
Prints the names of all configured peers to stdout. There is no
difference between these options, the are just aliases.
--print-config|-p
Prints the complete configuration for the selected <config>
to stdout, including up-to-date comments for all properties. The
format is the normal .ini format with source configurations in
different sections introduced with [<source>] lines. Can be combined
with --sync-property and --source-property to modify the configuration
on-the-fly. When one or more sources are listed after the <config>
name on the command line, then only the configs of those sources are
printed. `main` selects the main configuration instead of source
configurations. Using --quiet suppresses the comments for each property.
When setting a --template, then the reference configuration for
that peer is printed instead of an existing configuration.
--configure|-c
Modify the configuration files for the selected peer. If no such
configuration exists, then a new one is created using one of the
template configurations (see --template option). When creating
a new configuration only the active sources will be set to active
in the new configuration, i.e. `syncevolution -c scheduleworld addressbook`
followed by `syncevolution scheduleworld` will only synchronize the
address book. The other sources are created in a disabled state.
When modifying an existing configuration and sources are specified,
then the source properties of only those sources are modified.
--run|-r
To prevent accidental sync runs when a configuration change was
intended, but the `--configure` option was not used, `--run` must be
specified explicitly when sync or source properties are selected
on the command line and they are meant to be used during a sync
session triggered by the invocation.
\--migrate
In older SyncEvolution releases a different layout of configuration files
was used. Using --migrate will automatically migrate to the new
layout and rename the <config> into <config>.old to prevent accidental use
of the old configuration. WARNING: old SyncEvolution releases cannot
use the new configuration!
The switch can also be used to migrate a configuration in the current
configuration directory: this preserves all property values, discards
obsolete properties and sets all comments exactly as if the configuration
had been created from scratch. WARNING: custom comments in the
configuration are not preserved.
--migrate implies --configure and can be combined with modifying
properties.
--sync-property|-y <property>=<value>|<property>=?|?
Overrides a source-independent configuration property for the
current synchronization run or permanently when --configure is used
to update the configuration. Can be used multiple times. Specifying
an unused property will trigger an error message.
When using the configuration layout introduced with 1.0, some of the
sync properties are shared between peers, for example the directory
where sessions are logged. Permanently changing such a shared
property for one peer will automatically update the property for all
other peers in the same context because the property is stored in a
shared config file. When printing a config in verbose mode, a summary
comment shows which properties are shared in which way.
--source-property|-z <property>=<value>|<property>=?|?
Same as --sync-property, but applies to the configuration of all active
sources. `--sync <mode>` is a shortcut for `--source-property sync=<mode>`.
When combined with `--configure`, the configuration of all sources is
modified. Properties cannot be specified differently for different
sources, so if you want to change a source property of just one specific
sync source, then use `--configure --source-property ... <server> <source>`.
As with sync properties, some properties are shared between peers,
in particular the selection of which local data to synchronize.
--template|-l <peer name>|default|?<device>
Can be used to select from one of the built-in default configurations
for known SyncML peers. Defaults to the <config> name, so --template
only has to be specified when creating multiple different configurations
for the same peer, or when using a template that is named differently
than the peer. `default` is an alias for `scheduleworld` and can be
used as the starting point for servers which do not have a built-in
template.
Each template contains a pseudo-random device ID. Therefore setting the
`deviceId` sync property is only necessary when manually recreating a
configuration or when a more descriptive name is desired.
The available templates for different known SyncML servers are listed when
using a single question mark instead of template name. When using the
`?<device>` format, a fuzzy search for a template that might be
suitable for talking to such a device is done. The matching works best
when using `<device> = <Manufacturer> <Model>`. If you don't know the
manufacturer, you can just keep it as empty. The output in this mode
gives the template name followed by a short description and a rating how well
the template matches the device (100% is best).
--status|-t
The changes made to local data since the last synchronization are
shown without starting a new one. This can be used to see in advance
whether the local data needs to be synchronized with the server.
--quiet|-q
Suppresses most of the normal output during a synchronization. The
log file still contains all the information.
--keyring|-k
Save or retrieve passwords from the GNOME keyring when modifying the
configuration or running a synchronization. Note that using this option
applies to *all* passwords in a configuration, so setting a single
password as follows moves the other passwords into the keyring, if
they were not stored there already::
--keyring --configure --sync-property proxyPassword=foo
When passwords were stored in the keyring, their value is set to a single
hyphen ("-") in the configuration. This means that when running a
synchronization without the --keyring argument, the password has to be
entered interactively. The --print-config output always shows "-" instead
of retrieving the password from the keyring.
--help|-h
Prints usage information.
\--version
Prints the SyncEvolution version.
EXAMPLES
========
List the known configuration templates::
syncevolution --template ?
Create a new configuration, using the existing ScheduleWorld template::
syncevolution --configure \
--sync-property "username=123456" \
--sync-property "password=!@#ABcd1234" \
scheduleworld
Review configuration::
syncevolution --print-config scheduleworld
Synchronize all sources::
syncevolution scheduleworld
Deactivate all sources::
syncevolution --configure \
--source-property sync=none \
scheduleworld
Activate address book synchronization again, using the --sync shortcut::
syncevolution --configure \
--sync two-way \
scheduleworld addressbook
Change the password for a configuration::
syncevolution --configure \
--sync-property password=foo \
scheduleworld
Set up another configuration for under a different account, using
the same default databases as above::
syncevolution --configure \
--sync-property username=joe \
--sync-property password=foo \
--template scheduleworld \
scheduleworld_joe
Set up another configuration using the same account, but different
local databases (can be used to simulate synchronizing between two
clients, see `Exchanging Data`_::
syncevolution --configure \
--sync-property "username=123456" \
--sync-property "password=!@#ABcd1234" \
--source-property sync=none \
scheduleworld@other
syncevolution --configure \
--source-property evolutionsource=<name of other address book> \
--source-property sync=two-way \
scheduleworld@other
syncevolution scheduleworld
syncevolution scheduleworld@other
Migrate a configuration from the <= 0.7 format to the current one
and/or updates the configuration so that it looks like configurations
created anew with the current syncevolution::
syncevolution --migrate scheduleworld
NOTES
=====
Exchanging Data
---------------
SyncEvolution transmits address book entries as vCard 2.1 or 3.0
depending on the type chosen in the configuration. Evolution uses
3.0 internally, so SyncEvolution converts between the two formats as
needed. Calendar items and tasks can be sent and received in iCalendar
2.0 as well as vCalendar 1.0, but vCalendar 1.0 should be avoided if
possible because it cannot represent all data that Evolution stores.
.. note:: The Evolution backends are mentioned are as examples;
the same applies to other data sources.
How the server stores the items depends on its implementation and
configuration. In the default Funambol server installation, contacts
and calendar items are converted into an internal format, but at
least for contacts it preserves most of the properties used by
Evolution whereas iCalendar 2.0 items are not preserved properly
up to and including Funambol 8.0. ScheduleWorld uses the same format
as Evolution for calendars and tasks and thus requires no conversion.
To check which data is preserved, one can use this procedure
(described for contacts, but works the same way for calendars and
tasks):
1. synchronize the address book with the server
2. create a new address book in Evolution and view it in Evolution
once (the second step is necessary in at least Evolution 2.0.4
to make the new address book usable in SyncEvolution)
3. add a configuration for that second address book and the
same URI on the SyncML server, see EXAMPLES_ above
4. synchronize again, this time using the other data source
Now one can either compare the address books in Evolution or do that
automatically, described here for contacts:
- save the complete address books: mark all entries, save as vCard
- invoke `synccompare` with two file names as arguments and it will
normalize and compare them automatically
Normalizing is necessary because the order of cards and their
properties as well as other minor formatting aspects may be
different. The output comes from a side-by-side comparison, but
is augmented by the script so that the context of each change
is always the complete item that was modified. Lines or items
following a ">" on the right side were added, those on the
left side followed by a "<" were removed, and those with
a "|" between text on the left and right side were modified.
The automatic unit testing (see HACKING) contains a `testItems`
test which verifies the copying of special entries using the
same method.
Modifying one of the address books or even both at the same time and
then synchronizing back and forth can be used to verify that
SyncEvolution works as expected. If you do not trust SyncEvolution or
the server, then it is prudent to run these checks with a copy of the
original address book. Make a backup of the .evolution/addressbook
directory.
Item Changes and Data Changes
-----------------------------
SyncML clients and servers consider each entry in a database as one
item. Items can be added, removed or updated. This is the item change
information that client and server exchange during a normal,
incremental synchronization.
If an item is saved, removed locally, and reimported, then this is
usually reported to a peer as "one item removed, one added" because
the information available to SyncEvolution is not sufficient to
determine that this is in fact the same item. One exception are
iCalendar 2.0 items with their globally unique ID: the modification
above will be reported to the server as "one item updated".
That is better, but still not quite correct because the content of the
item has not changed, only the meta information about it which is used
to detect changes. This cannot be avoided without creating additional
overhead for normal synchronizations.
SyncEvolution reports *item changes* (the number of added, removed and
updated items) as well as *data changes*. These data changes are
calculated by comparing database dumps using the `synccompare` tool.
Because this data comparison ignores information about which data
belongs to which item, it is able to detect that re-adding an item
that was removed earlier does not change the data, in contrast to the
item changes. On the other hand, removing one item and adding a
different one may look like updating just one item.
Automatic Backups and Logging
-----------------------------
To support recovery from a synchronization which damaged the
local data or modified it in an unexpected way, SyncEvolution
can create the following files during a synchronization:
- a dump of the data in a format which can be restored by
SyncEvolution, usually a single file per item containing
in a standard text format (VCARD/VCALENDAR)
- a full log file with debug information
- another dump of the data after the synchronization for
automatic comparison of the before/after state with
`synccompare`
If the server configuration option "logdir" is set, then
a new directory will be created for each synchronization
in that directory, using the format `<peer>-<yyyy>-<mm>-<dd>-<hh>-<mm>[-<seq>]`
with the various fields filled in with the time when the
synchronization started. The sequence suffix will only be
used when necessary to make the name unique. By default,
SyncEvolution will never delete any data in that log
directory unless explicitly asked to keep only a limited
number of previous log directories.
This is done by setting the "maxlogdirs" limit to something
different than the empty string and 0. If a limit is set,
then SyncEvolution will only keep that many log directories
and start removing the "less interesting" ones when it reaches
the limit. Less interesting are those where no data changed
and no error occurred.
To avoid writing any additional log file or database dumps during
a synchronization, the "logdir" can be set to "none". To reduce
the verbosity of the log, set "loglevel". If not set or 0, then
the verbosity is set to 3 = DEBUG when writing to a log file and
2 = INFO when writing to the console directly. To debug issues
involving data conversion, level 4 also dumps the content of
items into the log.
ENVIRONMENT
===========
The following environment variables control where SyncEvolution finds
files and other aspects of its operations.
http_proxy
Overrides the proxy settings temporarily. Setting it to an empty value
disables the normal proxy settings.
HOME/XDG_CACHE_HOME/XDG_CONFIG_HOME
SyncEvolution follows the XDG_ desktop standard for its files. By default,
`$HOME/.config/syncevolution` is the location for configuration files.
`$HOME/.cache/syncevolution` holds session directories with log files and
database dumps.
.. _XDG: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
SYNCEVOLUTION_DEBUG
Setting this to any value disables the filtering of stdout and stderr
that SyncEvolution employs to keep noise from system libraries out
of the command line output.
SYNCEVOLUTION_GNUTLS_DEBUG
Enables additional debugging output when using the libsoup HTTP transport library.
SYNCEVOLUTION_BACKEND_DIR
Overrides the default path to plugins, normally `/usr/lib/syncevolution/backends`.
SYNCEVOLUTION_TEMPLATE_DIR
Overrides the default path to template files, normally
`/usr/share/syncevolution/templates`.
SYNCEVOLUTION_XML_CONFIG_DIR
Overrides the default path to the Synthesis XML configuration files, normally
`/usr/share/syncevolution/xml`. These files are merged into one configuration
each time the Synthesis SyncML engine is started as part of a sync session.
Note that in addition to this directory, SyncEvolution also always
searches for configuration files inside `$HOME/.config/syncevolution-xml`.
Files with the same relative path and name as in `/usr/share/syncevolution/xml`
override those files, others extend the final configuration.
BUGS
====
See `known issues`_ and the `support`_ web page for more information.
.. _known issues: http://syncevolution.org/documentation/known-issues
.. _support: http://syncevolution.org/support
SEE ALSO
========
http://syncevolution.org
AUTHORS
=======
:Main developer:
Patrick Ohly <patrick.ohly@intel.com>, http://www.estamos.de
:Contributors:
http://syncevolution.org/about/contributors
:To contact the project publicly (preferred):
syncevolution@syncevolution.org
:Intel-internal team mailing list (confidential):
syncevolution@lists.intel.com

View file

@ -136,4 +136,5 @@ echo "UI (DBus client): $enable_gui"
echo "Bluetooth transport: $have_bluetooth"
echo "GNOME Bluetooth panel plugin: $enable_gnome_bluetooth_panel"
echo "SHA-256: $have_sha"
echo "API documentation: $enable_doc"
echo

View file

@ -5,8 +5,8 @@ dnl Invoke autogen.sh to produce a configure script.
# Debian packages. For prereleases (beta, alpha),
# set it to something like "0.9.2+" and the AC_INIT
# VERSION to 1.0beta1 to produce 0.9.2+1.0beta1.
AC_INIT([syncevolution], [1.0beta2a])
STABLE_VERSION=0.9.2+
AC_INIT([syncevolution], [1.0])
STABLE_VERSION=
AC_SUBST(STABLE_VERSION)
AM_INIT_AUTOMAKE([tar-ustar])
@ -477,6 +477,34 @@ AC_SUBST(GUI_DESKTOP_FILES)
# as Debian Etch backport.
AX_BOOST_BASE(1.34)
# need rst2man for man pages
AC_ARG_WITH(rst2man,
AS_HELP_STRING([--with-rst2man=<path to reStructuredText to man converter>],
[Specifies an explicit path to the utility if not found in PATH.
An explicit --without-rst2man or not having it installed turn off
building of man pages.]),
[RST2MAN=$withval
if test "$RST2MAN" == "yes"; then
AC_PATH_PROG(RST2MAN, rst2man, "no")
fi
test "$RST2MAN" == "no" || test -x "$RST2MAN" || AC_ERROR([--with-rst2man=$RST2MAN: tool not found])],
[AC_PATH_PROG(RST2MAN, rst2man, "no")])
AM_CONDITIONAL([COND_MAN_PAGES], [test "$RST2MAN" != "no"])
# need rst2html for HTML version of README
AC_ARG_WITH(rst2html,
AS_HELP_STRING([--with-rst2html=<path to reStructuredText to HTML converter>],
[Specifies an explicit path to the utility if not found in PATH.
An explicit --without-rst2html or not having it installed turn off
building of README in HTML format.]),
[RST2HTML=$withval
if test "$RST2HTML" == "yes"; then
AC_PATH_PROG(RST2HTML, rst2html, "no")
fi
test "$RST2HTML" == "no" || test -x "$RST2HTML" || AC_ERROR([--with-rst2html=$RST2HTML: tool not found])],
[AC_PATH_PROG(RST2HTML, rst2html, "no")])
AM_CONDITIONAL([COND_HTML_README], [test "$RST2HTML" != "no"])
# absolute patch to source of Synthesis client library
SYNTHESIS_SRC=no-synthesis-source
AC_SUBST(SYNTHESIS_SRC)
@ -651,5 +679,11 @@ fi
AC_CONFIG_FILES(src/gnome-bluetooth/Makefile)
AM_CONDITIONAL([ENABLE_GNOME_BLUETOOTH_PANEL], [test "$have_gbt" = "yes" && test "$enable_gnome_bluetooth_panel" = "yes"])
AC_ARG_ENABLE(doc,
AC_HELP_STRING([--enable-doc],
[generate backend and DBus API documentation]),
enable_doc="$enableval", enable_doc="no")
AM_CONDITIONAL([COND_DOC], [test "$enable_doc" != "no"])
dnl src/backends/*/configure-sub.in and configure-post.in follow

917
po/ast.po Normal file
View file

@ -0,0 +1,917 @@
msgid ""
msgstr ""
"Project-Id-Version: syncevolution.master\n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-05-22 09:19+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: astur <malditoastur@gmail.com>\n"
"Language-Team: Softastur <alministradores@softastur.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Poedit-Language: Asturian\n"
"X-Poedit-SourceCharset: utf-8\n"
"Plural-Forms: nplurals=2; plural=n!=1;\n"
#. TRANSLATORS: this is the application name that may be used by e.g.
#. the windowmanager
#: ../src/gtk-ui/main.c:40
#: ../src/gtk-ui/ui.glade.h:38
#: ../src/gtk-ui/sync.desktop.in.h:1
#: ../src/gnome-bluetooth/syncevolution.c:112
msgid "Sync"
msgstr "Sincronizador"
#: ../src/gtk-ui/sync-ui.c:266
msgid "Contacts"
msgstr "Contautos"
#: ../src/gtk-ui/sync-ui.c:268
msgid "Appointments"
msgstr "Cites"
#: ../src/gtk-ui/sync-ui.c:270
#: ../src/gtk-ui/ui.glade.h:40
msgid "Tasks"
msgstr "Xeres"
#: ../src/gtk-ui/sync-ui.c:272
msgid "Notes"
msgstr "Notes"
#. TRANSLATORS: This is a "combination source" for syncing with devices
#. * that combine appointments and tasks. the name should match the ones
#. * used for calendar and todo above
#: ../src/gtk-ui/sync-ui.c:277
msgid "Appointments & Tasks"
msgstr "Cites y xeres"
#: ../src/gtk-ui/sync-ui.c:349
msgid "Starting sync"
msgstr "Aniciando..."
#. TRANSLATORS: slow sync confirmation dialog message. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:387
#, c-format
msgid "Do you want to slow sync with %s?"
msgstr "Quies una sincronización lenta con %s?"
#: ../src/gtk-ui/sync-ui.c:391
msgid "Yes, do slow sync"
msgstr "Sí, facer sincronización lenta"
#: ../src/gtk-ui/sync-ui.c:391
msgid "No, cancel sync"
msgstr "Non, encaboxar la sincronización"
#. TRANSLATORS: confirmation dialog for refresh-from-server. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:424
#, c-format
msgid "Do you want to delete all local data and replace it with data from %s? This is not usually advised."
msgstr "¿Quies desaniciar tolos datos llocales y sustituyilos polos datos de %s? Esto nun ye mui recomendable."
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
msgid "Yes, delete and replace"
msgstr "Sí, desaniciar y camudar"
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
#: ../src/gtk-ui/sync-ui.c:1605
msgid "No"
msgstr "Non"
#. TRANSLATORS: confirmation dialog for refresh-from-client. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:455
#, c-format
msgid "Do you want to delete all data in %s and replace it with your local data? This is not usually advised."
msgstr "¿Quies desaniciar tolos datos de %s y sustituyilos polos datos llocales? Esto nun ye mui recomendable."
# We are trying to cancel the synchronization
#: ../src/gtk-ui/sync-ui.c:487
msgid "Trying to cancel sync"
msgstr "Tamos intentando encaboxar la sincronización"
# There is no space left
#: ../src/gtk-ui/sync-ui.c:529
msgid "No service or device selected"
msgstr "Nun s'esbilló dengún serviciu o preséu"
# Last synchronization happened a few seconds ago
#. TRANSLATORS: This is the title on main view. Placeholder is
#. * the service name. Example: "Google - synced just now"
#: ../src/gtk-ui/sync-ui.c:537
#, c-format
msgid "%s - synced just now"
msgstr "%s - sincronizóse fai unos segundos"
# Last synchronization happened one minute ago
#: ../src/gtk-ui/sync-ui.c:541
#, c-format
msgid "%s - synced a minute ago"
msgstr "%s - sincronizóse fai un minutu"
# Last synchronization happened %ld minutes ago
#: ../src/gtk-ui/sync-ui.c:545
#, c-format
msgid "%s - synced %ld minutes ago"
msgstr "%s - sincronizóse fai %ld minutos"
# Last synchronization happened one hour ago
#: ../src/gtk-ui/sync-ui.c:550
#, c-format
msgid "%s - synced an hour ago"
msgstr "%s - sincronizóse fai una hora"
# Last synchronization happened %ld hours ago
#: ../src/gtk-ui/sync-ui.c:554
#, c-format
msgid "%s - synced %ld hours ago"
msgstr "%s - sincronizóse fai %ld hores"
# Last synchronization happened one day ago
#: ../src/gtk-ui/sync-ui.c:559
#, c-format
msgid "%s - synced a day ago"
msgstr "%s - sincronizóse fai un día"
# Last synchronization happened %ld days ago
#: ../src/gtk-ui/sync-ui.c:563
#, c-format
msgid "%s - synced %ld days ago"
msgstr "%s - sincronizóse fai %ld díes"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "You've just restored a backup. The changes have not been "
#. * "synced with %s yet"
#: ../src/gtk-ui/sync-ui.c:612
#: ../src/gtk-ui/sync-ui.c:726
msgid "Sync now"
msgstr "Sincronizar"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "A normal sync is not possible at this time..." message.
#. * "Other options" will open Emergency view
#: ../src/gtk-ui/sync-ui.c:618
#: ../src/gtk-ui/ui.glade.h:37
msgid "Slow sync"
msgstr "Sincronización lenta"
#: ../src/gtk-ui/sync-ui.c:619
msgid "Other options..."
msgstr "Otres opciones..."
# "Select a service". Omitted 'syn' because there's no room in the button for proper display. The context is clear and this will not impair understanding by the user.
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * when no service is selected. Will open configuration view
#: ../src/gtk-ui/sync-ui.c:624
msgid "Select sync service"
msgstr "Esbillar un serviciu"
# Edit the configuration of the service
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * login to service fails. Will open configuration view for this service
#: ../src/gtk-ui/sync-ui.c:629
msgid "Edit service settings"
msgstr "Editar la configuración del serviciu"
# There's no sync service yet between the netbook and a web service.
#: ../src/gtk-ui/sync-ui.c:700
msgid "You haven't selected a sync service or device yet. Sync services let you synchronize your data between your netbook and a web service. You can also sync directly with some devices."
msgstr "Entá nun escoyisti dengún serviciu o preséu de sincronización. Estos servicios permítente sincronizar los datos ente'l miniportátil y un serviciu web. Tamién puede facese direutamente con dellos preseos."
#: ../src/gtk-ui/sync-ui.c:722
msgid "Sync again"
msgstr "¡Sincronízate!"
#: ../src/gtk-ui/sync-ui.c:743
msgid "Restoring"
msgstr "Restaurando"
# Synchronization is taking place
#: ../src/gtk-ui/sync-ui.c:745
msgid "Syncing"
msgstr "Sincronizando"
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:757
#: ../src/gtk-ui/sync-ui.c:3399
msgid "Cancel sync"
msgstr "Encaboxar la sincronización"
#: ../src/gtk-ui/sync-ui.c:922
msgid "Back to sync"
msgstr "Volver a la sincronización"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1224
msgid "Automatic sync"
msgstr ""
"Sincronización\n"
"automática"
#. This is the expander label in emergency view. It summarizes the
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1519
#, c-format
msgid "Affected data: %s %s"
msgstr "Datos afeutaos: %s %s"
#: ../src/gtk-ui/sync-ui.c:1524
#, c-format
msgid "Affected data: none"
msgstr "Datos afeutaos: dengún"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1602
#, c-format
msgid "Do you want to restore the backup from %s? All changes you have made since then will be lost."
msgstr "¿Quies restaurar la copia de seguridá de %s? Tolos cambeos que tengas fechos dende entós van perdese."
#: ../src/gtk-ui/sync-ui.c:1605
msgid "Yes, restore"
msgstr "Sí, restaurar"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1637
#, c-format
msgid "%x %X"
msgstr "%x %X"
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1656
#, c-format
msgid "Backed up before syncing with %s"
msgstr "Copia de seguridá fecha enantes de sincronizar con %s"
#: ../src/gtk-ui/sync-ui.c:1673
msgid "Restore"
msgstr "Restaurar"
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1780
#, c-format
msgid "A normal sync with %s is not possible at this time. You can do a slow two-way sync or start from scratch. You can also restore a backup, but a slow sync or starting from scratch will still be required before normal sync is possible."
msgstr "Una sincronización normal con %s nun ye dable nesti intre. Puedes facer una sincronización lenta de dos víes o entamar de cero. Tamién puedes restaurar una copia de seguridá, pero igual se fai necesaria una sincronización lenta o entamar de cero enantes de que seya dable una sincronización normal."
#: ../src/gtk-ui/sync-ui.c:1790
#, c-format
msgid "If something has gone horribly wrong, you can try a slow sync, start from scratch or restore from backup."
msgstr "Si asocede daqué realmente malo, puedes intentar una sincronización lenta, entamar de cero o restaurar la copia de seguridá."
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1799
#, c-format
msgid ""
"Delete all your local\n"
"data and replace with\n"
"data from %s"
msgstr ""
"Desaniciar tolos datos\n"
"llocales y trocalos con\n"
"datos de %s"
#: ../src/gtk-ui/sync-ui.c:1805
#, c-format
msgid ""
"Delete all data on\n"
"%s and replace\n"
"with your local data"
msgstr ""
"Desaniciar tolos datos en\n"
"%s y trocalos\n"
"colos tos datos llocales"
#: ../src/gtk-ui/sync-ui.c:2267
msgid "Failed to get list of supported services from SyncEvolution"
msgstr "Error al obtener la llista de servicios compatibles de SyncEvolution"
#: ../src/gtk-ui/sync-ui.c:2321
msgid "There was a problem communicating with the sync process. Please try again later."
msgstr "Hebo un problema de comunicación nel procesu de sincronización. Inténtalo más sero."
#: ../src/gtk-ui/sync-ui.c:2380
msgid "Restore failed"
msgstr "Falló al Restaurar"
#: ../src/gtk-ui/sync-ui.c:2383
#: ../src/gtk-ui/sync-ui.c:3268
msgid "Sync failed"
msgstr "Falló al Sincronizar"
#: ../src/gtk-ui/sync-ui.c:2389
msgid "Restore complete"
msgstr "Restauráu completu"
#: ../src/gtk-ui/sync-ui.c:2392
msgid "Sync complete"
msgstr "¡Sincronizáu!"
#: ../src/gtk-ui/sync-ui.c:2484
#, c-format
msgid "Preparing '%s'"
msgstr "Tresnando '%s'"
#: ../src/gtk-ui/sync-ui.c:2487
#, c-format
msgid "Receiving '%s'"
msgstr "Recibiendo '%s'"
#: ../src/gtk-ui/sync-ui.c:2490
#, c-format
msgid "Sending '%s'"
msgstr "Unviando '%s'"
#: ../src/gtk-ui/sync-ui.c:2611
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] "Hebo un rechazu remotu."
msgstr[1] "Hebo %ld rechazos remotos."
#: ../src/gtk-ui/sync-ui.c:2616
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] "Hebo un rechazu llocal."
msgstr[1] "Hebo %ld rechazos llocales."
#: ../src/gtk-ui/sync-ui.c:2621
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr "Hebo %ld rechazos llocales y %ld rechazos remotos."
#: ../src/gtk-ui/sync-ui.c:2626
#, c-format
msgid "Last time: No changes."
msgstr "La cabera vegada: nun hebo cambeos."
#: ../src/gtk-ui/sync-ui.c:2628
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
msgstr[0] "La cabera vegada: unvióse un cambéu."
msgstr[1] "La cabera vegada: unviáronse %ld cambeos."
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2636
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] "La cabera vegada: aplicóse un cambéu."
msgstr[1] "La cabera vegada: aplicáronse %ld cambeos."
#: ../src/gtk-ui/sync-ui.c:2641
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr "La cabera vegada: aplicáronse %ld cambeos y unviáronse %ld cambeos."
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2848
#, c-format
msgid ""
"There was a problem with last sync:\n"
"%s"
msgstr ""
"Hebo un problema na cabera sincronización:\n"
"%s"
#: ../src/gtk-ui/sync-ui.c:2858
#, c-format
msgid "You've just restored a backup. The changes have not been synced with %s yet"
msgstr "Restauraste una copia de resguardu. Los cambeos entá nun se sincronicen con %s"
#: ../src/gtk-ui/sync-ui.c:3146
msgid "Waiting for current operation to finish..."
msgstr "Esperando a que la operación actual fine..."
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3180
msgid "A normal sync is not possible at this time. The server suggests a slow sync, but this might not always be what you want if both ends already have data."
msgstr "Nun ye dable una sincronización normal nesti intre. El sirvidor suxer una sincronización lenta, pero puede qu'esto nun seya lo que quies si dambes partes yá tienen datos."
# the syncronization service D-Bus closed unexpectedly
#: ../src/gtk-ui/sync-ui.c:3184
msgid "The sync process died unexpectedly."
msgstr "El serviciu de sincronización zarróse d'esmenu."
#: ../src/gtk-ui/sync-ui.c:3189
msgid "Password request was not answered. You can save the password in the settings to prevent the request."
msgstr "Nun se retrucó a la solicitú de contraseña. Pa evitar qu'apaeza otra vegada, puede atroxase la contraseña nos axustes."
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3193
msgid "There was a problem processing sync request. Trying again may help."
msgstr "Hebo un problema al procesar la solicitú de sincronización. Intentalo otra vegada puede ayudar."
#: ../src/gtk-ui/sync-ui.c:3199
msgid "Failed to login. Could there be a problem with your username or password?"
msgstr "Accesu fallíu. ¿Podría haber dalgún problema col to usuariu o contraseña?"
#: ../src/gtk-ui/sync-ui.c:3202
msgid "Forbidden"
msgstr "Prohibío"
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3208
msgid "A data source could not be found. Could there be a problem with the settings?"
msgstr "Nun pudo atopase la fonte de datos. ¿Podría haber dalgún problema cola configuración?"
# Fatal error in the database
#: ../src/gtk-ui/sync-ui.c:3212
msgid "Remote database error"
msgstr "Fallu na base de datos remota"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3215
msgid "There is a problem with the local database. Syncing again or rebooting may help."
msgstr "Hai un problema cola base de datos llocal. Sincronizar otra vegada o reaniciar puede aidar."
# There is no space left
#: ../src/gtk-ui/sync-ui.c:3218
msgid "No space on disk"
msgstr "Nun hai espaciu en discu"
#: ../src/gtk-ui/sync-ui.c:3220
msgid "Failed to process SyncML"
msgstr "Fallu al procesar SyncML"
# the server didn't accept the authorization
#: ../src/gtk-ui/sync-ui.c:3222
msgid "Server authorization failed"
msgstr "El sirvidor nun aceutó l'autorización"
# Error while analysing the syntax of the configuration file
#: ../src/gtk-ui/sync-ui.c:3224
msgid "Failed to parse configuration file"
msgstr "Fallu al analizar el ficheru de configuración"
# Error while reading the configuration file
#: ../src/gtk-ui/sync-ui.c:3226
msgid "Failed to read configuration file"
msgstr "Fallu al lleer del ficheru de configuración"
# The configuration has not been found
#: ../src/gtk-ui/sync-ui.c:3228
msgid "No configuration found"
msgstr "Nun s'alcontró la configuración"
# The configuration file has not been found
#: ../src/gtk-ui/sync-ui.c:3230
msgid "No configuration file found"
msgstr "Nun s'alcontró'l ficheru de configuración"
# The server sent an an invalid content
#: ../src/gtk-ui/sync-ui.c:3232
msgid "Server sent bad content"
msgstr "El sirvidor unvió un conteníu non válidu"
#: ../src/gtk-ui/sync-ui.c:3234
msgid "Connection certificate has expired"
msgstr "El certificáu de conexón venció"
# The connection certificate is not valid
#: ../src/gtk-ui/sync-ui.c:3236
msgid "Connection certificate is invalid"
msgstr "El certificáu de conexón nun ye válidu"
#: ../src/gtk-ui/sync-ui.c:3244
msgid "We were unable to connect to the server. The problem could be temporary or there could be something wrong with the settings."
msgstr "Nun pudimos coneutanos col sirvidor. El problema podría ser temporal o podría haber dalgún problema cola configuración."
# The URL is incorrect
#: ../src/gtk-ui/sync-ui.c:3251
msgid "The server URL is bad"
msgstr "La URL del sirvidor ye incorreuta"
#: ../src/gtk-ui/sync-ui.c:3256
msgid "The server was not found"
msgstr "Nun s'alcontró'l sirvidor"
#: ../src/gtk-ui/sync-ui.c:3258
#, c-format
msgid "Error %d"
msgstr "Fallu: %d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3396
msgid "Password is required for sync"
msgstr "Requierse contraseña pa la sincronización"
#: ../src/gtk-ui/sync-ui.c:3400
msgid "Sync with password"
msgstr "Sincronización con contraseña"
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3410
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr "Por favor introduz la contraseña pa sincronizar con %s:"
#. title for the buttons on the right side of main view
#: ../src/gtk-ui/ui.glade.h:2
msgid "<b>Actions</b>"
msgstr "<b>Aiciones</b>"
#. text between the two "start from scratch" buttons in emergency view
#: ../src/gtk-ui/ui.glade.h:4
msgid "<b>or</b>"
msgstr "<b>o</b>"
# compatible services
#: ../src/gtk-ui/ui.glade.h:5
msgid "<big>Direct sync</big>"
msgstr "<big>Sincronización direuta</big>"
#: ../src/gtk-ui/ui.glade.h:6
msgid "<big>Network sync</big>"
msgstr "<big>Sincronización de rede</big>"
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:8
msgid "<big>Restore from backup</big>"
msgstr "<big>Restaurar de la copia de seguridá</big>"
# compatible services
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:10
msgid "<big>Slow sync</big>"
msgstr "<big>Sincronización lenta</big>"
# compatible services
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:12
msgid "<big>Start from scratch</big>"
msgstr "<big>Entamar dende cero</big>"
#: ../src/gtk-ui/ui.glade.h:13
msgid ""
"A slow sync compares items from both sides and tries to merge them. \n"
"This may fail in some cases, leading to duplicates or lost information."
msgstr ""
"Una sincronización lenta compara elementos de dambos llaos ya intenta combinalos. \n"
"Esto puede fallar en dellos casos, criando duplicaos o perda d'información."
# I had to shorten the string to fit the button
#: ../src/gtk-ui/ui.glade.h:15
msgid "Add new device"
msgstr "Amestar preséu"
#: ../src/gtk-ui/ui.glade.h:16
msgid "Add new service"
msgstr "Amestar serviciu"
#. explanation of "Restore backup" function
#: ../src/gtk-ui/ui.glade.h:18
msgid "Backups are made before every time we Sync. Choose a backup to restore. Any changes you have made since then will be lost."
msgstr "Les copies de seguridá faense enantes cada vegada que sincronizamos. Escueyi una copia de seguridá pa restaurar. Cualesquier cambéu que tengas fechu dende entós, va perdese."
#: ../src/gtk-ui/ui.glade.h:19
msgid "Calendar"
msgstr "Calendariu"
#. Button in main view, right side. Keep to below 20 chars per line, feel free to use two lines
#: ../src/gtk-ui/ui.glade.h:21
msgid ""
"Change or edit\n"
"sync service"
msgstr ""
"Camudar o editar\n"
"serviciu sincronizador"
#. close button for settings window
#: ../src/gtk-ui/ui.glade.h:24
msgid "Close"
msgstr "Zarrar"
#: ../src/gtk-ui/ui.glade.h:25
msgid ""
"Delete all data on Zyb \n"
"and replace with your\n"
"local information"
msgstr ""
"Desaniciar tolos datos en Zyb \n"
"y sustituyilos cola to\n"
"información llocal"
#: ../src/gtk-ui/ui.glade.h:28
msgid ""
"Delete all your local\n"
"information and replace\n"
"with data from Zyb"
msgstr ""
"Desaniciar tolos datos\n"
"llocales y trocalos con\n"
"datos de %s"
#. button in main view, right side. Keep length to 20 characters or so, use two lines if needed
#: ../src/gtk-ui/ui.glade.h:32
msgid ""
"Fix a sync\n"
"emergency"
msgstr ""
"Iguar urxencia\n"
"en sincronización"
#: ../src/gtk-ui/ui.glade.h:34
msgid ""
"If you don't see your service above but know that your sync provider uses SyncML\n"
"you can setup a service manually."
msgstr ""
"Si nun puedes ver el to serviciu de sincronización arriba, pero sabes que'l to fornidor emplega SyncML\n"
"puedes configurar el serviciu manualmente."
#: ../src/gtk-ui/ui.glade.h:36
msgid "Settings"
msgstr "Configuración"
#: ../src/gtk-ui/ui.glade.h:39
msgid "Sync Emergency"
msgstr "Sincronización d'emerxencia"
#: ../src/gtk-ui/ui.glade.h:41
msgid ""
"To sync you'll need a network connection and an account with a sync service.\n"
"We support the following services: "
msgstr ""
"Pa executar la sincronización faen falta una conexón de rede y una cuenta nun serviciu de sincronización. \n"
"Son compatibles los siguientes servicios:"
#: ../src/gtk-ui/ui.glade.h:43
msgid "Use Bluetooth to Sync your data from one device to another."
msgstr "Usa Bluetooth pa sincronizar los tos datos dende un preséu a otru. "
#: ../src/gtk-ui/ui.glade.h:44
msgid "You will need to add Bluetooth devices before they can be synced."
msgstr "Vas necesitar amestar preseos Bluetooth enantes de que puedan sincronizase."
#: ../src/gtk-ui/sync.desktop.in.h:2
#: ../src/gtk-ui/sync-gtk.desktop.in.h:2
msgid "Up to date"
msgstr "Al día"
#: ../src/gtk-ui/sync-gtk.desktop.in.h:1
msgid "Sync (GTK)"
msgstr "Sync (GTK)"
#: ../src/gtk-ui/sync-config-widget.c:78
msgid "ScheduleWorld enables you to keep your contacts, events, tasks, and notes in sync."
msgstr "ScheduleWorld permítete sincronizar los contautos, eventos, xeres y notes."
#: ../src/gtk-ui/sync-config-widget.c:81
msgid "Google Sync can backup and synchronize your contacts with your Gmail contacts."
msgstr "Google Sync puede facer copia de resguardu y sincroniza los tos contautos colos que tengas en Gmail."
#. TRANSLATORS: Please include the word "demo" (or the equivalent in
#. your language): Funambol is going to be a 90 day demo service
#. in the future
#: ../src/gtk-ui/sync-config-widget.c:87
msgid "Backup your contacts and calendar. Sync with a single click, anytime, anywhere (DEMO)."
msgstr "Resguarda los tos contautos y el calendariu. Sincronízalos con un clic, en cualesquier intre y dende au seya (DEMO)."
#: ../src/gtk-ui/sync-config-widget.c:90
msgid "Mobical Backup and Restore service allows you to securely backup your personal mobile data for free."
msgstr "El serviciu Mobical Backup and Restore permítete facer copies de resguardu segures de la información del to móvil de baldre."
#: ../src/gtk-ui/sync-config-widget.c:93
msgid "ZYB is a simple way for people to store and share mobile information online."
msgstr "ZYB ye un mou cenciellu pa que la xente atroxe y comparta la información móvil en llinia."
#: ../src/gtk-ui/sync-config-widget.c:96
msgid "Memotoo lets you access your personal data from any computer connected to the Internet."
msgstr "Memotoo permítete acceder a los tos datos personales dende cualesquier computadora coneutada con Internet."
# Error while analysing the syntax of the configuration file
#: ../src/gtk-ui/sync-config-widget.c:192
msgid "Sorry, failed to save the configuration"
msgstr "Sentímoslo, nun pudo atroxase la configuración"
#: ../src/gtk-ui/sync-config-widget.c:381
msgid "Service must have a name and server URL"
msgstr "El serviciu tien de tener un nome y una URL"
#: ../src/gtk-ui/sync-config-widget.c:422
#, c-format
msgid "Do you want to reset the settings for %s? This will not remove any synced information on either end."
msgstr "¿Quies reaxustar la configuración pa %s? Esto nun desaniciará denguna información sincronizada nes partes."
#. TRANSLATORS: buttons in reset-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:426
msgid "Yes, reset"
msgstr "Sí, reaniciar"
#: ../src/gtk-ui/sync-config-widget.c:427
#: ../src/gtk-ui/sync-config-widget.c:438
msgid "No, keep settings"
msgstr "Non, caltener configuración"
#: ../src/gtk-ui/sync-config-widget.c:432
#, c-format
msgid "Do you want to delete the settings for %s? This will not remove any synced information on either end but it will remove these settings."
msgstr "¿Quies desaniciar la configuración de %s? Esto nun desaniciará denguna información sincronizada en dengún de los dos llaos, pero desaniciará esta configuración. "
#. TRANSLATORS: buttons in delete-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:437
msgid "Yes, delete"
msgstr "Sí, desaniciar"
#: ../src/gtk-ui/sync-config-widget.c:467
msgid "Reset settings"
msgstr "Devolver la configuración a los valores orixinales"
#: ../src/gtk-ui/sync-config-widget.c:470
msgid "Delete settings"
msgstr "Desaniciar la configuración"
# Configuring and using
#: ../src/gtk-ui/sync-config-widget.c:480
msgid "Save and use"
msgstr "Guardar y usar"
#: ../src/gtk-ui/sync-config-widget.c:483
msgid ""
"Save and replace\n"
"current service"
msgstr ""
"Guardar y trocar\n"
"serviciu actual"
#: ../src/gtk-ui/sync-config-widget.c:493
msgid "Stop using device"
msgstr "Dexar d'usar esti preséu"
#: ../src/gtk-ui/sync-config-widget.c:496
msgid "Stop using service"
msgstr "Dexar d'usar esti serviciu"
# URI of %s
#. TRANSLATORS: label for an entry in service configuration form.
#. * Placeholder is a source name.
#. * Example: "Appointments URI"
#: ../src/gtk-ui/sync-config-widget.c:679
#, c-format
msgid "%s URI"
msgstr "URI de %s"
#. TRANSLATORS: toggles in service configuration form, placeholder is service
#. * or device name
#: ../src/gtk-ui/sync-config-widget.c:854
#, c-format
msgid "Send changes to %s"
msgstr "Unviar cambeos a %s"
#: ../src/gtk-ui/sync-config-widget.c:859
#, c-format
msgid "Receive changes from %s"
msgstr "Recibir cambéu de %s"
#: ../src/gtk-ui/sync-config-widget.c:875
msgid "<b>Sync</b>"
msgstr "<b>Sincronizar</b>"
#. TRANSLATORS: label of a entry in service configuration
#: ../src/gtk-ui/sync-config-widget.c:891
msgid "Server address"
msgstr "Direición del sirvidor"
# I had to use colon to avoid the problem of selecting a masculine or feminine gender in the article, which would create problems down the road.
#. TRANSLATORS: explanation before a device template combobox.
#. * Placeholder is a device name like 'Nokia N85' or 'Syncevolution
#. * Client'
#: ../src/gtk-ui/sync-config-widget.c:967
#, c-format
msgid "This device looks like it might be a '%s'. If this is not correct, please take a look at the list of supported devices and pick yours if it is listed"
msgstr "Paez qu'esti preséu ye: %s'. Si nun ye cierto, mira la llista de los preseos compatibles y seleiciona'l correutu, si apaez."
#: ../src/gtk-ui/sync-config-widget.c:973
msgid "We don't know what this device is exactly. Please take a look at the list of supported devices and pick yours if it is listed"
msgstr "Nun sabemos qué preséu ye ésti. Mira la llista de los preseos compatibles y seleiciona'l correutu, si apaez."
#: ../src/gtk-ui/sync-config-widget.c:1126
#, c-format
msgid "%s - Bluetooth device"
msgstr "%s - Preseos Bluetooth"
#. TRANSLATORS: service title for services that are not based on a
#. * template in service list, the placeholder is the name of the service
#: ../src/gtk-ui/sync-config-widget.c:1132
#, c-format
msgid "%s - manually setup"
msgstr "%s - configurar manualmente"
# Open the website
#. TRANSLATORS: link button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1807
msgid "Launch website"
msgstr "Abrir el sitiu web"
# Configuring and using
#. TRANSLATORS: button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1816
msgid "Setup now"
msgstr "Configurar agora"
#. TRANSLATORS: labels of entries in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1912
msgid "Username"
msgstr "Usuariu"
#: ../src/gtk-ui/sync-config-widget.c:1927
msgid "Password"
msgstr "Contraseña"
#. TRANSLATORS: warning in service configuration form for people
#. who have modified the configuration via other means.
#: ../src/gtk-ui/sync-config-widget.c:1950
msgid "Current configuration is more complex than what can be shown here. Changes to sync mode or synced data types will overwrite that configuration."
msgstr "La configuración ye más complexa de lo que podemos amosar equí. Cambeos en el mou de sincronización o les tribes de datos sincronizaos van sobroscribir esa configuración."
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1969
msgid "Hide server settings"
msgstr "Anubrir la configuración del sirvidor"
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1989
msgid "Show server settings"
msgstr "Amosar la configuración del sirvidor"
#: ../src/gnome-bluetooth/syncevolution.c:110
msgid "Sync in the Sync application"
msgstr "Sincronizar n'aplicación de sincronización"
# Synchronization is taking place
#: ../src/syncevo-dbus-server.cpp:5667
#, c-format
msgid "%s is syncing"
msgstr "%s ta sincronizándose"
#: ../src/syncevo-dbus-server.cpp:5668
#, c-format
msgid "We have just started to sync your computer with the %s sync service."
msgstr "Anicióse a sincronizar esta máquina col serviciu de sincronización %s."
#. if sync is successfully started and done
#: ../src/syncevo-dbus-server.cpp:5682
#, c-format
msgid "%s sync complete"
msgstr "Completóse la sincronización de %s"
#: ../src/syncevo-dbus-server.cpp:5683
#, c-format
msgid "We have just finished syncing your computer with the %s sync service."
msgstr "Finóse de sincronizar esta máquina col serviciu de sincronización %s."
#. if sync is successfully started and has errors, or not started successful with a fatal problem
#: ../src/syncevo-dbus-server.cpp:5688
msgid "Sync problem."
msgstr "Problemes na sincronización."
#: ../src/syncevo-dbus-server.cpp:5689
msgid "Sorry, there's a problem with your sync that you need to attend to."
msgstr "Hebo un fallu mentantu la sincronización, y tienes qu'igualu."
#: ../src/syncevo-dbus-server.cpp:5762
msgid "View"
msgstr "Ver"
#. Use "default" as ID because that is what mutter-moblin
#. recognizes: it then skips the action instead of adding it
#. in addition to its own "Dismiss" button (always added).
#: ../src/syncevo-dbus-server.cpp:5766
msgid "Dismiss"
msgstr "Zarrar"
#~ msgid ""
#~ "Do you want to replace %s with %s? This will not remove any synced "
#~ "information on either end but you will no longer be able to sync with %s."
#~ msgstr ""
#~ "¿Quies camudar %s por %s? Esto nun va desaniciar denguna información "
#~ "sincronizada nes partes pero nun podrás volver a sincronizar con %s."
#~ msgid "Yes, use %s"
#~ msgstr "Sí, usa %s"
#~ msgid "No, use %s"
#~ msgstr "Non, usa %s"
#~ msgid "Database error"
#~ msgstr "Error na base de datos"

168
po/de.po
View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-04-28 09:27+0000\n"
"POT-Creation-Date: 2010-05-17 21:48+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: Clara Steiner-Jay <csteiner@aracnet.com>\n"
"Language-Team: \n"
@ -82,7 +82,7 @@ msgstr "Ja, löschen und ersetzen"
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
#: ../src/gtk-ui/sync-ui.c:1580
#: ../src/gtk-ui/sync-ui.c:1605
msgid "No"
msgstr "Nein"
@ -154,7 +154,9 @@ msgstr "Jetzt syncen"
#: ../src/gtk-ui/sync-ui.c:618
#: ../src/gtk-ui/ui.glade.h:37
msgid "Slow sync"
msgstr "Langsame Synchronisation"
msgstr ""
"Langsame\n"
"Synchronisation"
#: ../src/gtk-ui/sync-ui.c:619
msgid "Other options..."
@ -164,7 +166,7 @@ msgstr "Andere Optionen..."
#. * when no service is selected. Will open configuration view
#: ../src/gtk-ui/sync-ui.c:624
msgid "Select sync service"
msgstr "Synchronisations-Service auswählen"
msgstr "Synchronisations-Service wählen"
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * login to service fails. Will open configuration view for this service
@ -193,7 +195,7 @@ msgstr "Syncen..."
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:757
#: ../src/gtk-ui/sync-ui.c:3373
#: ../src/gtk-ui/sync-ui.c:3399
msgid "Cancel sync"
msgstr ""
"Synchronisation\n"
@ -206,7 +208,7 @@ msgstr "Zurück zur Synchronisation"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1223
#: ../src/gtk-ui/sync-ui.c:1224
msgid "Automatic sync"
msgstr ""
"Automatische\n"
@ -216,148 +218,148 @@ msgstr ""
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1494
#: ../src/gtk-ui/sync-ui.c:1519
#, c-format
msgid "Affected data: %s %s"
msgstr "Betroffene Daten: %s %s"
#: ../src/gtk-ui/sync-ui.c:1499
#: ../src/gtk-ui/sync-ui.c:1524
#, c-format
msgid "Affected data: none"
msgstr "Betroffene Daten: Keine"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1577
#: ../src/gtk-ui/sync-ui.c:1602
#, c-format
msgid "Do you want to restore the backup from %s? All changes you have made since then will be lost."
msgstr "Soll die Sicherheitskopie von %s wiederhergestellt werden? Alle seither gemachten Änderungen gehen dann verloren."
#: ../src/gtk-ui/sync-ui.c:1580
#: ../src/gtk-ui/sync-ui.c:1605
msgid "Yes, restore"
msgstr "Ja, wiederherstellen"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1612
#: ../src/gtk-ui/sync-ui.c:1637
#, c-format
msgid "%x %X"
msgstr "%x %X"
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1631
#: ../src/gtk-ui/sync-ui.c:1656
#, c-format
msgid "Backed up before syncing with %s"
msgstr "Sicherheitskopie wurde erstellt vor Synchronisation mit %s"
#: ../src/gtk-ui/sync-ui.c:1648
#: ../src/gtk-ui/sync-ui.c:1673
msgid "Restore"
msgstr "Wiederherstellen"
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1755
#: ../src/gtk-ui/sync-ui.c:1780
#, c-format
msgid "A normal sync with %s is not possible at this time. You can do a slow two-way sync or start from scratch. You can also restore a backup, but a slow sync or starting from scratch will still be required before normal sync is possible."
msgstr "Eine normale Synchronisation mit %s ist zur Zeit nicht möglich. Du kannst eine langsame Zwei-Wege-Synchronisation durchführen, neu anfangen, oder eine Sicherheitskopie wiederherstellen. Eine langsame Synchronisation oder ein Neuanfang sind jedoch erforderlich, bevor eine normale Synchronisation mäglich ist."
#: ../src/gtk-ui/sync-ui.c:1765
#: ../src/gtk-ui/sync-ui.c:1790
#, c-format
msgid "If something has gone horribly wrong, you can try a slow sync, start from scratch or restore from backup."
msgstr "Falls etwas fehlgschlagen ist, kannst du eine langsame Synchcronisation versuchen, neu anfangen oder von der Sicherheitskopie Daten wiederherstellen."
msgstr "Falls etwas fehlgeschlagen ist, kannst du eine langsame Synchronisation versuchen, neu anfangen oder von der Sicherheitskopie Daten wiederherstellen."
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1774
#: ../src/gtk-ui/sync-ui.c:1799
#, c-format
msgid ""
"Delete all your local\n"
"data and replace with\n"
"data from %s"
msgstr ""
"Alle lokalen\n"
"Daten löschen und ersetzen mit\n"
"Alle lokalen Daten\n"
"löschen und ersetzen mit\n"
"Daten von %s"
#: ../src/gtk-ui/sync-ui.c:1780
#: ../src/gtk-ui/sync-ui.c:1805
#, c-format
msgid ""
"Delete all data on\n"
"%s and replace\n"
"with your local data"
msgstr ""
"Alle Daten auf\n"
"%s löschen und ersetzen\n"
"Alle Daten auf %s\n"
"löschen und ersetzen\n"
"mit deinen lokalen Daten"
#: ../src/gtk-ui/sync-ui.c:2241
#: ../src/gtk-ui/sync-ui.c:2267
msgid "Failed to get list of supported services from SyncEvolution"
msgstr "Liste der unterstützten Services konnte nicht von SyncEvolution empfangen werden"
msgstr "Liste der unterstützten Services konnte nicht von SyncEvolution empfangen werden."
#: ../src/gtk-ui/sync-ui.c:2295
#: ../src/gtk-ui/sync-ui.c:2321
msgid "There was a problem communicating with the sync process. Please try again later."
msgstr "Bei der Kommunikation mit dem Sync-Service trat ein Problem auf. Versuche es später nochmals."
#: ../src/gtk-ui/sync-ui.c:2354
#: ../src/gtk-ui/sync-ui.c:2380
msgid "Restore failed"
msgstr "Verbindung fehlgeschlagen"
# changed to avoid truncation
#: ../src/gtk-ui/sync-ui.c:2357
#: ../src/gtk-ui/sync-ui.c:3242
#: ../src/gtk-ui/sync-ui.c:2383
#: ../src/gtk-ui/sync-ui.c:3268
msgid "Sync failed"
msgstr "Sync fehlgeschlagen"
#: ../src/gtk-ui/sync-ui.c:2363
#: ../src/gtk-ui/sync-ui.c:2389
msgid "Restore complete"
msgstr "Wiederherstellung beendet"
#: ../src/gtk-ui/sync-ui.c:2366
#: ../src/gtk-ui/sync-ui.c:2392
msgid "Sync complete"
msgstr "Sync beendet"
#: ../src/gtk-ui/sync-ui.c:2458
#: ../src/gtk-ui/sync-ui.c:2484
#, c-format
msgid "Preparing '%s'"
msgstr "'%s' wird vorbereitet"
#: ../src/gtk-ui/sync-ui.c:2461
#: ../src/gtk-ui/sync-ui.c:2487
#, c-format
msgid "Receiving '%s'"
msgstr "'%s' wird empfangen"
#: ../src/gtk-ui/sync-ui.c:2464
#: ../src/gtk-ui/sync-ui.c:2490
#, c-format
msgid "Sending '%s'"
msgstr "'%s' wird gesendet"
#: ../src/gtk-ui/sync-ui.c:2585
#: ../src/gtk-ui/sync-ui.c:2611
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] "Es gab eine Remote-Ablehnung."
msgstr[1] "Es gab %ld Remote-Ablehnungen."
#: ../src/gtk-ui/sync-ui.c:2590
#: ../src/gtk-ui/sync-ui.c:2616
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] "Es gab eine lokale Ablehnung."
msgstr[1] "Es gab %ld lokale Ablehnungen."
#: ../src/gtk-ui/sync-ui.c:2595
#: ../src/gtk-ui/sync-ui.c:2621
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr "Es gab %ld lokale Ablehnungen und %ld Remote-Ablehnungen."
#: ../src/gtk-ui/sync-ui.c:2600
#: ../src/gtk-ui/sync-ui.c:2626
#, c-format
msgid "Last time: No changes."
msgstr "Letztes Mal: Keine Änderungen."
#: ../src/gtk-ui/sync-ui.c:2602
#: ../src/gtk-ui/sync-ui.c:2628
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
@ -367,21 +369,21 @@ msgstr[1] "Letztes Mal: %ld Änderungen abgeschickt."
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2610
#: ../src/gtk-ui/sync-ui.c:2636
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] "Letztes Mal: Eine Änderung angewandt."
msgstr[1] "Letztes Mal: %ld Änderungen angewandt."
#: ../src/gtk-ui/sync-ui.c:2615
#: ../src/gtk-ui/sync-ui.c:2641
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr "Letztes Mal: %ld Änderungen angewandt und %ld Änderungen abgeschickt."
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2822
#: ../src/gtk-ui/sync-ui.c:2848
#, c-format
msgid ""
"There was a problem with last sync:\n"
@ -390,128 +392,128 @@ msgstr ""
"Bei der letzten Synchronisation trat ein Problem auf:\n"
"%s"
#: ../src/gtk-ui/sync-ui.c:2832
#: ../src/gtk-ui/sync-ui.c:2858
#, c-format
msgid "You've just restored a backup. The changes have not been synced with %s yet"
msgstr "Du hast soeben eine Sicherheitskopie erstellt. Die Änderungen wurden noch nicht mit %s synchronisiert."
#: ../src/gtk-ui/sync-ui.c:3120
#: ../src/gtk-ui/sync-ui.c:3146
msgid "Waiting for current operation to finish..."
msgstr "Warten auf Beenden des laufenden Vorgangs..."
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3154
#: ../src/gtk-ui/sync-ui.c:3180
msgid "A normal sync is not possible at this time. The server suggests a slow sync, but this might not always be what you want if both ends already have data."
msgstr "Eine normale Synchronisation ist zur Zeit nicht möglich. Der Server schlägt eine langsame Synchronisation vor, doch wenn beide Enden bereits Daten haben ist dies vielleicht nicht immer wünschenswert."
msgstr "Eine normale Synchronisation ist zur Zeit nicht möglich. Der Server schlägt eine langsame Synchronisation vor, doch wenn beide Enden bereits Daten haben, ist dies vielleicht nicht immer wünschenswert."
#: ../src/gtk-ui/sync-ui.c:3158
#: ../src/gtk-ui/sync-ui.c:3184
msgid "The sync process died unexpectedly."
msgstr "Sync-Prozess wurde unerwartet abgebrochen."
#: ../src/gtk-ui/sync-ui.c:3163
#: ../src/gtk-ui/sync-ui.c:3189
msgid "Password request was not answered. You can save the password in the settings to prevent the request."
msgstr "Passwortanfrage wurde nicht beantwortet. Du kannst das Passwort in den Einstellungen speichern, um die Anfrage zu vermeiden."
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3167
#: ../src/gtk-ui/sync-ui.c:3193
msgid "There was a problem processing sync request. Trying again may help."
msgstr "Beim Bearbeiten der Synchronisationsanfrage trat ein Problem auf. Es wird empfohlen, es noch einmal zu versuchen."
#: ../src/gtk-ui/sync-ui.c:3173
#: ../src/gtk-ui/sync-ui.c:3199
msgid "Failed to login. Could there be a problem with your username or password?"
msgstr "Anmeldung gescheitert. Es könnte ein Problem mit dem Benutzernamen oder dem Kennwort bestehen."
#: ../src/gtk-ui/sync-ui.c:3176
#: ../src/gtk-ui/sync-ui.c:3202
msgid "Forbidden"
msgstr "Verboten"
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3182
#: ../src/gtk-ui/sync-ui.c:3208
msgid "A data source could not be found. Could there be a problem with the settings?"
msgstr "Die Datenquelle wurde nicht gefunden. Könnrte es ein Problem bei den Einstellungen geben?"
msgstr "Die Datenquelle wurde nicht gefunden. Könnte es ein Problem bei den Einstellungen geben?"
#: ../src/gtk-ui/sync-ui.c:3186
#: ../src/gtk-ui/sync-ui.c:3212
msgid "Remote database error"
msgstr "Fehler bei Remote-Datenbank"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3189
#: ../src/gtk-ui/sync-ui.c:3215
msgid "There is a problem with the local database. Syncing again or rebooting may help."
msgstr "Es gibt ein Problem mit der lokalen Datenbank. Es wird empfohlen, noch einmal zu synchronisieren oder den Computer neu zu starten"
#: ../src/gtk-ui/sync-ui.c:3192
#: ../src/gtk-ui/sync-ui.c:3218
msgid "No space on disk"
msgstr "Kein Platz auf der Festplatte"
#: ../src/gtk-ui/sync-ui.c:3194
#: ../src/gtk-ui/sync-ui.c:3220
msgid "Failed to process SyncML"
msgstr "SyncML konnte nicht verarbeitet werden"
#: ../src/gtk-ui/sync-ui.c:3196
#: ../src/gtk-ui/sync-ui.c:3222
msgid "Server authorization failed"
msgstr "Serverauthentifizierung fehlgeschlagen"
#: ../src/gtk-ui/sync-ui.c:3198
#: ../src/gtk-ui/sync-ui.c:3224
msgid "Failed to parse configuration file"
msgstr "Konfigurationsdatei konnte nicht analysiert werden"
#: ../src/gtk-ui/sync-ui.c:3200
#: ../src/gtk-ui/sync-ui.c:3226
msgid "Failed to read configuration file"
msgstr "Konfigurationsdatei konnte nicht gelesen werden"
#: ../src/gtk-ui/sync-ui.c:3202
#: ../src/gtk-ui/sync-ui.c:3228
msgid "No configuration found"
msgstr "Keine Konfiguration gefunden"
#: ../src/gtk-ui/sync-ui.c:3204
#: ../src/gtk-ui/sync-ui.c:3230
msgid "No configuration file found"
msgstr "Keine Konfigurationsdatei gefunden"
# "The Server has sent invalid content"
#: ../src/gtk-ui/sync-ui.c:3206
#: ../src/gtk-ui/sync-ui.c:3232
msgid "Server sent bad content"
msgstr "Der Server hat ungültigen Inhalt gesendet"
#: ../src/gtk-ui/sync-ui.c:3208
#: ../src/gtk-ui/sync-ui.c:3234
msgid "Connection certificate has expired"
msgstr "Das Zertifikat der Verbindung ist abgelaufen"
#: ../src/gtk-ui/sync-ui.c:3210
#: ../src/gtk-ui/sync-ui.c:3236
msgid "Connection certificate is invalid"
msgstr "Das Zertifikat der Verbindung ist ungültig"
#: ../src/gtk-ui/sync-ui.c:3218
#: ../src/gtk-ui/sync-ui.c:3244
msgid "We were unable to connect to the server. The problem could be temporary or there could be something wrong with the settings."
msgstr "Verbindung mit dem Server konnte nicht hergestellt werden. Das Problem ist vielleicht nur temporär, oder es könnte ein Fehler bei den Einstellungen vorliegen."
#: ../src/gtk-ui/sync-ui.c:3225
#: ../src/gtk-ui/sync-ui.c:3251
msgid "The server URL is bad"
msgstr "Server-URL ist nicht korrekt"
#: ../src/gtk-ui/sync-ui.c:3230
#: ../src/gtk-ui/sync-ui.c:3256
msgid "The server was not found"
msgstr "Der Server wurde nicht gefunden"
#: ../src/gtk-ui/sync-ui.c:3232
#: ../src/gtk-ui/sync-ui.c:3258
#, c-format
msgid "Error %d"
msgstr "Fehler %d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3370
#: ../src/gtk-ui/sync-ui.c:3396
msgid "Password is required for sync"
msgstr "Kennwort ist zur Synchronisation erforderlich"
#: ../src/gtk-ui/sync-ui.c:3374
#: ../src/gtk-ui/sync-ui.c:3400
msgid "Sync with password"
msgstr "Synchronisation mit Kennwort"
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3384
#: ../src/gtk-ui/sync-ui.c:3410
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr "Kennwort zur Synchronisation eingeben mit %s:"
msgstr "Kennwort zur Synchronisation mit %s eingeben:"
#. title for the buttons on the right side of main view
#: ../src/gtk-ui/ui.glade.h:2
@ -551,18 +553,18 @@ msgid ""
"A slow sync compares items from both sides and tries to merge them. \n"
"This may fail in some cases, leading to duplicates or lost information."
msgstr ""
"Eine langsame Synchronisation vergleicht Elemente beider Seiten und versucht sie zusammenzufügen. \n"
"Eine langsame Synchronisation vergleicht Elemente beider Seiten und fügt sie zusammen.\n"
"Dies kann manchmal fehlschlagen und Duplikate oder verlorene Informationen zur Folge haben."
# "add new" - shortened to avoid truncation
#: ../src/gtk-ui/ui.glade.h:15
msgid "Add new device"
msgstr "Neues Gerät hinzufügen"
msgstr "Gerät zufügen"
# "add new" - shortened to avoid truncation
#: ../src/gtk-ui/ui.glade.h:16
msgid "Add new service"
msgstr "Neu hinzufügen"
msgstr "Service zufügen"
#. explanation of "Restore backup" function
#: ../src/gtk-ui/ui.glade.h:18
@ -593,7 +595,7 @@ msgid ""
"and replace with your\n"
"local information"
msgstr ""
"Alle Daten auf Zyb löschen \n"
"Alle Daten auf Zyb löschen\n"
"und mit lokaler Information\n"
"ersetzen"
@ -659,18 +661,18 @@ msgstr "Synchronisation (GTK)"
#: ../src/gtk-ui/sync-config-widget.c:78
msgid "ScheduleWorld enables you to keep your contacts, events, tasks, and notes in sync."
msgstr "ScheduleWorld erlaubt Ihnen Ihre Kontakte, Events, Aufgaben und Notizen zu synchronisieren."
msgstr "ScheduleWorld erlaubt dir, deine Kontakte, Events, Aufgaben und Notizen zu synchronisieren."
#: ../src/gtk-ui/sync-config-widget.c:81
msgid "Google Sync can backup and synchronize your contacts with your Gmail contacts."
msgstr "Google Synchronisation kann Ihr Addressbuch mit Ihren Gmail Kontakten synchronisieren und eine Sicherheitskopie davon erstellen."
msgstr "Google Synchronisation kann dein Addressbuch mit deinen Gmail Kontakten synchronisieren und eine Sicherheitskopie davon erstellen."
#. TRANSLATORS: Please include the word "demo" (or the equivalent in
#. your language): Funambol is going to be a 90 day demo service
#. in the future
#: ../src/gtk-ui/sync-config-widget.c:87
msgid "Backup your contacts and calendar. Sync with a single click, anytime, anywhere (DEMO)."
msgstr "Erstellen Sie Sicherheitskopien Ihrer Kontakte und Ihres Kalenders. Sync mit einem einzigen Klick, irgendwann, irgendwo (DEMO)."
msgstr "Erstelle Sicherheitskopien deiner Kontakte und deines Kalenders. Sync mit einem einzigen Klick, irgendwann, irgendwo (DEMO)."
#: ../src/gtk-ui/sync-config-widget.c:90
msgid "Mobical Backup and Restore service allows you to securely backup your personal mobile data for free."
@ -710,7 +712,7 @@ msgstr "Nein, Einstellungen behalten"
#: ../src/gtk-ui/sync-config-widget.c:432
#, c-format
msgid "Do you want to delete the settings for %s? This will not remove any synced information on either end but it will remove these settings."
msgstr "Sollen die Einstellungen für %s gelöscht werden? Dabei werden keine synchronisierten Information gelöscht, jedoch wird die Service-Konfiguration gelöscht."
msgstr "Sollen die Einstellungen für %s gelöscht werden? Dabei werden keine synchronisierten Informationen gelöscht, jedoch wird die Service-Konfiguration gelöscht."
#. TRANSLATORS: buttons in delete-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:437
@ -736,8 +738,8 @@ msgid ""
"Save and replace\n"
"current service"
msgstr ""
"Speichern und ersetzen\n"
"diesen Service "
"Diesen Service\n"
"speichern und ersetzen"
#: ../src/gtk-ui/sync-config-widget.c:493
msgid "Stop using device"
@ -760,7 +762,7 @@ msgstr "URI von %s"
#: ../src/gtk-ui/sync-config-widget.c:854
#, c-format
msgid "Send changes to %s"
msgstr "Önderungen senden an %s"
msgstr "Änderungen senden an %s"
#: ../src/gtk-ui/sync-config-widget.c:859
#, c-format

126
po/es.po
View file

@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-05-05 09:24+0000\n"
"POT-Creation-Date: 2010-05-12 09:27+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: Tomás Galicia <tomas.galicia@intel.com>\n"
"Language-Team: \n"
@ -79,7 +79,7 @@ msgstr "Sí, borrar y reemplazar"
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
#: ../src/gtk-ui/sync-ui.c:1580
#: ../src/gtk-ui/sync-ui.c:1605
msgid "No"
msgstr "No"
@ -164,12 +164,12 @@ msgstr "Sincronización lenta"
msgid "Other options..."
msgstr "Otras opciones..."
# Configuration of the synchronization service
# "Select a service". Omitted 'syn' because there's no room in the button for proper display. The context is clear and this will not impair understanding by the user.
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * when no service is selected. Will open configuration view
#: ../src/gtk-ui/sync-ui.c:624
msgid "Select sync service"
msgstr "Seleccionar un servicio de sincronización"
msgstr "Seleccionar un servicio"
# Edit the configuration of the service
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
@ -199,7 +199,7 @@ msgstr "Sincronizando..."
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:757
#: ../src/gtk-ui/sync-ui.c:3374
#: ../src/gtk-ui/sync-ui.c:3399
msgid "Cancel sync"
msgstr "Cancelar la sincronización"
@ -210,7 +210,7 @@ msgstr "Volver a la sincronización"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1223
#: ../src/gtk-ui/sync-ui.c:1224
msgid "Automatic sync"
msgstr ""
"Sincronización\n"
@ -220,53 +220,53 @@ msgstr ""
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1494
#: ../src/gtk-ui/sync-ui.c:1519
#, c-format
msgid "Affected data: %s %s"
msgstr "Datos afectados: %s %s"
#: ../src/gtk-ui/sync-ui.c:1499
#: ../src/gtk-ui/sync-ui.c:1524
#, c-format
msgid "Affected data: none"
msgstr "Datos afectados: ninguno"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1577
#: ../src/gtk-ui/sync-ui.c:1602
#, c-format
msgid "Do you want to restore the backup from %s? All changes you have made since then will be lost."
msgstr "¿Deseas restaurar la copia de seguridad de %s? Todos los cambios que hayas realizado desde entonces se perderán."
#: ../src/gtk-ui/sync-ui.c:1580
#: ../src/gtk-ui/sync-ui.c:1605
msgid "Yes, restore"
msgstr "Sí, restaurar"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1612
#: ../src/gtk-ui/sync-ui.c:1637
#, c-format
msgid "%x %X"
msgstr "%x %X"
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1631
#: ../src/gtk-ui/sync-ui.c:1656
#, c-format
msgid "Backed up before syncing with %s"
msgstr "Copia de seguridad realizada ante de sincronizar con %s"
#: ../src/gtk-ui/sync-ui.c:1648
#: ../src/gtk-ui/sync-ui.c:1673
msgid "Restore"
msgstr "Restaurar"
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1755
#: ../src/gtk-ui/sync-ui.c:1780
#, c-format
msgid "A normal sync with %s is not possible at this time. You can do a slow two-way sync or start from scratch. You can also restore a backup, but a slow sync or starting from scratch will still be required before normal sync is possible."
msgstr "Una sincronización normal con %s no es posible en este momento. Puedes realizar una sincronización lenta de dos vías o iniciar de cero. También puedes restaurar una copia de seguridad, pero una sincronización lenta o iniciar de cero igual será necesaria antes de que sea posible una sincronización normal."
#: ../src/gtk-ui/sync-ui.c:1765
#: ../src/gtk-ui/sync-ui.c:1790
#, c-format
msgid "If something has gone horribly wrong, you can try a slow sync, start from scratch or restore from backup."
msgstr "Si algo realmente malo sucede, puedes intentar una sincronización lenta, empezar de cero o restaurar la copia de seguridad."
@ -274,7 +274,7 @@ msgstr "Si algo realmente malo sucede, puedes intentar una sincronización lenta
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1774
#: ../src/gtk-ui/sync-ui.c:1799
#, c-format
msgid ""
"Delete all your local\n"
@ -285,7 +285,7 @@ msgstr ""
"locales y reemplazarlos con\n"
"datos de %s"
#: ../src/gtk-ui/sync-ui.c:1780
#: ../src/gtk-ui/sync-ui.c:1805
#, c-format
msgid ""
"Delete all data on\n"
@ -296,71 +296,71 @@ msgstr ""
"%s y reemplazarlos\n"
"con tus datos locales"
#: ../src/gtk-ui/sync-ui.c:2242
#: ../src/gtk-ui/sync-ui.c:2267
msgid "Failed to get list of supported services from SyncEvolution"
msgstr "Error al obtener la lista de servicios compatibles de SyncEvolution"
#: ../src/gtk-ui/sync-ui.c:2296
#: ../src/gtk-ui/sync-ui.c:2321
msgid "There was a problem communicating with the sync process. Please try again later."
msgstr "Ha ocurrido un problema de comunicación en el proceso de sincronización. Inténtalo más tarde."
#: ../src/gtk-ui/sync-ui.c:2355
#: ../src/gtk-ui/sync-ui.c:2380
msgid "Restore failed"
msgstr "Restaurar falló"
#: ../src/gtk-ui/sync-ui.c:2358
#: ../src/gtk-ui/sync-ui.c:3243
#: ../src/gtk-ui/sync-ui.c:2383
#: ../src/gtk-ui/sync-ui.c:3268
msgid "Sync failed"
msgstr "Sincronización falló"
#: ../src/gtk-ui/sync-ui.c:2364
#: ../src/gtk-ui/sync-ui.c:2389
msgid "Restore complete"
msgstr "Restaurado completo"
#: ../src/gtk-ui/sync-ui.c:2367
#: ../src/gtk-ui/sync-ui.c:2392
msgid "Sync complete"
msgstr "¡Sincronizado!"
#: ../src/gtk-ui/sync-ui.c:2459
#: ../src/gtk-ui/sync-ui.c:2484
#, c-format
msgid "Preparing '%s'"
msgstr "Preparando '%s'"
#: ../src/gtk-ui/sync-ui.c:2462
#: ../src/gtk-ui/sync-ui.c:2487
#, c-format
msgid "Receiving '%s'"
msgstr "Recibiendo '%s'"
#: ../src/gtk-ui/sync-ui.c:2465
#: ../src/gtk-ui/sync-ui.c:2490
#, c-format
msgid "Sending '%s'"
msgstr "Enviando '%s'"
#: ../src/gtk-ui/sync-ui.c:2586
#: ../src/gtk-ui/sync-ui.c:2611
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] "Hubo un rechazo remoto."
msgstr[1] "Hubo %ld rechazos remotos."
#: ../src/gtk-ui/sync-ui.c:2591
#: ../src/gtk-ui/sync-ui.c:2616
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] "Hubo un rechazo local."
msgstr[1] "Hubo %ld rechazos locales."
#: ../src/gtk-ui/sync-ui.c:2596
#: ../src/gtk-ui/sync-ui.c:2621
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr "Se han producido %ld rechazos locales y %ld rechazos remotos."
#: ../src/gtk-ui/sync-ui.c:2601
#: ../src/gtk-ui/sync-ui.c:2626
#, c-format
msgid "Last time: No changes."
msgstr "La última vez: no hubo cambios."
#: ../src/gtk-ui/sync-ui.c:2603
#: ../src/gtk-ui/sync-ui.c:2628
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
@ -370,21 +370,21 @@ msgstr[1] "La última vez: se enviaron %ld cambios."
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2611
#: ../src/gtk-ui/sync-ui.c:2636
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] "La última vez: se aplicó un cambio."
msgstr[1] "La última vez: se aplicaron %ld cambios."
#: ../src/gtk-ui/sync-ui.c:2616
#: ../src/gtk-ui/sync-ui.c:2641
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr "La última vez: se aplicaron %ld cambios y se enviaron %ld cambios."
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2823
#: ../src/gtk-ui/sync-ui.c:2848
#, c-format
msgid ""
"There was a problem with last sync:\n"
@ -393,135 +393,135 @@ msgstr ""
"Hubo un problema en la última sincronización:\n"
"%s"
#: ../src/gtk-ui/sync-ui.c:2833
#: ../src/gtk-ui/sync-ui.c:2858
#, c-format
msgid "You've just restored a backup. The changes have not been synced with %s yet"
msgstr "Has restaurado una copia de resguardo. Los cambios aún no se sincronizan con %s"
#: ../src/gtk-ui/sync-ui.c:3121
#: ../src/gtk-ui/sync-ui.c:3146
msgid "Waiting for current operation to finish..."
msgstr "Esperando que la operación actual termine..."
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3155
#: ../src/gtk-ui/sync-ui.c:3180
msgid "A normal sync is not possible at this time. The server suggests a slow sync, but this might not always be what you want if both ends already have data."
msgstr "Una sincronización normal no es posible en este momento. El servidor sugiere una sincronización lenta, pero esto no es necesariamente lo que deseas si ambas partes ya tienen datos."
# the syncronization service D-Bus closed unexpectedly
#: ../src/gtk-ui/sync-ui.c:3159
#: ../src/gtk-ui/sync-ui.c:3184
msgid "The sync process died unexpectedly."
msgstr "El servicio de sincronización se cerró inesperadamente."
#: ../src/gtk-ui/sync-ui.c:3164
#: ../src/gtk-ui/sync-ui.c:3189
msgid "Password request was not answered. You can save the password in the settings to prevent the request."
msgstr "No se ha respondido a la solicitud de contraseña. Para evitar que aparezca otra vez, se puede guardar la contraseña en los ajustes."
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3168
#: ../src/gtk-ui/sync-ui.c:3193
msgid "There was a problem processing sync request. Trying again may help."
msgstr "Ha ocurrido un problema al procesar la solicitud de sincronización. Intentar otra vez puede ayudar."
#: ../src/gtk-ui/sync-ui.c:3174
#: ../src/gtk-ui/sync-ui.c:3199
msgid "Failed to login. Could there be a problem with your username or password?"
msgstr "Acceso fallido. ¿Podría haber algún problema con tu usuario o contraseña?"
#: ../src/gtk-ui/sync-ui.c:3177
#: ../src/gtk-ui/sync-ui.c:3202
msgid "Forbidden"
msgstr "Prohibido"
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3183
#: ../src/gtk-ui/sync-ui.c:3208
msgid "A data source could not be found. Could there be a problem with the settings?"
msgstr "No se pudo hallar la fuente de datos. ¿Podría haber algún problema con la configuración?"
# Fatal error in the database
#: ../src/gtk-ui/sync-ui.c:3187
#: ../src/gtk-ui/sync-ui.c:3212
msgid "Remote database error"
msgstr "Error en la base de datos remota"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3190
#: ../src/gtk-ui/sync-ui.c:3215
msgid "There is a problem with the local database. Syncing again or rebooting may help."
msgstr "Hay un problema con la base de datos local. Sincronizar otra vez o reiniciar puede ayudar."
# There is no space left
#: ../src/gtk-ui/sync-ui.c:3193
#: ../src/gtk-ui/sync-ui.c:3218
msgid "No space on disk"
msgstr "No queda espacio"
#: ../src/gtk-ui/sync-ui.c:3195
#: ../src/gtk-ui/sync-ui.c:3220
msgid "Failed to process SyncML"
msgstr "Error al procesar SyncML"
# the server didn't accept the authorization
#: ../src/gtk-ui/sync-ui.c:3197
#: ../src/gtk-ui/sync-ui.c:3222
msgid "Server authorization failed"
msgstr "El servidor no ha aceptado la autorización"
# Error while analysing the syntax of the configuration file
#: ../src/gtk-ui/sync-ui.c:3199
#: ../src/gtk-ui/sync-ui.c:3224
msgid "Failed to parse configuration file"
msgstr "Error al analizar la sintaxis del archivo de configuración"
# Error while reading the configuration file
#: ../src/gtk-ui/sync-ui.c:3201
#: ../src/gtk-ui/sync-ui.c:3226
msgid "Failed to read configuration file"
msgstr "Error al leer del archivo de configuración"
# The configuration has not been found
#: ../src/gtk-ui/sync-ui.c:3203
#: ../src/gtk-ui/sync-ui.c:3228
msgid "No configuration found"
msgstr "No se ha encontrado la configuración"
# The configuration file has not been found
#: ../src/gtk-ui/sync-ui.c:3205
#: ../src/gtk-ui/sync-ui.c:3230
msgid "No configuration file found"
msgstr "No se ha encontrado el archivo de configuración"
# The server sent an an invalid content
#: ../src/gtk-ui/sync-ui.c:3207
#: ../src/gtk-ui/sync-ui.c:3232
msgid "Server sent bad content"
msgstr "El servidor envió un contenido no válido"
#: ../src/gtk-ui/sync-ui.c:3209
#: ../src/gtk-ui/sync-ui.c:3234
msgid "Connection certificate has expired"
msgstr "El certificado de conexión está vencido"
# The connection certificate is not valid
#: ../src/gtk-ui/sync-ui.c:3211
#: ../src/gtk-ui/sync-ui.c:3236
msgid "Connection certificate is invalid"
msgstr "El certificado de conexión no es válido"
#: ../src/gtk-ui/sync-ui.c:3219
#: ../src/gtk-ui/sync-ui.c:3244
msgid "We were unable to connect to the server. The problem could be temporary or there could be something wrong with the settings."
msgstr "No hemos podido conectarnos con el servidor. El problema podría ser temporal o podría haber algún problema con la configuración."
# The URL is incorrect
#: ../src/gtk-ui/sync-ui.c:3226
#: ../src/gtk-ui/sync-ui.c:3251
msgid "The server URL is bad"
msgstr "La URL del servidor es incorrecta"
#: ../src/gtk-ui/sync-ui.c:3231
#: ../src/gtk-ui/sync-ui.c:3256
msgid "The server was not found"
msgstr "No se ha encontrado el servidor"
#: ../src/gtk-ui/sync-ui.c:3233
#: ../src/gtk-ui/sync-ui.c:3258
#, c-format
msgid "Error %d"
msgstr "Error: %d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3371
#: ../src/gtk-ui/sync-ui.c:3396
msgid "Password is required for sync"
msgstr "Se requiere contraseña para la sincronización"
#: ../src/gtk-ui/sync-ui.c:3375
#: ../src/gtk-ui/sync-ui.c:3400
msgid "Sync with password"
msgstr "Sincronización con contraseña"
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3385
#: ../src/gtk-ui/sync-ui.c:3410
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr "Por favor ingresa la contraseña para sincronizar con %s:"

511
po/fi.po

File diff suppressed because it is too large Load diff

291
po/fr.po
View file

@ -2,8 +2,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-04-07 09:29+0000\n"
"PO-Revision-Date: 2010-04-08 23:55-0800\n"
"POT-Creation-Date: 2010-05-17 21:48+0000\n"
"PO-Revision-Date: 2010-05-17 17:05-0800\n"
"Last-Translator: David Cicognani <david.cicognani@ptiglobal.net>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -22,115 +22,115 @@ msgstr ""
msgid "Sync"
msgstr "Synchronisation"
#: ../src/gtk-ui/sync-ui.c:260
#: ../src/gtk-ui/sync-ui.c:266
msgid "Contacts"
msgstr "Contacts"
#: ../src/gtk-ui/sync-ui.c:262
#: ../src/gtk-ui/sync-ui.c:268
msgid "Appointments"
msgstr "Rendez-vous"
#: ../src/gtk-ui/sync-ui.c:264
#: ../src/gtk-ui/sync-ui.c:270
#: ../src/gtk-ui/ui.glade.h:40
msgid "Tasks"
msgstr "Tâches"
#: ../src/gtk-ui/sync-ui.c:266
#: ../src/gtk-ui/sync-ui.c:272
msgid "Notes"
msgstr "Notes"
#. TRANSLATORS: This is a "combination source" for syncing with devices
#. * that combine appointments and tasks. the name should match the ones
#. * used for calendar and todo above
#: ../src/gtk-ui/sync-ui.c:271
#: ../src/gtk-ui/sync-ui.c:277
msgid "Appointments & Tasks"
msgstr "Rendez-vous & Tâches"
#: ../src/gtk-ui/sync-ui.c:343
#: ../src/gtk-ui/sync-ui.c:349
msgid "Starting sync"
msgstr "Synchronisation en cours de démarrage"
#. TRANSLATORS: slow sync confirmation dialog message. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:381
#: ../src/gtk-ui/sync-ui.c:387
#, c-format
msgid "Do you want to slow sync with %s?"
msgstr "Voulez-vous effectuer une synchro lente avec %s ?"
#: ../src/gtk-ui/sync-ui.c:385
#: ../src/gtk-ui/sync-ui.c:391
msgid "Yes, do slow sync"
msgstr "Oui, effectuer une synchro lente"
#: ../src/gtk-ui/sync-ui.c:385
#: ../src/gtk-ui/sync-ui.c:391
msgid "No, cancel sync"
msgstr "Non, annuler la synchronisation"
#. TRANSLATORS: confirmation dialog for refresh-from-server. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:418
#: ../src/gtk-ui/sync-ui.c:424
#, c-format
msgid "Do you want to delete all local data and replace it with data from %s? This is not usually advised."
msgstr "Voulez-vous effacer toutes les données locales et les remplacer avec les données de %s ? Ceci est en général une mauvaise idée."
#: ../src/gtk-ui/sync-ui.c:423
#: ../src/gtk-ui/sync-ui.c:454
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
msgid "Yes, delete and replace"
msgstr "Oui, supprimer et remplacer"
#: ../src/gtk-ui/sync-ui.c:423
#: ../src/gtk-ui/sync-ui.c:454
#: ../src/gtk-ui/sync-ui.c:1566
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
#: ../src/gtk-ui/sync-ui.c:1605
msgid "No"
msgstr "Non"
#. TRANSLATORS: confirmation dialog for refresh-from-client. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:449
#: ../src/gtk-ui/sync-ui.c:455
#, c-format
msgid "Do you want to delete all data in %s and replace it with your local data? This is not usually advised."
msgstr "Voulez-vous effacer toutes les données de %s et les remplacer avec vos données locales ? Ceci est en général une mauvaise idée."
#: ../src/gtk-ui/sync-ui.c:481
#: ../src/gtk-ui/sync-ui.c:487
msgid "Trying to cancel sync"
msgstr "Essai d'annulation de la synchronisation"
#: ../src/gtk-ui/sync-ui.c:521
#: ../src/gtk-ui/sync-ui.c:529
msgid "No service or device selected"
msgstr "Aucun service ou périphérique sélectionné"
#. TRANSLATORS: This is the title on main view. Placeholder is
#. * the service name. Example: "Google - synced just now"
#: ../src/gtk-ui/sync-ui.c:529
#: ../src/gtk-ui/sync-ui.c:537
#, c-format
msgid "%s - synced just now"
msgstr "%s - dernière synchro il y a quelques secondes"
#: ../src/gtk-ui/sync-ui.c:533
#: ../src/gtk-ui/sync-ui.c:541
#, c-format
msgid "%s - synced a minute ago"
msgstr "%s - dernière synchro il y a moins d'une minute"
#: ../src/gtk-ui/sync-ui.c:537
#: ../src/gtk-ui/sync-ui.c:545
#, c-format
msgid "%s - synced %ld minutes ago"
msgstr "%s - dernière synchro il y a %ld minutes"
#: ../src/gtk-ui/sync-ui.c:542
#: ../src/gtk-ui/sync-ui.c:550
#, c-format
msgid "%s - synced an hour ago"
msgstr "%s - dernière synchro il y a moins d'une heure"
#: ../src/gtk-ui/sync-ui.c:546
#: ../src/gtk-ui/sync-ui.c:554
#, c-format
msgid "%s - synced %ld hours ago"
msgstr "%s - dernière synchro il y a %ld heures"
#: ../src/gtk-ui/sync-ui.c:551
#: ../src/gtk-ui/sync-ui.c:559
#, c-format
msgid "%s - synced a day ago"
msgstr "%s - dernière synchro hier"
#: ../src/gtk-ui/sync-ui.c:555
#: ../src/gtk-ui/sync-ui.c:563
#, c-format
msgid "%s - synced %ld days ago"
msgstr "%s - dernière synchro il y a %ld jours"
@ -139,66 +139,66 @@ msgstr "%s - dernière synchro il y a %ld jours"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "You've just restored a backup. The changes have not been "
#. * "synced with %s yet"
#: ../src/gtk-ui/sync-ui.c:604
#: ../src/gtk-ui/sync-ui.c:719
#: ../src/gtk-ui/sync-ui.c:612
#: ../src/gtk-ui/sync-ui.c:726
msgid "Sync now"
msgstr "Synchroniser"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "A normal sync is not possible at this time..." message.
#. * "Other options" will open Emergency view
#: ../src/gtk-ui/sync-ui.c:610
#: ../src/gtk-ui/sync-ui.c:618
#: ../src/gtk-ui/ui.glade.h:37
msgid "Slow sync"
msgstr "Synchronisation lente"
#: ../src/gtk-ui/sync-ui.c:611
#: ../src/gtk-ui/sync-ui.c:619
msgid "Other options..."
msgstr "Autres options..."
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * when no service is selected. Will open configuration view
#: ../src/gtk-ui/sync-ui.c:616
#: ../src/gtk-ui/sync-ui.c:624
msgid "Select sync service"
msgstr "Sélectionner le service de synchronisation"
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * login to service fails. Will open configuration view for this service
#: ../src/gtk-ui/sync-ui.c:621
#: ../src/gtk-ui/sync-ui.c:629
msgid "Edit service settings"
msgstr "Modifier les paramètres du service"
#: ../src/gtk-ui/sync-ui.c:670
#: ../src/gtk-ui/sync-ui.c:700
msgid "You haven't selected a sync service or device yet. Sync services let you synchronize your data between your netbook and a web service. You can also sync directly with some devices."
msgstr "Vous n'avez pas encore sélectionné de service de synchronisation ou de périphérique. Les services de synchronisation vous permettent de synchroniser vos données de votre netbook à un service web. Vous pouvez également synchroniser directement avec certains périphériques."
#: ../src/gtk-ui/sync-ui.c:717
#: ../src/gtk-ui/sync-ui.c:722
msgid "Sync again"
msgstr "Synchroniser de nouveau"
#: ../src/gtk-ui/sync-ui.c:730
#: ../src/gtk-ui/sync-ui.c:743
msgid "Restoring"
msgstr "En cours de restauration..."
#: ../src/gtk-ui/sync-ui.c:732
#: ../src/gtk-ui/sync-ui.c:745
msgid "Syncing"
msgstr "Synchronisation en cours"
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:743
#: ../src/gtk-ui/sync-ui.c:3358
#: ../src/gtk-ui/sync-ui.c:757
#: ../src/gtk-ui/sync-ui.c:3399
msgid "Cancel sync"
msgstr "Annuler la synchronisation"
#: ../src/gtk-ui/sync-ui.c:908
#: ../src/gtk-ui/sync-ui.c:922
msgid "Back to sync"
msgstr "Retourner à la synchronisation"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1209
#: ../src/gtk-ui/sync-ui.c:1224
msgid "Automatic sync"
msgstr "Synchronisation automatique"
@ -206,53 +206,53 @@ msgstr "Synchronisation automatique"
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1480
#: ../src/gtk-ui/sync-ui.c:1519
#, c-format
msgid "Affected data: %s %s"
msgstr "Données affectées : %s %s"
#: ../src/gtk-ui/sync-ui.c:1485
#: ../src/gtk-ui/sync-ui.c:1524
#, c-format
msgid "Affected data: none"
msgstr "Données affectées : aucunes"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1563
#: ../src/gtk-ui/sync-ui.c:1602
#, c-format
msgid "Do you want to restore the backup from %s? All changes you have made since then will be lost."
msgstr "Voulez-vous restaurer la sauvegarde de %s ? Toutes les modifications effectuées à partir de là seront perdues."
#: ../src/gtk-ui/sync-ui.c:1566
#: ../src/gtk-ui/sync-ui.c:1605
msgid "Yes, restore"
msgstr "Oui, restaurer"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1598
#: ../src/gtk-ui/sync-ui.c:1637
#, c-format
msgid "%x %X"
msgstr "%x %X"
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1617
#: ../src/gtk-ui/sync-ui.c:1656
#, c-format
msgid "Backed up before syncing with %s"
msgstr "Sauvegardé avant la synchronisation avec %s"
#: ../src/gtk-ui/sync-ui.c:1634
#: ../src/gtk-ui/sync-ui.c:1673
msgid "Restore"
msgstr "Restaurer"
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1741
#: ../src/gtk-ui/sync-ui.c:1780
#, c-format
msgid "A normal sync with %s is not possible at this time. You can do a slow two-way sync or start from scratch. You can also restore a backup, but a slow sync or starting from scratch will still be required before normal sync is possible."
msgstr "Une synchronisation normale avec %s est actuellement impossible. Vous pouvez effectuer une synchronisation lente à deux files ou alors reprendre à zéro. Vous pouvez aussi restaurer une sauvegarde, mais une synchronisation lente ou une reprise à zéro seront nécessaires avant qu'une synchronisation soit possible."
#: ../src/gtk-ui/sync-ui.c:1751
#: ../src/gtk-ui/sync-ui.c:1790
#, c-format
msgid "If something has gone horribly wrong, you can try a slow sync, start from scratch or restore from backup."
msgstr "En cas de problème sérieux, vous pouvez essayer une synchronisation lente, reprendre à zéro ou alors restaurer depuis une sauvegarde."
@ -260,7 +260,7 @@ msgstr "En cas de problème sérieux, vous pouvez essayer une synchronisation le
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1760
#: ../src/gtk-ui/sync-ui.c:1799
#, c-format
msgid ""
"Delete all your local\n"
@ -272,7 +272,7 @@ msgstr ""
"et les remplacer avec\n"
"les données de %s"
#: ../src/gtk-ui/sync-ui.c:1766
#: ../src/gtk-ui/sync-ui.c:1805
#, c-format
msgid ""
"Delete all data on\n"
@ -283,71 +283,71 @@ msgstr ""
"sur %s et les remplacer\n"
"avec les données locales"
#: ../src/gtk-ui/sync-ui.c:2226
#: ../src/gtk-ui/sync-ui.c:2267
msgid "Failed to get list of supported services from SyncEvolution"
msgstr "Impossible d'obtenir la liste des services pris en charge depuis SyncEvolution"
#: ../src/gtk-ui/sync-ui.c:2280
#: ../src/gtk-ui/sync-ui.c:2321
msgid "There was a problem communicating with the sync process. Please try again later."
msgstr "Un problème est survenu en communiquant avec le processus de synchronisation. Veuillez réessayer ultérieurement."
#: ../src/gtk-ui/sync-ui.c:2339
#: ../src/gtk-ui/sync-ui.c:2380
msgid "Restore failed"
msgstr "Échec de la restauration"
#: ../src/gtk-ui/sync-ui.c:2342
#: ../src/gtk-ui/sync-ui.c:3227
#: ../src/gtk-ui/sync-ui.c:2383
#: ../src/gtk-ui/sync-ui.c:3268
msgid "Sync failed"
msgstr "Échec de la synchronisation"
#: ../src/gtk-ui/sync-ui.c:2348
#: ../src/gtk-ui/sync-ui.c:2389
msgid "Restore complete"
msgstr "Restauration terminée"
#: ../src/gtk-ui/sync-ui.c:2351
#: ../src/gtk-ui/sync-ui.c:2392
msgid "Sync complete"
msgstr "Synchronisation terminée"
#: ../src/gtk-ui/sync-ui.c:2443
#: ../src/gtk-ui/sync-ui.c:2484
#, c-format
msgid "Preparing '%s'"
msgstr "'%s' en cours de préparation"
#: ../src/gtk-ui/sync-ui.c:2446
#: ../src/gtk-ui/sync-ui.c:2487
#, c-format
msgid "Receiving '%s'"
msgstr "'%s' en cours de réception"
#: ../src/gtk-ui/sync-ui.c:2449
#: ../src/gtk-ui/sync-ui.c:2490
#, c-format
msgid "Sending '%s'"
msgstr "'%s' en cours d'envoi"
#: ../src/gtk-ui/sync-ui.c:2570
#: ../src/gtk-ui/sync-ui.c:2611
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] "Il y a eu un rejet distant."
msgstr[1] "Il y a eu %ld rejets distants."
#: ../src/gtk-ui/sync-ui.c:2575
#: ../src/gtk-ui/sync-ui.c:2616
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] "Il y a eu un rejet local."
msgstr[1] "Il y a eu %ld rejets locaux."
#: ../src/gtk-ui/sync-ui.c:2580
#: ../src/gtk-ui/sync-ui.c:2621
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr "Il y a eu %ld rejets locaux et %ld rejets distants."
#: ../src/gtk-ui/sync-ui.c:2585
#: ../src/gtk-ui/sync-ui.c:2626
#, c-format
msgid "Last time: No changes."
msgstr "Dernière fois : pas de changement. "
#: ../src/gtk-ui/sync-ui.c:2587
#: ../src/gtk-ui/sync-ui.c:2628
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
@ -357,21 +357,21 @@ msgstr[1] "Dernière fois : %ld changements envoyés."
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2595
#: ../src/gtk-ui/sync-ui.c:2636
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] "Dernière fois : un changement reçu."
msgstr[1] "Dernière fois : %ld changements reçus."
#: ../src/gtk-ui/sync-ui.c:2600
#: ../src/gtk-ui/sync-ui.c:2641
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr "Dernière fois : %ld changements reçus et %ld changements envoyés."
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2807
#: ../src/gtk-ui/sync-ui.c:2848
#, c-format
msgid ""
"There was a problem with last sync:\n"
@ -380,124 +380,124 @@ msgstr ""
"Un problème est survenu lors de la dernière synchronisation :\n"
"%s"
#: ../src/gtk-ui/sync-ui.c:2817
#: ../src/gtk-ui/sync-ui.c:2858
#, c-format
msgid "You've just restored a backup. The changes have not been synced with %s yet"
msgstr "Vous venez de restaurer une sauvegarde. Les modifications n'ont pas encore été synchronisées avec %s"
#: ../src/gtk-ui/sync-ui.c:3105
#: ../src/gtk-ui/sync-ui.c:3146
msgid "Waiting for current operation to finish..."
msgstr "En attente de fin d'opération en cours..."
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3139
#: ../src/gtk-ui/sync-ui.c:3180
msgid "A normal sync is not possible at this time. The server suggests a slow sync, but this might not always be what you want if both ends already have data."
msgstr "Une synchronisation normale est actuellement impossible. Le serveur suggère une synchronisation lente, mais cela n'est pas forcément dans votre intérêt si les deux côtés contiennent déjà des données."
#: ../src/gtk-ui/sync-ui.c:3143
#: ../src/gtk-ui/sync-ui.c:3184
msgid "The sync process died unexpectedly."
msgstr "Processus de synchronisation terminé de façon inattendue."
#: ../src/gtk-ui/sync-ui.c:3148
#: ../src/gtk-ui/sync-ui.c:3189
msgid "Password request was not answered. You can save the password in the settings to prevent the request."
msgstr "La demande de mot de passe n'a pas été prise en compte. Vous pouvez enregistrer le mot de passe dans les paramètres pour empêcher la demande."
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3152
#: ../src/gtk-ui/sync-ui.c:3193
msgid "There was a problem processing sync request. Trying again may help."
msgstr "Un problème est survenu lors du traitement de la demande de synchronisation. Une nouvelle tentative peut se révéler utile."
#: ../src/gtk-ui/sync-ui.c:3158
#: ../src/gtk-ui/sync-ui.c:3199
msgid "Failed to login. Could there be a problem with your username or password?"
msgstr "Échec de connexion. Pourrait-il y avoir un problème avec votre nom d'utilisateur ou bien votre mot de passe ?"
#: ../src/gtk-ui/sync-ui.c:3161
#: ../src/gtk-ui/sync-ui.c:3202
msgid "Forbidden"
msgstr "Interdit"
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3167
#: ../src/gtk-ui/sync-ui.c:3208
msgid "A data source could not be found. Could there be a problem with the settings?"
msgstr "Une source de données n'a pas pu être trouvée. Pourrait-il y avoir un problème avec les paramètres ?"
#: ../src/gtk-ui/sync-ui.c:3171
#: ../src/gtk-ui/sync-ui.c:3212
msgid "Remote database error"
msgstr "Erreur de base de données à distance"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3174
#: ../src/gtk-ui/sync-ui.c:3215
msgid "There is a problem with the local database. Syncing again or rebooting may help."
msgstr "Il y a un problème avec la base de données locale. Synchroniser de nouveau ou bien redémarrer peut aider."
#: ../src/gtk-ui/sync-ui.c:3177
#: ../src/gtk-ui/sync-ui.c:3218
msgid "No space on disk"
msgstr "Il n'y a plus d'espace disponible sur le disque"
#: ../src/gtk-ui/sync-ui.c:3179
#: ../src/gtk-ui/sync-ui.c:3220
msgid "Failed to process SyncML"
msgstr "Impossible de terminer SyncML"
#: ../src/gtk-ui/sync-ui.c:3181
#: ../src/gtk-ui/sync-ui.c:3222
msgid "Server authorization failed"
msgstr "L'autorisation du serveur a échoué"
#: ../src/gtk-ui/sync-ui.c:3183
#: ../src/gtk-ui/sync-ui.c:3224
msgid "Failed to parse configuration file"
msgstr "Impossible d'analyser le fichier de configuration"
#: ../src/gtk-ui/sync-ui.c:3185
#: ../src/gtk-ui/sync-ui.c:3226
msgid "Failed to read configuration file"
msgstr "Impossible de lire le fichier de configuration"
#: ../src/gtk-ui/sync-ui.c:3187
#: ../src/gtk-ui/sync-ui.c:3228
msgid "No configuration found"
msgstr "Aucune configuration trouvée"
#: ../src/gtk-ui/sync-ui.c:3189
#: ../src/gtk-ui/sync-ui.c:3230
msgid "No configuration file found"
msgstr "Aucun fichier de configuration trouvé"
#: ../src/gtk-ui/sync-ui.c:3191
#: ../src/gtk-ui/sync-ui.c:3232
msgid "Server sent bad content"
msgstr "Le serveur a transmis des données incorrectes"
#: ../src/gtk-ui/sync-ui.c:3193
#: ../src/gtk-ui/sync-ui.c:3234
msgid "Connection certificate has expired"
msgstr "Le certificat de la connexion a expiré"
#: ../src/gtk-ui/sync-ui.c:3195
#: ../src/gtk-ui/sync-ui.c:3236
msgid "Connection certificate is invalid"
msgstr "le certificat de la connexion est invalide"
#: ../src/gtk-ui/sync-ui.c:3203
#: ../src/gtk-ui/sync-ui.c:3244
msgid "We were unable to connect to the server. The problem could be temporary or there could be something wrong with the settings."
msgstr "Nous n'avons pas pu nous connecter au serveur. Il se peut que le problème soit temporaire ou bien quil y ait une erreur avec les paramètres."
#: ../src/gtk-ui/sync-ui.c:3210
#: ../src/gtk-ui/sync-ui.c:3251
msgid "The server URL is bad"
msgstr "L'URL du serveur est mauvaise"
#: ../src/gtk-ui/sync-ui.c:3215
#: ../src/gtk-ui/sync-ui.c:3256
msgid "The server was not found"
msgstr "Le serveur n'a pas été trouvé"
#: ../src/gtk-ui/sync-ui.c:3217
#: ../src/gtk-ui/sync-ui.c:3258
#, c-format
msgid "Error %d"
msgstr "Erreur %d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3355
#: ../src/gtk-ui/sync-ui.c:3396
msgid "Password is required for sync"
msgstr "Mot de passe nécessaire pour la synchronisation"
#: ../src/gtk-ui/sync-ui.c:3359
#: ../src/gtk-ui/sync-ui.c:3400
msgid "Sync with password"
msgstr "Synchronisation avec le mot de passe..."
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3369
#: ../src/gtk-ui/sync-ui.c:3410
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr "Veuillez saisir le mot de passe pour synchroniser avec %s :"
@ -652,80 +652,80 @@ msgstr "À jour"
msgid "Sync (GTK)"
msgstr "Sync (GTK)"
#: ../src/gtk-ui/sync-config-widget.c:74
#: ../src/gtk-ui/sync-config-widget.c:78
msgid "ScheduleWorld enables you to keep your contacts, events, tasks, and notes in sync."
msgstr "ScheduleWorld vous permet de garder vos contacts, événements, tâches et notes synchronisés."
#: ../src/gtk-ui/sync-config-widget.c:77
#: ../src/gtk-ui/sync-config-widget.c:81
msgid "Google Sync can backup and synchronize your contacts with your Gmail contacts."
msgstr "Google Sync permet de sauvegarder et synchroniser votre carnet d'adresses avec vos contacts Gmail."
#. TRANSLATORS: Please include the word "demo" (or the equivalent in
#. your language): Funambol is going to be a 90 day demo service
#. in the future
#: ../src/gtk-ui/sync-config-widget.c:83
#: ../src/gtk-ui/sync-config-widget.c:87
msgid "Backup your contacts and calendar. Sync with a single click, anytime, anywhere (DEMO)."
msgstr "Sauvegarde de vos contacts et calendrier. Synchronisation en un seul clic, n'importe quand, n'importe où (DEMO)."
#: ../src/gtk-ui/sync-config-widget.c:86
#: ../src/gtk-ui/sync-config-widget.c:90
msgid "Mobical Backup and Restore service allows you to securely backup your personal mobile data for free."
msgstr "Le service Mobical de sauvegarde et de restauration vous permet de sauvegarder vos données personnelles mobiles gratuitement et en toute sécurité."
#: ../src/gtk-ui/sync-config-widget.c:89
#: ../src/gtk-ui/sync-config-widget.c:93
msgid "ZYB is a simple way for people to store and share mobile information online."
msgstr "ZYB est une façon simple de stocker et de partager les informations mobiles en ligne."
#: ../src/gtk-ui/sync-config-widget.c:92
#: ../src/gtk-ui/sync-config-widget.c:96
msgid "Memotoo lets you access your personal data from any computer connected to the Internet."
msgstr "Memotoo vous permet d'accéder à vos données personnelles depuis n'importe quel ordinateur connecté à Internet."
#: ../src/gtk-ui/sync-config-widget.c:188
#: ../src/gtk-ui/sync-config-widget.c:192
msgid "Sorry, failed to save the configuration"
msgstr "Désolé, la sauvegarde de la configuration a échoué"
#: ../src/gtk-ui/sync-config-widget.c:377
#: ../src/gtk-ui/sync-config-widget.c:381
msgid "Service must have a name and server URL"
msgstr "Le service doit avoir un nom et une URL de serveur"
#: ../src/gtk-ui/sync-config-widget.c:418
#: ../src/gtk-ui/sync-config-widget.c:422
#, c-format
msgid "Do you want to reset the settings for %s? This will not remove any synced information on either end."
msgstr "Voulez-vous réinitialiser les paramètres pour %s ? Cela ne supprimera aucune information synchronisée de part et dautre. "
#. TRANSLATORS: buttons in reset-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:422
#: ../src/gtk-ui/sync-config-widget.c:426
msgid "Yes, reset"
msgstr "Oui, réinitialiser"
#: ../src/gtk-ui/sync-config-widget.c:423
#: ../src/gtk-ui/sync-config-widget.c:434
#: ../src/gtk-ui/sync-config-widget.c:427
#: ../src/gtk-ui/sync-config-widget.c:438
msgid "No, keep settings"
msgstr "Non, conserver les paramètres"
#: ../src/gtk-ui/sync-config-widget.c:428
#: ../src/gtk-ui/sync-config-widget.c:432
#, c-format
msgid "Do you want to delete the settings for %s? This will not remove any synced information on either end but it will remove these settings."
msgstr "Voulez-vous supprimer les paramètres pour %s ? Cela ne supprimera aucune information synchronisée de part et dautre mais supprimera ces paramètres."
#. TRANSLATORS: buttons in delete-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:433
#: ../src/gtk-ui/sync-config-widget.c:437
msgid "Yes, delete"
msgstr "Oui, supprimer"
#: ../src/gtk-ui/sync-config-widget.c:463
#: ../src/gtk-ui/sync-config-widget.c:467
msgid "Reset settings"
msgstr "Rétablir les paramètres"
#: ../src/gtk-ui/sync-config-widget.c:466
#: ../src/gtk-ui/sync-config-widget.c:470
msgid "Delete settings"
msgstr "Supprimer les paramètres"
# "setup" for limited space
#: ../src/gtk-ui/sync-config-widget.c:476
#: ../src/gtk-ui/sync-config-widget.c:480
msgid "Save and use"
msgstr "Sauvegarder et utiliser"
#: ../src/gtk-ui/sync-config-widget.c:479
#: ../src/gtk-ui/sync-config-widget.c:483
msgid ""
"Save and replace\n"
"current service"
@ -733,104 +733,104 @@ msgstr ""
"Sauvegarder et utiliser\n"
"le service actuel"
#: ../src/gtk-ui/sync-config-widget.c:489
#: ../src/gtk-ui/sync-config-widget.c:493
msgid "Stop using device"
msgstr "Ne plus utiliser ce périphérique"
#: ../src/gtk-ui/sync-config-widget.c:492
#: ../src/gtk-ui/sync-config-widget.c:496
msgid "Stop using service"
msgstr "Ne plus utiliser ce service"
#. TRANSLATORS: label for an entry in service configuration form.
#. * Placeholder is a source name.
#. * Example: "Appointments URI"
#: ../src/gtk-ui/sync-config-widget.c:675
#: ../src/gtk-ui/sync-config-widget.c:679
#, c-format
msgid "%s URI"
msgstr "%s URI"
#. TRANSLATORS: toggles in service configuration form, placeholder is service
#. * or device name
#: ../src/gtk-ui/sync-config-widget.c:850
#: ../src/gtk-ui/sync-config-widget.c:854
#, c-format
msgid "Send changes to %s"
msgstr "Envoyer les modifications vers %s"
msgstr "Envoyer les modifications à %s"
#: ../src/gtk-ui/sync-config-widget.c:855
#: ../src/gtk-ui/sync-config-widget.c:859
#, c-format
msgid "Receive changes from %s"
msgstr "Recevoir les modifications depuis %s"
msgstr "Recevoir les modifications de %s"
# verb = Synchroniser
# noun = Synchronisation
#: ../src/gtk-ui/sync-config-widget.c:871
#: ../src/gtk-ui/sync-config-widget.c:875
msgid "<b>Sync</b>"
msgstr "<b>Synchroniser</b>"
#. TRANSLATORS: label of a entry in service configuration
#: ../src/gtk-ui/sync-config-widget.c:887
#: ../src/gtk-ui/sync-config-widget.c:891
msgid "Server address"
msgstr "Adresse du serveur"
#. TRANSLATORS: explanation before a device template combobox.
#. * Placeholder is a device name like 'Nokia N85' or 'Syncevolution
#. * Client'
#: ../src/gtk-ui/sync-config-widget.c:963
#: ../src/gtk-ui/sync-config-widget.c:967
#, c-format
msgid "This device looks like it might be a '%s'. If this is not correct, please take a look at the list of supported devices and pick yours if it is listed"
msgstr "Il semble que le périphérique est un '%s'. Si ce n'est pas correct, veuillez consulter la liste de périphériques pris en charge et sélectionnez le votre s'il apparait dans la liste"
#: ../src/gtk-ui/sync-config-widget.c:969
#: ../src/gtk-ui/sync-config-widget.c:973
msgid "We don't know what this device is exactly. Please take a look at the list of supported devices and pick yours if it is listed"
msgstr "Nous ne savons pas exactement ce quest ce périphérique. Veuillez consulter la liste de périphériques pris en charge et sélectionnez le votre s'il apparait dans la liste"
#: ../src/gtk-ui/sync-config-widget.c:1122
#: ../src/gtk-ui/sync-config-widget.c:1126
#, c-format
msgid "%s - Bluetooth device"
msgstr "%s - Périphérique Bluetooth"
#. TRANSLATORS: service title for services that are not based on a
#. * template in service list, the placeholder is the name of the service
#: ../src/gtk-ui/sync-config-widget.c:1128
#: ../src/gtk-ui/sync-config-widget.c:1132
#, c-format
msgid "%s - manually setup"
msgstr "%s - configurer manuellement"
#. TRANSLATORS: link button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1803
#: ../src/gtk-ui/sync-config-widget.c:1807
msgid "Launch website"
msgstr "Lancer le site Web"
# "setup" for limited space
#. TRANSLATORS: button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1812
#: ../src/gtk-ui/sync-config-widget.c:1816
msgid "Setup now"
msgstr "Configurer"
#. TRANSLATORS: labels of entries in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1908
#: ../src/gtk-ui/sync-config-widget.c:1912
msgid "Username"
msgstr "Nom d'utilisateur"
#: ../src/gtk-ui/sync-config-widget.c:1923
#: ../src/gtk-ui/sync-config-widget.c:1927
msgid "Password"
msgstr "Mot de passe"
#. TRANSLATORS: warning in service configuration form for people
#. who have modified the configuration via other means.
#: ../src/gtk-ui/sync-config-widget.c:1946
#: ../src/gtk-ui/sync-config-widget.c:1950
msgid "Current configuration is more complex than what can be shown here. Changes to sync mode or synced data types will overwrite that configuration."
msgstr "La configuration actuelle est plus complexe que ce qui peut être affiché ici. Les modifications apportées au mode synchronisation ou aux types de données synchronisées écraseront cette configuration."
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1965
#: ../src/gtk-ui/sync-config-widget.c:1969
msgid "Hide server settings"
msgstr "Masquer les paramètres du serveur"
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1985
#: ../src/gtk-ui/sync-config-widget.c:1989
msgid "Show server settings"
msgstr "Afficher les paramètres du serveur"
@ -838,41 +838,44 @@ msgstr "Afficher les paramètres du serveur"
msgid "Sync in the Sync application"
msgstr "Synchroniser dans l'application Synchronisation"
#: ../src/syncevo-dbus-server.cpp:5622
#: ../src/syncevo-dbus-server.cpp:5664
#, c-format
msgid "%s is syncing"
msgstr "%s est en cours de synchronisation"
#: ../src/syncevo-dbus-server.cpp:5623
#: ../src/syncevo-dbus-server.cpp:5665
#, c-format
msgid "We have just started to sync your computer with the %s sync service."
msgstr "Démarrage de la synchronisation de votre ordinateur avec le service %s."
#. if sync is successfully started and done
#: ../src/syncevo-dbus-server.cpp:5637
#: ../src/syncevo-dbus-server.cpp:5679
#, c-format
msgid "%s sync complete"
msgstr "Synchronisation %s terminée"
#: ../src/syncevo-dbus-server.cpp:5638
#: ../src/syncevo-dbus-server.cpp:5680
#, c-format
msgid "We have just finished syncing your computer with the %s sync service."
msgstr "Synchronisation de votre ordinateur avec le service %s"
#. if sync is successfully started and has errors, or not started successful with a fatal problem
#: ../src/syncevo-dbus-server.cpp:5643
#: ../src/syncevo-dbus-server.cpp:5685
msgid "Sync problem."
msgstr "Problème de synchronisation."
#: ../src/syncevo-dbus-server.cpp:5644
#: ../src/syncevo-dbus-server.cpp:5686
msgid "Sorry, there's a problem with your sync that you need to attend to."
msgstr "Désolé, il y a un problème avec la synchronisation que vous tentez."
#: ../src/syncevo-dbus-server.cpp:5717
#: ../src/syncevo-dbus-server.cpp:5759
msgid "View"
msgstr "Affichage"
#: ../src/syncevo-dbus-server.cpp:5718
#. Use "default" as ID because that is what mutter-moblin
#. recognizes: it then skips the action instead of adding it
#. in addition to its own "Dismiss" button (always added).
#: ../src/syncevo-dbus-server.cpp:5763
msgid "Dismiss"
msgstr "Ignorer"

172
po/it.po
View file

@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: syncevolution\n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-05-05 09:24+0000\n"
"PO-Revision-Date: 2010-05-06 18:06-0800\n"
"Last-Translator: Clara Steiner-Jay <csteiner@aracnet.com>\n"
"POT-Creation-Date: 2010-05-17 21:48+0000\n"
"PO-Revision-Date: 2010-05-18 10:32-0800\n"
"Last-Translator: francesca godani <francesca.godani@ptiglobal.net>\n"
"Language-Team: Italian <tp@lists.linux.it>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -83,11 +83,11 @@ msgstr "Eliminare i dati locali e sostituirli con quelli da %s? Solitamente ques
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
msgid "Yes, delete and replace"
msgstr "Elimia e sostituisci"
msgstr "Elimina e sostituisci"
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
#: ../src/gtk-ui/sync-ui.c:1580
#: ../src/gtk-ui/sync-ui.c:1605
msgid "No"
msgstr "No"
@ -199,7 +199,7 @@ msgstr "Sincronizzazione"
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:757
#: ../src/gtk-ui/sync-ui.c:3374
#: ../src/gtk-ui/sync-ui.c:3399
msgid "Cancel sync"
msgstr "Annulla sincronizzazione"
@ -211,7 +211,7 @@ msgstr "Torna indietro"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1223
#: ../src/gtk-ui/sync-ui.c:1224
msgid "Automatic sync"
msgstr "Sincronizzazione automatica"
@ -219,53 +219,53 @@ msgstr "Sincronizzazione automatica"
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1494
#: ../src/gtk-ui/sync-ui.c:1519
#, c-format
msgid "Affected data: %s %s"
msgstr "Dati interessati: %s %s"
#: ../src/gtk-ui/sync-ui.c:1499
#: ../src/gtk-ui/sync-ui.c:1524
#, c-format
msgid "Affected data: none"
msgstr "Dati interessati: nessuno"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1577
#: ../src/gtk-ui/sync-ui.c:1602
#, c-format
msgid "Do you want to restore the backup from %s? All changes you have made since then will be lost."
msgstr "Vuoi ripristinare il backup da %s? Tutte le modifiche apportate da allora saranno perse."
#: ../src/gtk-ui/sync-ui.c:1580
#: ../src/gtk-ui/sync-ui.c:1605
msgid "Yes, restore"
msgstr "Sì, ripristina"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1612
#: ../src/gtk-ui/sync-ui.c:1637
#, c-format
msgid "%x %X"
msgstr "%x %X"
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1631
#: ../src/gtk-ui/sync-ui.c:1656
#, c-format
msgid "Backed up before syncing with %s"
msgstr "Back up effettuato prima della sincronizzazione con %s"
#: ../src/gtk-ui/sync-ui.c:1648
#: ../src/gtk-ui/sync-ui.c:1673
msgid "Restore"
msgstr "Ripristina"
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1755
#: ../src/gtk-ui/sync-ui.c:1780
#, c-format
msgid "A normal sync with %s is not possible at this time. You can do a slow two-way sync or start from scratch. You can also restore a backup, but a slow sync or starting from scratch will still be required before normal sync is possible."
msgstr "Una sincronizzazione normale con %s non è possibile in questo momento. Si può fare una sincronizzazione lenta a due vie o iniziare da zero. Si può anche ripristinare dal backup, ma una sincronizzazione lenta o un inizio da zero saranno comunque richiesti prima che sia possibile una sincronizzazione normale."
#: ../src/gtk-ui/sync-ui.c:1765
#: ../src/gtk-ui/sync-ui.c:1790
#, c-format
msgid "If something has gone horribly wrong, you can try a slow sync, start from scratch or restore from backup."
msgstr "Se qualcosa è andato terribilmente storto, puoi provare una sincronizzazione lenta, iniziare da zero o ripristinare dal backup"
@ -273,7 +273,7 @@ msgstr "Se qualcosa è andato terribilmente storto, puoi provare una sincronizza
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1774
#: ../src/gtk-ui/sync-ui.c:1799
#, c-format
msgid ""
"Delete all your local\n"
@ -284,7 +284,7 @@ msgstr ""
"e sostituirli con\n"
"quelli da %s"
#: ../src/gtk-ui/sync-ui.c:1780
#: ../src/gtk-ui/sync-ui.c:1805
#, c-format
msgid ""
"Delete all data on\n"
@ -295,71 +295,71 @@ msgstr ""
"%s e sostituirli\n"
"con quelli locali"
#: ../src/gtk-ui/sync-ui.c:2242
#: ../src/gtk-ui/sync-ui.c:2267
msgid "Failed to get list of supported services from SyncEvolution"
msgstr "Recupero elenco dei servizi supportati da SyncEvolution non riuscito"
#: ../src/gtk-ui/sync-ui.c:2296
#: ../src/gtk-ui/sync-ui.c:2321
msgid "There was a problem communicating with the sync process. Please try again later."
msgstr "Si è verificato un problema di comunicazione con il processo di sincronizzazione. Si prega di riprovare più tardi."
#: ../src/gtk-ui/sync-ui.c:2355
#: ../src/gtk-ui/sync-ui.c:2380
msgid "Restore failed"
msgstr "Ripristino non riuscito"
#: ../src/gtk-ui/sync-ui.c:2358
#: ../src/gtk-ui/sync-ui.c:3243
#: ../src/gtk-ui/sync-ui.c:2383
#: ../src/gtk-ui/sync-ui.c:3268
msgid "Sync failed"
msgstr "Sincronizzazione non riuscita"
#: ../src/gtk-ui/sync-ui.c:2364
#: ../src/gtk-ui/sync-ui.c:2389
msgid "Restore complete"
msgstr "Ripristino completato"
#: ../src/gtk-ui/sync-ui.c:2367
#: ../src/gtk-ui/sync-ui.c:2392
msgid "Sync complete"
msgstr "Sincronizzazione completata"
#: ../src/gtk-ui/sync-ui.c:2459
#: ../src/gtk-ui/sync-ui.c:2484
#, c-format
msgid "Preparing '%s'"
msgstr "Preparazione di '%s'"
#: ../src/gtk-ui/sync-ui.c:2462
#: ../src/gtk-ui/sync-ui.c:2487
#, c-format
msgid "Receiving '%s'"
msgstr "Ricezione di '%s'"
#: ../src/gtk-ui/sync-ui.c:2465
#: ../src/gtk-ui/sync-ui.c:2490
#, c-format
msgid "Sending '%s'"
msgstr "Invio di '%s'"
#: ../src/gtk-ui/sync-ui.c:2586
#: ../src/gtk-ui/sync-ui.c:2611
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] "Si è verificato un rifiuto remoto."
msgstr[1] "Si sono verificati %ld rifiuti remoti."
#: ../src/gtk-ui/sync-ui.c:2591
#: ../src/gtk-ui/sync-ui.c:2616
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] "Si è verificato un rifiuto locale."
msgstr[1] "Si sono verificati %ld rifiuti locali."
#: ../src/gtk-ui/sync-ui.c:2596
#: ../src/gtk-ui/sync-ui.c:2621
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr "Si sono verificati %ld rifiuti locali e %ld remoti."
#: ../src/gtk-ui/sync-ui.c:2601
#: ../src/gtk-ui/sync-ui.c:2626
#, c-format
msgid "Last time: No changes."
msgstr "Ultima volta: nessuna modifica."
#: ../src/gtk-ui/sync-ui.c:2603
#: ../src/gtk-ui/sync-ui.c:2628
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
@ -369,21 +369,21 @@ msgstr[1] "Ultima volta: inviate %ld modifiche."
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2611
#: ../src/gtk-ui/sync-ui.c:2636
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] "Ultima volta: applicata una modifica."
msgstr[1] "Ultima volta: applicate %ld modifiche."
#: ../src/gtk-ui/sync-ui.c:2616
#: ../src/gtk-ui/sync-ui.c:2641
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr "Ultima volta: applicate %ld modifiche e inviate %ld."
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2823
#: ../src/gtk-ui/sync-ui.c:2848
#, c-format
msgid ""
"There was a problem with last sync:\n"
@ -392,124 +392,124 @@ msgstr ""
"Si è verificato un problema con l'ultima sincronizzazione:\n"
"%s"
#: ../src/gtk-ui/sync-ui.c:2833
#: ../src/gtk-ui/sync-ui.c:2858
#, c-format
msgid "You've just restored a backup. The changes have not been synced with %s yet"
msgstr "Hai appena ripristinato un backup. I cambiamenti non sono ancora stati sincronizzati con %s"
#: ../src/gtk-ui/sync-ui.c:3121
#: ../src/gtk-ui/sync-ui.c:3146
msgid "Waiting for current operation to finish..."
msgstr "In attesa che termini l'operazione..."
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3155
#: ../src/gtk-ui/sync-ui.c:3180
msgid "A normal sync is not possible at this time. The server suggests a slow sync, but this might not always be what you want if both ends already have data."
msgstr "Una sincronizzazione normale non è possibile in questo momento. Il server suggerisce una sincronizzazione lenta, ma questo potrebbe non essere sempre quello che vuoi, se entrambe le estremità hanno dati."
#: ../src/gtk-ui/sync-ui.c:3159
#: ../src/gtk-ui/sync-ui.c:3184
msgid "The sync process died unexpectedly."
msgstr "Il servizio di sincronizzazione è terminato inaspettatamente."
#: ../src/gtk-ui/sync-ui.c:3164
#: ../src/gtk-ui/sync-ui.c:3189
msgid "Password request was not answered. You can save the password in the settings to prevent the request."
msgstr "La richiesta della password ha ricevuto risposta. È possibile salvare la password nelle impostazioni per evitare la richiesta."
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3168
#: ../src/gtk-ui/sync-ui.c:3193
msgid "There was a problem processing sync request. Trying again may help."
msgstr "C'è stato un problema di elaborazione delle richieste di sincronizzazione. Riprovare potrebbe risolvere il problema."
#: ../src/gtk-ui/sync-ui.c:3174
#: ../src/gtk-ui/sync-ui.c:3199
msgid "Failed to login. Could there be a problem with your username or password?"
msgstr "Impossibile effettuare il login. Ci potrebbe essere un problema con il tuo nome utente o la password?"
#: ../src/gtk-ui/sync-ui.c:3177
#: ../src/gtk-ui/sync-ui.c:3202
msgid "Forbidden"
msgstr "Proibito"
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3183
#: ../src/gtk-ui/sync-ui.c:3208
msgid "A data source could not be found. Could there be a problem with the settings?"
msgstr "Impossibile trovare la sorgente. Ci potrebbe essere un problema con le impostazioni?"
#: ../src/gtk-ui/sync-ui.c:3187
#: ../src/gtk-ui/sync-ui.c:3212
msgid "Remote database error"
msgstr "Errore remoto nel database"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3190
#: ../src/gtk-ui/sync-ui.c:3215
msgid "There is a problem with the local database. Syncing again or rebooting may help."
msgstr "C'è un problema con il database locale. Sincronizzare di nuovo o riavviare."
#: ../src/gtk-ui/sync-ui.c:3193
#: ../src/gtk-ui/sync-ui.c:3218
msgid "No space on disk"
msgstr "Spazio esaurito sul disco"
#: ../src/gtk-ui/sync-ui.c:3195
#: ../src/gtk-ui/sync-ui.c:3220
msgid "Failed to process SyncML"
msgstr "Elaborazione SyncML non riuscita"
#: ../src/gtk-ui/sync-ui.c:3197
#: ../src/gtk-ui/sync-ui.c:3222
msgid "Server authorization failed"
msgstr "Autorizzazione server non riuscita"
#: ../src/gtk-ui/sync-ui.c:3199
#: ../src/gtk-ui/sync-ui.c:3224
msgid "Failed to parse configuration file"
msgstr "Analisi del file di configurazione non riuscita"
#: ../src/gtk-ui/sync-ui.c:3201
#: ../src/gtk-ui/sync-ui.c:3226
msgid "Failed to read configuration file"
msgstr "Lettura del file di configurazione non riuscita"
#: ../src/gtk-ui/sync-ui.c:3203
#: ../src/gtk-ui/sync-ui.c:3228
msgid "No configuration found"
msgstr "Non è stata trovata alcuna configurazione"
#: ../src/gtk-ui/sync-ui.c:3205
#: ../src/gtk-ui/sync-ui.c:3230
msgid "No configuration file found"
msgstr "Non è stato trovato alcun file di configurazione"
#: ../src/gtk-ui/sync-ui.c:3207
#: ../src/gtk-ui/sync-ui.c:3232
msgid "Server sent bad content"
msgstr "Il server ha inviato dei contenuti errati"
#: ../src/gtk-ui/sync-ui.c:3209
#: ../src/gtk-ui/sync-ui.c:3234
msgid "Connection certificate has expired"
msgstr "Il certificato della connessione è scaduto"
#: ../src/gtk-ui/sync-ui.c:3211
#: ../src/gtk-ui/sync-ui.c:3236
msgid "Connection certificate is invalid"
msgstr "Il certificato della connessione non è valido"
#: ../src/gtk-ui/sync-ui.c:3219
#: ../src/gtk-ui/sync-ui.c:3244
msgid "We were unable to connect to the server. The problem could be temporary or there could be something wrong with the settings."
msgstr "Non siamo stati in grado di connetterci al server. Il problema potrebbe essere temporaneo o ci potrebbe essere qualcosa di sbagliato con le impostazioni."
#: ../src/gtk-ui/sync-ui.c:3226
#: ../src/gtk-ui/sync-ui.c:3251
msgid "The server URL is bad"
msgstr "L'URLdel server non è corretto"
#: ../src/gtk-ui/sync-ui.c:3231
#: ../src/gtk-ui/sync-ui.c:3256
msgid "The server was not found"
msgstr "Il server non è stato trovato"
#: ../src/gtk-ui/sync-ui.c:3233
#: ../src/gtk-ui/sync-ui.c:3258
#, c-format
msgid "Error %d"
msgstr "Errore %d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3371
#: ../src/gtk-ui/sync-ui.c:3396
msgid "Password is required for sync"
msgstr "Password necessaria per la sincronizzazione"
#: ../src/gtk-ui/sync-ui.c:3375
#: ../src/gtk-ui/sync-ui.c:3400
msgid "Sync with password"
msgstr "Sincronizza con password"
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3385
#: ../src/gtk-ui/sync-ui.c:3410
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr "Inserire la passoword per la sincronizzazione con %s:"
@ -545,13 +545,15 @@ msgstr "<big>Sincronizzazione lenta</big>"
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:12
msgid "<big>Start from scratch</big>"
msgstr "<big>Inizia da zeroi</big>"
msgstr "<big>Inizia da zero</big>"
#: ../src/gtk-ui/ui.glade.h:13
msgid ""
"A slow sync compares items from both sides and tries to merge them. \n"
"This may fail in some cases, leading to duplicates or lost information."
msgstr "Una sincronizzazione lenta compara gli elementi da entrambe le parti e tenta di metterli insieme. `nQuesto potrebbe non riuscire in alcuni casi, portando a duplicati o a informazioni perse."
msgstr ""
"Una sincronizzazione lenta compara gli elementi da entrambe le parti e tenta di metterli insieme. \n"
"Questo potrebbe non riuscire in alcuni casi, portando a duplicati o a informazioni perse."
# (ndt) pulsante
#: ../src/gtk-ui/ui.glade.h:15
@ -611,8 +613,9 @@ msgid ""
"Fix a sync\n"
"emergency"
msgstr ""
"Risolvi urgencia in\n"
"sincronizzazione"
"Risolvi una\n"
"sincronizzazione di\n"
"emergenza"
# (ndt) segnalare SyncML?
#: ../src/gtk-ui/ui.glade.h:34
@ -889,6 +892,7 @@ msgstr "Scarta"
#~ msgid "Database error"
#~ msgstr "Errore nel database"
#~ msgid ""
#~ "Do you want to replace %s with %s? This will not remove any synced "
#~ "information on either end but you will no longer be able to sync with %s."
@ -896,75 +900,105 @@ msgstr "Scarta"
#~ "Vuoi sostituire %s con %s? Questa operazione non rimuoverà nessuna "
#~ "informazione sincronizzata ma non sarai più in grado di sincronizzare con "
#~ "%s."
#~ msgid "Yes, use %s"
#~ msgstr "Sì, utilizza %s"
#~ msgid "No, use %s"
#~ msgstr "No, utilizza %s"
#~ msgid "Reset service"
#~ msgstr "Servizio di ripristino"
#~ msgid "Addressbook"
#~ msgstr "Rubrica"
#~ msgid "Todo"
#~ msgstr "Attività"
#~ msgid "Memo"
#~ msgstr "Memo"
#~ msgid "Failed to save current service in GConf configuration system"
#~ msgstr ""
#~ "Salvataggio del servizio attuale nel sistema di configurazione GConf non "
#~ "riuscito"
#~ msgid "Failed to save service configuration to SyncEvolution"
#~ msgstr ""
#~ "Salvataggio della configurazione del servizio in SyncEvolution non "
#~ "riuscito"
#~ msgid "Failed to get service configuration from SyncEvolution"
#~ msgstr ""
#~ "Recupero della configurazione del servizio da SyncEvolution non riuscito"
#~ msgid "Failed to remove service configuration from SyncEvolution"
#~ msgstr ""
#~ "Rimozione della configurazione del servizio da SyncEvolution non riuscita"
#~ msgid "Failed to cancel: sync was no longer in progress"
#~ msgstr "Annullamento non riuscito: la sincronizzazione non era più in corso"
#~ msgid "Failed to cancel sync"
#~ msgstr "Annullamento sincronizzazione non riuscito"
#~ msgid "Canceling sync"
#~ msgstr "Annullamento sincronizzazione"
#~ msgid "No sources are enabled, not syncing"
#~ msgstr "Nessuna sorgente è abilitata, niente da sincronizzare"
#~ msgid "A sync is already in progress"
#~ msgstr "È già in corso una sincronizzazione"
#~ msgid "Failed to start sync"
#~ msgstr "Avvio della sincronizzazione non riuscito"
#~ msgid "%s (not supported by this service)"
#~ msgstr "%s (non supportato da questo servizio)"
#~ msgid "Failed to get server configuration from SyncEvolution"
#~ msgstr ""
#~ "Recupero della configurazione del server da SyncEvolution non riuscito"
#~ msgid "Server URL"
#~ msgstr "URL del server"
#~ msgid "Failed to get list of manually setup services from SyncEvolution"
#~ msgstr ""
#~ "Recupero elenco dei servizi configurati manualmente da SyncEvolution non "
#~ "riuscito"
#~ msgid "Service configuration not found"
#~ msgstr "Configurazione del servizio non trovata"
#~ msgid "Not authorized"
#~ msgstr "Non autorizzato"
#~ msgid "Not found"
#~ msgstr "Non trovato"
#~ msgid "Transport failure (no connection?)"
#~ msgstr "Errore nel trasporto dei dati (connessione assente?)"
#~ msgid "Connection timed out"
#~ msgstr "La connessione è terminata"
#~ msgid "Connection failed"
#~ msgstr "La connessione non è stata stabilita"
#~ msgid "Sync canceled"
#~ msgstr "Sincronizzazione annullata"
#~ msgid "Ending sync"
#~ msgstr "Termine sincronizzazione"
#~ msgid "<b>No sync service in use</b>"
#~ msgstr "<b>Nessun servizio di sincronizzazione in uso</b>"
#~ msgid "<big>Manual setup</big>"
#~ msgstr "<big>Configurazione manuale</big>"
#~ msgid "Merge local and remote data (recommended)"
#~ msgstr "Unire i dati locali e remoti (raccomandato)"

128
po/ja.po
View file

@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-05-03 09:24+0000\n"
"POT-Creation-Date: 2010-05-12 09:27+0000\n"
"PO-Revision-Date: \n"
"Last-Translator: GLSJPN_Yukari <yukarix.yamashita@intel.com>\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -81,7 +81,7 @@ msgstr "はい、削除して置き換える"
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
#: ../src/gtk-ui/sync-ui.c:1580
#: ../src/gtk-ui/sync-ui.c:1605
msgid "No"
msgstr "いいえ"
@ -192,7 +192,7 @@ msgstr "同期化中"
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:757
#: ../src/gtk-ui/sync-ui.c:3373
#: ../src/gtk-ui/sync-ui.c:3399
msgid "Cancel sync"
msgstr "同期化のキャンセル"
@ -204,7 +204,7 @@ msgstr "同期化に戻る"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1223
#: ../src/gtk-ui/sync-ui.c:1224
msgid "Automatic sync"
msgstr "自動同期"
@ -212,53 +212,53 @@ msgstr "自動同期"
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1494
#: ../src/gtk-ui/sync-ui.c:1519
#, c-format
msgid "Affected data: %s %s"
msgstr "影響を受けたデータ: %s %s"
#: ../src/gtk-ui/sync-ui.c:1499
#: ../src/gtk-ui/sync-ui.c:1524
#, c-format
msgid "Affected data: none"
msgstr "影響を受けたデータ: なし"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1577
#: ../src/gtk-ui/sync-ui.c:1602
#, c-format
msgid "Do you want to restore the backup from %s? All changes you have made since then will be lost."
msgstr "%s からバックアップを復元しますか? これまでに変更した内容はすべて失われてしまいます。"
#: ../src/gtk-ui/sync-ui.c:1580
#: ../src/gtk-ui/sync-ui.c:1605
msgid "Yes, restore"
msgstr "はい、復元します"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1612
#: ../src/gtk-ui/sync-ui.c:1637
#, c-format
msgid "%x %X"
msgstr "%x %X"
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1631
#: ../src/gtk-ui/sync-ui.c:1656
#, c-format
msgid "Backed up before syncing with %s"
msgstr "%s で同期する前にバックアップされます"
#: ../src/gtk-ui/sync-ui.c:1648
#: ../src/gtk-ui/sync-ui.c:1673
msgid "Restore"
msgstr "復元"
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1755
#: ../src/gtk-ui/sync-ui.c:1780
#, c-format
msgid "A normal sync with %s is not possible at this time. You can do a slow two-way sync or start from scratch. You can also restore a backup, but a slow sync or starting from scratch will still be required before normal sync is possible."
msgstr "%s での通常同期は現在できません。低速で双方向同期するか、最初からやり直すことになります。また、バックアップを復元することもできますが、通常の同期を行う前に低速同期を行うか、最初からやり直す必要があります。"
#: ../src/gtk-ui/sync-ui.c:1765
#: ../src/gtk-ui/sync-ui.c:1790
#, c-format
msgid "If something has gone horribly wrong, you can try a slow sync, start from scratch or restore from backup."
msgstr "深刻な問題が生じた場合は、低速同期を行うか、最初からやり直すか、バックアップから復元できます。"
@ -266,18 +266,18 @@ msgstr "深刻な問題が生じた場合は、低速同期を行うか、最初
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1774
#: ../src/gtk-ui/sync-ui.c:1799
#, c-format
msgid ""
"Delete all your local\n"
"data and replace with\n"
"data from %s"
msgstr ""
"ローカルデータをすべてl\n"
"削除して、%s のデータにl\n"
"ローカルデータをすべて\n"
"削除して、%s のデータに\n"
"置き換えます"
#: ../src/gtk-ui/sync-ui.c:1780
#: ../src/gtk-ui/sync-ui.c:1805
#, c-format
msgid ""
"Delete all data on\n"
@ -288,77 +288,77 @@ msgstr ""
"して、ローカルデータに\n"
"置き換えます"
#: ../src/gtk-ui/sync-ui.c:2241
#: ../src/gtk-ui/sync-ui.c:2267
msgid "Failed to get list of supported services from SyncEvolution"
msgstr "サポートされているサービスのリストを SyncEvolution から入手するのに失敗しました"
#: ../src/gtk-ui/sync-ui.c:2295
#: ../src/gtk-ui/sync-ui.c:2321
msgid "There was a problem communicating with the sync process. Please try again later."
msgstr "同期化プロセスへの通信に問題がありました。時間を置いてからもう一度試してみてください。"
#: ../src/gtk-ui/sync-ui.c:2354
#: ../src/gtk-ui/sync-ui.c:2380
msgid "Restore failed"
msgstr "復元に失敗しました"
# space limitation
#: ../src/gtk-ui/sync-ui.c:2357
#: ../src/gtk-ui/sync-ui.c:3242
#: ../src/gtk-ui/sync-ui.c:2383
#: ../src/gtk-ui/sync-ui.c:3268
msgid "Sync failed"
msgstr "同期に失敗しました"
# space limitation
#: ../src/gtk-ui/sync-ui.c:2363
#: ../src/gtk-ui/sync-ui.c:2389
msgid "Restore complete"
msgstr "復元の完了"
# space limitation
#: ../src/gtk-ui/sync-ui.c:2366
#: ../src/gtk-ui/sync-ui.c:2392
msgid "Sync complete"
msgstr "同期化の完了"
# added colon to separate
#: ../src/gtk-ui/sync-ui.c:2458
#: ../src/gtk-ui/sync-ui.c:2484
#, c-format
msgid "Preparing '%s'"
msgstr "待機中です:%s"
# added colon to separate
#: ../src/gtk-ui/sync-ui.c:2461
#: ../src/gtk-ui/sync-ui.c:2487
#, c-format
msgid "Receiving '%s'"
msgstr "受信中です:%s"
# added colon to separate
#: ../src/gtk-ui/sync-ui.c:2464
#: ../src/gtk-ui/sync-ui.c:2490
#, c-format
msgid "Sending '%s'"
msgstr "送信中です:%s"
#: ../src/gtk-ui/sync-ui.c:2585
#: ../src/gtk-ui/sync-ui.c:2611
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] "リモートで接続拒否が 1 件ありました。"
msgstr[1] "リモートで接続拒否が %ld 件ありました。"
#: ../src/gtk-ui/sync-ui.c:2590
#: ../src/gtk-ui/sync-ui.c:2616
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] "ローカルで接続拒否が 1 件ありました。"
msgstr[1] "ローカルで接続拒否が %ld 件ありました。"
#: ../src/gtk-ui/sync-ui.c:2595
#: ../src/gtk-ui/sync-ui.c:2621
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr "ローカルの接続拒否が %ld 件、およびリモートの接続拒否が %ld 件あります。"
#: ../src/gtk-ui/sync-ui.c:2600
#: ../src/gtk-ui/sync-ui.c:2626
#, c-format
msgid "Last time: No changes."
msgstr "前回:変更なし。"
#: ../src/gtk-ui/sync-ui.c:2602
#: ../src/gtk-ui/sync-ui.c:2628
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
@ -368,21 +368,21 @@ msgstr[1] "前回:%ld 箇所の変更が送信されました。"
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2610
#: ../src/gtk-ui/sync-ui.c:2636
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] "前回1 箇所の変更を適用しました。"
msgstr[1] "前回:%ld 箇所の変更を受信しました。"
#: ../src/gtk-ui/sync-ui.c:2615
#: ../src/gtk-ui/sync-ui.c:2641
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr "前回:%ld 箇所の変更を適用し、%ld 箇所の変更を送信しました。"
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2822
#: ../src/gtk-ui/sync-ui.c:2848
#, c-format
msgid ""
"There was a problem with last sync:\n"
@ -391,130 +391,130 @@ msgstr ""
"前回の同期化に次の問題がありました:\n"
"%s"
#: ../src/gtk-ui/sync-ui.c:2832
#: ../src/gtk-ui/sync-ui.c:2858
#, c-format
msgid "You've just restored a backup. The changes have not been synced with %s yet"
msgstr "バックアップの復元が完了しました。変更内容はまだ %s と同期されていませn"
#: ../src/gtk-ui/sync-ui.c:3120
#: ../src/gtk-ui/sync-ui.c:3146
msgid "Waiting for current operation to finish..."
msgstr "実行中の操作の終了を待機しています..."
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3154
#: ../src/gtk-ui/sync-ui.c:3180
msgid "A normal sync is not possible at this time. The server suggests a slow sync, but this might not always be what you want if both ends already have data."
msgstr "通常同期は現在できません。サーバーは低速同期を推奨していますが、双方に既にデータがある場合は期待通りの結果にならない場合があります。"
#: ../src/gtk-ui/sync-ui.c:3158
#: ../src/gtk-ui/sync-ui.c:3184
msgid "The sync process died unexpectedly."
msgstr "同期サービスが突然終了しました。"
#: ../src/gtk-ui/sync-ui.c:3163
#: ../src/gtk-ui/sync-ui.c:3189
msgid "Password request was not answered. You can save the password in the settings to prevent the request."
msgstr "パスワード要求に答えていません。設定でパスワードを保存すると、パスワードが要求されなようにできます。"
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3167
#: ../src/gtk-ui/sync-ui.c:3193
msgid "There was a problem processing sync request. Trying again may help."
msgstr "同期化要求の処理に問題がありました。もう一度試してみてください。"
#: ../src/gtk-ui/sync-ui.c:3173
#: ../src/gtk-ui/sync-ui.c:3199
msgid "Failed to login. Could there be a problem with your username or password?"
msgstr "ログインに失敗しました。ユーザー名またはパスワードに問題がある可能性があります。"
# "access is forbidden"
#: ../src/gtk-ui/sync-ui.c:3176
#: ../src/gtk-ui/sync-ui.c:3202
msgid "Forbidden"
msgstr "アクセスが禁止されています"
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3182
#: ../src/gtk-ui/sync-ui.c:3208
msgid "A data source could not be found. Could there be a problem with the settings?"
msgstr "データのソースが見つかりません。設定に問題がある可能性があります。"
#: ../src/gtk-ui/sync-ui.c:3186
#: ../src/gtk-ui/sync-ui.c:3212
msgid "Remote database error"
msgstr "リモート データベースのエラー"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3189
#: ../src/gtk-ui/sync-ui.c:3215
msgid "There is a problem with the local database. Syncing again or rebooting may help."
msgstr "ローカル データベースに問題があります。再度同期を行うか、再起動で解決できるかも知れません。"
# "there is no space"
#: ../src/gtk-ui/sync-ui.c:3192
#: ../src/gtk-ui/sync-ui.c:3218
msgid "No space on disk"
msgstr "ディスクに空き領域がありません"
#: ../src/gtk-ui/sync-ui.c:3194
#: ../src/gtk-ui/sync-ui.c:3220
msgid "Failed to process SyncML"
msgstr "SyncML プロセスに失敗しました"
#: ../src/gtk-ui/sync-ui.c:3196
#: ../src/gtk-ui/sync-ui.c:3222
msgid "Server authorization failed"
msgstr "サーバー認証に失敗しました"
#: ../src/gtk-ui/sync-ui.c:3198
#: ../src/gtk-ui/sync-ui.c:3224
msgid "Failed to parse configuration file"
msgstr "設定ファイルの中断に失敗しました"
#: ../src/gtk-ui/sync-ui.c:3200
#: ../src/gtk-ui/sync-ui.c:3226
msgid "Failed to read configuration file"
msgstr "設定ファイルの読み込みに失敗しました"
# "configuration entries (items) are not found"
#: ../src/gtk-ui/sync-ui.c:3202
#: ../src/gtk-ui/sync-ui.c:3228
msgid "No configuration found"
msgstr "設定項目が見つかりません"
# "configuration file is not found"
#: ../src/gtk-ui/sync-ui.c:3204
#: ../src/gtk-ui/sync-ui.c:3230
msgid "No configuration file found"
msgstr "設定ファイルが見つかりません"
#: ../src/gtk-ui/sync-ui.c:3206
#: ../src/gtk-ui/sync-ui.c:3232
msgid "Server sent bad content"
msgstr "サーバーが悪いコンテンツを送信しました"
#: ../src/gtk-ui/sync-ui.c:3208
#: ../src/gtk-ui/sync-ui.c:3234
msgid "Connection certificate has expired"
msgstr "接続証明書の期限が切れています"
#: ../src/gtk-ui/sync-ui.c:3210
#: ../src/gtk-ui/sync-ui.c:3236
msgid "Connection certificate is invalid"
msgstr "接続証明書が無効です"
#: ../src/gtk-ui/sync-ui.c:3218
#: ../src/gtk-ui/sync-ui.c:3244
msgid "We were unable to connect to the server. The problem could be temporary or there could be something wrong with the settings."
msgstr "サーバーに接続できません。障害は一時的である可能性もありますが、サーバーの設定に問題がある可能性もあります。"
# "URL is not appropriate"
#: ../src/gtk-ui/sync-ui.c:3225
#: ../src/gtk-ui/sync-ui.c:3251
msgid "The server URL is bad"
msgstr "サーバーの URL が正しくありません"
#: ../src/gtk-ui/sync-ui.c:3230
#: ../src/gtk-ui/sync-ui.c:3256
msgid "The server was not found"
msgstr "サーバーが見つかりませんでした"
# in case the error message is in JPN, added colon
#: ../src/gtk-ui/sync-ui.c:3232
#: ../src/gtk-ui/sync-ui.c:3258
#, c-format
msgid "Error %d"
msgstr "エラー:%d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3370
#: ../src/gtk-ui/sync-ui.c:3396
msgid "Password is required for sync"
msgstr "同期にはパスワードが必要です"
#: ../src/gtk-ui/sync-ui.c:3374
#: ../src/gtk-ui/sync-ui.c:3400
msgid "Sync with password"
msgstr "パスワード付き同期"
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3384
#: ../src/gtk-ui/sync-ui.c:3410
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr "%s と同期するためのパスワードを入力してください:"

329
po/nl.po
View file

@ -2,9 +2,9 @@ msgid ""
msgstr ""
"Project-Id-Version: syncevolution\n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-04-05 09:22+0000\n"
"PO-Revision-Date: 2010-04-06 17:00-0800\n"
"Last-Translator: GLS_NLD <albert.dijkstra@ptiglobal.net>\n"
"POT-Creation-Date: 2010-05-10 09:25+0000\n"
"PO-Revision-Date: 2010-05-12 13:02-0800\n"
"Last-Translator: Thomas <thomas.martens@ptiglobal.net>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@ -21,115 +21,115 @@ msgstr ""
msgid "Sync"
msgstr "Synchronisatie"
#: ../src/gtk-ui/sync-ui.c:260
#: ../src/gtk-ui/sync-ui.c:266
msgid "Contacts"
msgstr "Contacten"
#: ../src/gtk-ui/sync-ui.c:262
#: ../src/gtk-ui/sync-ui.c:268
msgid "Appointments"
msgstr "Afspraken"
#: ../src/gtk-ui/sync-ui.c:264
#: ../src/gtk-ui/sync-ui.c:270
#: ../src/gtk-ui/ui.glade.h:40
msgid "Tasks"
msgstr "Taken"
#: ../src/gtk-ui/sync-ui.c:266
#: ../src/gtk-ui/sync-ui.c:272
msgid "Notes"
msgstr "Opmerkingen"
#. TRANSLATORS: This is a "combination source" for syncing with devices
#. * that combine appointments and tasks. the name should match the ones
#. * used for calendar and todo above
#: ../src/gtk-ui/sync-ui.c:271
#: ../src/gtk-ui/sync-ui.c:277
msgid "Appointments & Tasks"
msgstr "Afspraken & Taken"
#: ../src/gtk-ui/sync-ui.c:343
#: ../src/gtk-ui/sync-ui.c:349
msgid "Starting sync"
msgstr "Synchronisatie wordt gestart"
#. TRANSLATORS: slow sync confirmation dialog message. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:381
#: ../src/gtk-ui/sync-ui.c:387
#, c-format
msgid "Do you want to slow sync with %s?"
msgstr "Wilt u langzaam synchroniseren met %s?"
#: ../src/gtk-ui/sync-ui.c:385
#: ../src/gtk-ui/sync-ui.c:391
msgid "Yes, do slow sync"
msgstr "Ja, voer een synchronisatie uit"
#: ../src/gtk-ui/sync-ui.c:385
#: ../src/gtk-ui/sync-ui.c:391
msgid "No, cancel sync"
msgstr "Nee, breek synchronisatie af"
#. TRANSLATORS: confirmation dialog for refresh-from-server. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:418
#: ../src/gtk-ui/sync-ui.c:424
#, c-format
msgid "Do you want to delete all local data and replace it with data from %s? This is not usually advised."
msgstr "Wil je alle lokale data verwijderen en vervangen met data van %s? Dit is niet aan te raden."
#: ../src/gtk-ui/sync-ui.c:423
#: ../src/gtk-ui/sync-ui.c:454
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
msgid "Yes, delete and replace"
msgstr "Ja, verwijder en vervang"
#: ../src/gtk-ui/sync-ui.c:423
#: ../src/gtk-ui/sync-ui.c:454
#: ../src/gtk-ui/sync-ui.c:1566
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
#: ../src/gtk-ui/sync-ui.c:1580
msgid "No"
msgstr "Nee"
#. TRANSLATORS: confirmation dialog for refresh-from-client. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:449
#: ../src/gtk-ui/sync-ui.c:455
#, c-format
msgid "Do you want to delete all data in %s and replace it with your local data? This is not usually advised."
msgstr "Wil je alle data in %s verwijderen en vervangen met lokale data? Dit is niet aan te raden."
#: ../src/gtk-ui/sync-ui.c:481
#: ../src/gtk-ui/sync-ui.c:487
msgid "Trying to cancel sync"
msgstr "Proberen syncrhonisatie af te breken"
#: ../src/gtk-ui/sync-ui.c:521
#: ../src/gtk-ui/sync-ui.c:529
msgid "No service or device selected"
msgstr "Geen service of apparaat geselecteerd"
#. TRANSLATORS: This is the title on main view. Placeholder is
#. * the service name. Example: "Google - synced just now"
#: ../src/gtk-ui/sync-ui.c:529
#: ../src/gtk-ui/sync-ui.c:537
#, c-format
msgid "%s - synced just now"
msgstr "%s - just klaar met synchroniseren"
#: ../src/gtk-ui/sync-ui.c:533
#: ../src/gtk-ui/sync-ui.c:541
#, c-format
msgid "%s - synced a minute ago"
msgstr "%s - een minuut geleden gesynchroniseerd"
#: ../src/gtk-ui/sync-ui.c:537
#: ../src/gtk-ui/sync-ui.c:545
#, c-format
msgid "%s - synced %ld minutes ago"
msgstr "%s - %ld minuten geleden gesynchroniseerd"
#: ../src/gtk-ui/sync-ui.c:542
#: ../src/gtk-ui/sync-ui.c:550
#, c-format
msgid "%s - synced an hour ago"
msgstr "%s - een uur geleden gesynchroniseerd"
#: ../src/gtk-ui/sync-ui.c:546
#: ../src/gtk-ui/sync-ui.c:554
#, c-format
msgid "%s - synced %ld hours ago"
msgstr "%s - %ld uren geleden gesynchroniseerd"
#: ../src/gtk-ui/sync-ui.c:551
#: ../src/gtk-ui/sync-ui.c:559
#, c-format
msgid "%s - synced a day ago"
msgstr "%s - een dag geleden gesynchroniseerd"
#: ../src/gtk-ui/sync-ui.c:555
#: ../src/gtk-ui/sync-ui.c:563
#, c-format
msgid "%s - synced %ld days ago"
msgstr "%s - %ld dagen geleden gesynchroniseerd"
@ -137,66 +137,66 @@ msgstr "%s - %ld dagen geleden gesynchroniseerd"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "You've just restored a backup. The changes have not been "
#. * "synced with %s yet"
#: ../src/gtk-ui/sync-ui.c:604
#: ../src/gtk-ui/sync-ui.c:719
#: ../src/gtk-ui/sync-ui.c:612
#: ../src/gtk-ui/sync-ui.c:726
msgid "Sync now"
msgstr "Synchroniseer nu"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "A normal sync is not possible at this time..." message.
#. * "Other options" will open Emergency view
#: ../src/gtk-ui/sync-ui.c:610
#: ../src/gtk-ui/sync-ui.c:618
#: ../src/gtk-ui/ui.glade.h:37
msgid "Slow sync"
msgstr "Synchronisatie"
#: ../src/gtk-ui/sync-ui.c:611
#: ../src/gtk-ui/sync-ui.c:619
msgid "Other options..."
msgstr "Andere opties..."
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * when no service is selected. Will open configuration view
#: ../src/gtk-ui/sync-ui.c:616
#: ../src/gtk-ui/sync-ui.c:624
msgid "Select sync service"
msgstr "Selecteer synchronisatie service"
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * login to service fails. Will open configuration view for this service
#: ../src/gtk-ui/sync-ui.c:621
#: ../src/gtk-ui/sync-ui.c:629
msgid "Edit service settings"
msgstr "Bewerk service instellingen"
#: ../src/gtk-ui/sync-ui.c:670
#: ../src/gtk-ui/sync-ui.c:700
msgid "You haven't selected a sync service or device yet. Sync services let you synchronize your data between your netbook and a web service. You can also sync directly with some devices."
msgstr "Je hebt geen synchronisatie service of apparaat geselecteerd. Synchronisatie service laten je synchroniseren tussen je netbook en een web service."
#: ../src/gtk-ui/sync-ui.c:717
#: ../src/gtk-ui/sync-ui.c:722
msgid "Sync again"
msgstr "Synchroniseer opnieuw"
#: ../src/gtk-ui/sync-ui.c:730
#: ../src/gtk-ui/sync-ui.c:743
msgid "Restoring"
msgstr "Herstellen"
#: ../src/gtk-ui/sync-ui.c:732
#: ../src/gtk-ui/sync-ui.c:745
msgid "Syncing"
msgstr "Synchronisatie bezig"
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:743
#: ../src/gtk-ui/sync-ui.c:3358
#: ../src/gtk-ui/sync-ui.c:757
#: ../src/gtk-ui/sync-ui.c:3374
msgid "Cancel sync"
msgstr "Synchronisatie afbreken"
#: ../src/gtk-ui/sync-ui.c:908
#: ../src/gtk-ui/sync-ui.c:922
msgid "Back to sync"
msgstr "Terug naar synchronisatie"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1209
#: ../src/gtk-ui/sync-ui.c:1223
msgid "Automatic sync"
msgstr "Automatische synchronisatie"
@ -204,53 +204,53 @@ msgstr "Automatische synchronisatie"
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1480
#: ../src/gtk-ui/sync-ui.c:1494
#, c-format
msgid "Affected data: %s %s"
msgstr "Betroffen gegevens: %s %s"
#: ../src/gtk-ui/sync-ui.c:1485
#: ../src/gtk-ui/sync-ui.c:1499
#, c-format
msgid "Affected data: none"
msgstr "Betroffen gegevens: geen"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1563
#: ../src/gtk-ui/sync-ui.c:1577
#, c-format
msgid "Do you want to restore the backup from %s? All changes you have made since then will be lost."
msgstr "Wilt u de backup terugzetten van % s? Alle wijzigingen die u sindsdien hebt gemaakt gaan verloren."
#: ../src/gtk-ui/sync-ui.c:1566
#: ../src/gtk-ui/sync-ui.c:1580
msgid "Yes, restore"
msgstr "Ja, herstellen"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1598
#: ../src/gtk-ui/sync-ui.c:1612
#, c-format
msgid "%x %X"
msgstr "%x %X"
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1617
#: ../src/gtk-ui/sync-ui.c:1631
#, c-format
msgid "Backed up before syncing with %s"
msgstr "Gebackupt vóór synchroniseren met %s"
#: ../src/gtk-ui/sync-ui.c:1634
#: ../src/gtk-ui/sync-ui.c:1648
msgid "Restore"
msgstr "Herstellen"
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1741
#: ../src/gtk-ui/sync-ui.c:1755
#, c-format
msgid "A normal sync with %s is not possible at this time. You can do a slow two-way sync or start from scratch. You can also restore a backup, but a slow sync or starting from scratch will still be required before normal sync is possible."
msgstr "Een normale synchronisatie met %s is niet mogelijk op dit moment. U kunt een langzame twee-weg synchronisatie uitvoeren of weer starten vanaf het begin. U kunt ook een back-up terugzetten, maar een langzame twee-weg synchronisatie of starten vanaf het begin is nog steeds noodzakelijk voordat een normale synchronisatie mogelijk is."
#: ../src/gtk-ui/sync-ui.c:1751
#: ../src/gtk-ui/sync-ui.c:1765
#, c-format
msgid "If something has gone horribly wrong, you can try a slow sync, start from scratch or restore from backup."
msgstr "Als iets verschrikkelijk mis is gegaan, kunt u een langzame synchronisatie proberen, starten vanaf het begin of herstellen vanaf een backup."
@ -258,7 +258,7 @@ msgstr "Als iets verschrikkelijk mis is gegaan, kunt u een langzame synchronisat
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1760
#: ../src/gtk-ui/sync-ui.c:1774
#, c-format
msgid ""
"Delete all your local\n"
@ -269,7 +269,7 @@ msgstr ""
"data en vervang het\n"
"met data van %s"
#: ../src/gtk-ui/sync-ui.c:1766
#: ../src/gtk-ui/sync-ui.c:1780
#, c-format
msgid ""
"Delete all data on\n"
@ -280,71 +280,71 @@ msgstr ""
"%s en vervang het\n"
"met uw lokale data"
#: ../src/gtk-ui/sync-ui.c:2226
#: ../src/gtk-ui/sync-ui.c:2242
msgid "Failed to get list of supported services from SyncEvolution"
msgstr "Fout bij het verkrijgen van ondersteunde services uit SyncEvolution"
#: ../src/gtk-ui/sync-ui.c:2280
#: ../src/gtk-ui/sync-ui.c:2296
msgid "There was a problem communicating with the sync process. Please try again later."
msgstr "Er was een probleem met de synchronisatie communicatie. Probeer het later nog eens."
#: ../src/gtk-ui/sync-ui.c:2339
#: ../src/gtk-ui/sync-ui.c:2355
msgid "Restore failed"
msgstr "Herstellen mislukt"
#: ../src/gtk-ui/sync-ui.c:2342
#: ../src/gtk-ui/sync-ui.c:3227
#: ../src/gtk-ui/sync-ui.c:2358
#: ../src/gtk-ui/sync-ui.c:3243
msgid "Sync failed"
msgstr "Synchronisatie mislukt"
#: ../src/gtk-ui/sync-ui.c:2348
#: ../src/gtk-ui/sync-ui.c:2364
msgid "Restore complete"
msgstr "Herstellen afgerond"
#: ../src/gtk-ui/sync-ui.c:2351
#: ../src/gtk-ui/sync-ui.c:2367
msgid "Sync complete"
msgstr "Synchronisatie afgerond"
#: ../src/gtk-ui/sync-ui.c:2443
#: ../src/gtk-ui/sync-ui.c:2459
#, c-format
msgid "Preparing '%s'"
msgstr "'%s' voorbereiden"
#: ../src/gtk-ui/sync-ui.c:2446
#: ../src/gtk-ui/sync-ui.c:2462
#, c-format
msgid "Receiving '%s'"
msgstr "'%s' ontvangen"
#: ../src/gtk-ui/sync-ui.c:2449
#: ../src/gtk-ui/sync-ui.c:2465
#, c-format
msgid "Sending '%s'"
msgstr "'%s' versturen"
#: ../src/gtk-ui/sync-ui.c:2570
#: ../src/gtk-ui/sync-ui.c:2586
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] "Er waren %ld externe afwijzingen."
msgstr[1] "Er waren %ld externe verwerpingen."
#: ../src/gtk-ui/sync-ui.c:2575
#: ../src/gtk-ui/sync-ui.c:2591
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] "Er was een lokale afwijzing."
msgstr[1] "Er waren %ld lokale afwijzingen."
#: ../src/gtk-ui/sync-ui.c:2580
#: ../src/gtk-ui/sync-ui.c:2596
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr "Er waren %ld lokale en %ld externe afwijzingen."
#: ../src/gtk-ui/sync-ui.c:2585
#: ../src/gtk-ui/sync-ui.c:2601
#, c-format
msgid "Last time: No changes."
msgstr "Laatste keer: geen veranderingen."
#: ../src/gtk-ui/sync-ui.c:2587
#: ../src/gtk-ui/sync-ui.c:2603
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
@ -354,21 +354,21 @@ msgstr[1] "Laatste keer: %ld veranderingen verstuurd."
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2595
#: ../src/gtk-ui/sync-ui.c:2611
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] "Laatste keer: één verandering uitgevoerd."
msgstr[1] "Laatste keer: %ld veranderingen uitgevoerd."
#: ../src/gtk-ui/sync-ui.c:2600
#: ../src/gtk-ui/sync-ui.c:2616
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr "Laatste keer: %ld wijzigingen uitgevoerd, %ld verzonden."
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2807
#: ../src/gtk-ui/sync-ui.c:2823
#, c-format
msgid ""
"There was a problem with last sync:\n"
@ -377,124 +377,124 @@ msgstr ""
"Er was een probleem met de laatste synchonisatie:\n"
"%s"
#: ../src/gtk-ui/sync-ui.c:2817
#: ../src/gtk-ui/sync-ui.c:2833
#, c-format
msgid "You've just restored a backup. The changes have not been synced with %s yet"
msgstr "Je hebt zojuist hersteld van een backup. De veranderingen zijn nog niet met %s gesynchroniseerd"
#: ../src/gtk-ui/sync-ui.c:3105
#: ../src/gtk-ui/sync-ui.c:3121
msgid "Waiting for current operation to finish..."
msgstr "Wachten op het voltooien van de huidige operatie..."
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3139
#: ../src/gtk-ui/sync-ui.c:3155
msgid "A normal sync is not possible at this time. The server suggests a slow sync, but this might not always be what you want if both ends already have data."
msgstr "Een normale synchronisatie is niet mogelijk op dit moment."
#: ../src/gtk-ui/sync-ui.c:3143
#: ../src/gtk-ui/sync-ui.c:3159
msgid "The sync process died unexpectedly."
msgstr "De synchronisatie service hing onverwachts op"
#: ../src/gtk-ui/sync-ui.c:3148
#: ../src/gtk-ui/sync-ui.c:3164
msgid "Password request was not answered. You can save the password in the settings to prevent the request."
msgstr "Wachtwoord was niet beantwoord. Je kunt het wachtwoord in de instellingen opslaan om dit probleem te voorkomen."
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3152
#: ../src/gtk-ui/sync-ui.c:3168
msgid "There was a problem processing sync request. Trying again may help."
msgstr "Er is een probleem met de synchronisatie. Opnieuw proberen kan wellicht helpen."
#: ../src/gtk-ui/sync-ui.c:3158
#: ../src/gtk-ui/sync-ui.c:3174
msgid "Failed to login. Could there be a problem with your username or password?"
msgstr "Inloggen Mislukt. Is er een probleem met uw gebruikersnaam of wachtwoord?"
#: ../src/gtk-ui/sync-ui.c:3161
#: ../src/gtk-ui/sync-ui.c:3177
msgid "Forbidden"
msgstr "Verboden"
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3167
#: ../src/gtk-ui/sync-ui.c:3183
msgid "A data source could not be found. Could there be a problem with the settings?"
msgstr "De bron kon niet worden gevonden. Is er een probleem met de serverinstellingen?"
#: ../src/gtk-ui/sync-ui.c:3171
#: ../src/gtk-ui/sync-ui.c:3187
msgid "Remote database error"
msgstr "Service database fout"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3174
#: ../src/gtk-ui/sync-ui.c:3190
msgid "There is a problem with the local database. Syncing again or rebooting may help."
msgstr "Er is een probleem met de lokale database. Opnieuw synchroniseren of herstarten kan helpen."
#: ../src/gtk-ui/sync-ui.c:3177
#: ../src/gtk-ui/sync-ui.c:3193
msgid "No space on disk"
msgstr "Geen schijf ruimte beschikbaar"
#: ../src/gtk-ui/sync-ui.c:3179
#: ../src/gtk-ui/sync-ui.c:3195
msgid "Failed to process SyncML"
msgstr "Fout bij verwerken van SyncML"
#: ../src/gtk-ui/sync-ui.c:3181
#: ../src/gtk-ui/sync-ui.c:3197
msgid "Server authorization failed"
msgstr "Server authorisatie mislukt"
#: ../src/gtk-ui/sync-ui.c:3183
#: ../src/gtk-ui/sync-ui.c:3199
msgid "Failed to parse configuration file"
msgstr "Fout bij verwerken van configuratie bestand"
#: ../src/gtk-ui/sync-ui.c:3185
#: ../src/gtk-ui/sync-ui.c:3201
msgid "Failed to read configuration file"
msgstr "Fout bij lezen van configuratie bestand"
#: ../src/gtk-ui/sync-ui.c:3187
#: ../src/gtk-ui/sync-ui.c:3203
msgid "No configuration found"
msgstr "Geen configuratie gevonden"
#: ../src/gtk-ui/sync-ui.c:3189
#: ../src/gtk-ui/sync-ui.c:3205
msgid "No configuration file found"
msgstr "Geen configuratie bestand gevonden"
#: ../src/gtk-ui/sync-ui.c:3191
#: ../src/gtk-ui/sync-ui.c:3207
msgid "Server sent bad content"
msgstr "Server verstuurde foute gegevens"
#: ../src/gtk-ui/sync-ui.c:3193
#: ../src/gtk-ui/sync-ui.c:3209
msgid "Connection certificate has expired"
msgstr "Verbindingscertificaat is verlopen"
#: ../src/gtk-ui/sync-ui.c:3195
#: ../src/gtk-ui/sync-ui.c:3211
msgid "Connection certificate is invalid"
msgstr "Verbindingscertificaat is ongeldig"
#: ../src/gtk-ui/sync-ui.c:3203
#: ../src/gtk-ui/sync-ui.c:3219
msgid "We were unable to connect to the server. The problem could be temporary or there could be something wrong with the settings."
msgstr "We waren niet in staat om verbinding te maken met de server. Het probleem kan tijdelijk zijn of er kan iets mis zijn met de serverinstellingen."
#: ../src/gtk-ui/sync-ui.c:3210
#: ../src/gtk-ui/sync-ui.c:3226
msgid "The server URL is bad"
msgstr "De server URL is niet geldig"
#: ../src/gtk-ui/sync-ui.c:3215
#: ../src/gtk-ui/sync-ui.c:3231
msgid "The server was not found"
msgstr "Server niet gevonden"
#: ../src/gtk-ui/sync-ui.c:3217
#: ../src/gtk-ui/sync-ui.c:3233
#, c-format
msgid "Error %d"
msgstr "Fout %d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3355
#: ../src/gtk-ui/sync-ui.c:3371
msgid "Password is required for sync"
msgstr "Een wachtwoord is vereist voor synchronisatie"
#: ../src/gtk-ui/sync-ui.c:3359
#: ../src/gtk-ui/sync-ui.c:3375
msgid "Sync with password"
msgstr "Synchroniseer met een wachtwoord"
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3369
#: ../src/gtk-ui/sync-ui.c:3385
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr "Voer een wachtwoord in voor synchroniseren met %s:"
@ -543,11 +543,11 @@ msgstr ""
#: ../src/gtk-ui/ui.glade.h:15
msgid "Add new device"
msgstr "Nieuw apparaat toevoegen"
msgstr "Nieuw apparaat"
#: ../src/gtk-ui/ui.glade.h:16
msgid "Add new service"
msgstr "Voeg nieuwe service toe"
msgstr "Nieuwe service "
#. explanation of "Restore backup" function
#: ../src/gtk-ui/ui.glade.h:18
@ -643,79 +643,79 @@ msgstr "Niet veroudert"
msgid "Sync (GTK)"
msgstr "Sync (GTK)"
#: ../src/gtk-ui/sync-config-widget.c:74
#: ../src/gtk-ui/sync-config-widget.c:78
msgid "ScheduleWorld enables you to keep your contacts, events, tasks, and notes in sync."
msgstr "ScheduleWorld kan je contacten, gebeurtenissen, taken en notities synchroniseren."
#: ../src/gtk-ui/sync-config-widget.c:77
#: ../src/gtk-ui/sync-config-widget.c:81
msgid "Google Sync can backup and synchronize your contacts with your Gmail contacts."
msgstr "Google Sync kan je adresboek en Gmail contacten synchroniseren en er backups van maken."
#. TRANSLATORS: Please include the word "demo" (or the equivalent in
#. your language): Funambol is going to be a 90 day demo service
#. in the future
#: ../src/gtk-ui/sync-config-widget.c:83
#: ../src/gtk-ui/sync-config-widget.c:87
msgid "Backup your contacts and calendar. Sync with a single click, anytime, anywhere (DEMO)."
msgstr "Backup je adresboek en kalender. Synchroniseer met een muisklik, elk moment, overal (DEMO)."
#: ../src/gtk-ui/sync-config-widget.c:86
#: ../src/gtk-ui/sync-config-widget.c:90
msgid "Mobical Backup and Restore service allows you to securely backup your personal mobile data for free."
msgstr "Met Mobical Backup and Herstel service kunt u uw persoonlijke mobiele data veilig en gratis backuppen."
#: ../src/gtk-ui/sync-config-widget.c:89
#: ../src/gtk-ui/sync-config-widget.c:93
msgid "ZYB is a simple way for people to store and share mobile information online."
msgstr "Met ZYB kan men eenvoudige mobiele informatie online opslaan en delen."
#: ../src/gtk-ui/sync-config-widget.c:92
#: ../src/gtk-ui/sync-config-widget.c:96
msgid "Memotoo lets you access your personal data from any computer connected to the Internet."
msgstr "Met Memotoo kunt u toegang krijgen tot uw persoonlijke gegevens vanaf elke computer die aangesloten is op het internet."
#: ../src/gtk-ui/sync-config-widget.c:188
#: ../src/gtk-ui/sync-config-widget.c:192
msgid "Sorry, failed to save the configuration"
msgstr "Fout bij het opslaan van het configuratie bestand"
#: ../src/gtk-ui/sync-config-widget.c:377
#: ../src/gtk-ui/sync-config-widget.c:381
msgid "Service must have a name and server URL"
msgstr "Service moet een naam en server URL hebben"
#: ../src/gtk-ui/sync-config-widget.c:418
#: ../src/gtk-ui/sync-config-widget.c:422
#, c-format
msgid "Do you want to reset the settings for %s? This will not remove any synced information on either end."
msgstr "Wilt u de instellingen voor %s resetten? Data dat al gesynchroniseerde is zal niet worden verwijderd."
#. TRANSLATORS: buttons in reset-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:422
#: ../src/gtk-ui/sync-config-widget.c:426
msgid "Yes, reset"
msgstr "Ja, reset"
#: ../src/gtk-ui/sync-config-widget.c:423
#: ../src/gtk-ui/sync-config-widget.c:434
#: ../src/gtk-ui/sync-config-widget.c:427
#: ../src/gtk-ui/sync-config-widget.c:438
msgid "No, keep settings"
msgstr "Nee, behoud de instellingen"
#: ../src/gtk-ui/sync-config-widget.c:428
#: ../src/gtk-ui/sync-config-widget.c:432
#, c-format
msgid "Do you want to delete the settings for %s? This will not remove any synced information on either end but it will remove these settings."
msgstr "Wilt u de instellingen voor %s verwijderen? Data dat al gesynchroniseerde is zal niet worden verwijderd, alleen deze service configuratie zal worden verwijdert."
#. TRANSLATORS: buttons in delete-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:433
#: ../src/gtk-ui/sync-config-widget.c:437
msgid "Yes, delete"
msgstr "Ja, verwijderen"
#: ../src/gtk-ui/sync-config-widget.c:463
#: ../src/gtk-ui/sync-config-widget.c:467
msgid "Reset settings"
msgstr "Instellingen wissen"
#: ../src/gtk-ui/sync-config-widget.c:466
#: ../src/gtk-ui/sync-config-widget.c:470
msgid "Delete settings"
msgstr "Verwijder instellingen"
#: ../src/gtk-ui/sync-config-widget.c:476
#: ../src/gtk-ui/sync-config-widget.c:480
msgid "Save and use"
msgstr "Opslaan en gebruik"
#: ../src/gtk-ui/sync-config-widget.c:479
#: ../src/gtk-ui/sync-config-widget.c:483
msgid ""
"Save and replace\n"
"current service"
@ -723,101 +723,101 @@ msgstr ""
"Opslaan en vervang\n"
"de huidige service"
#: ../src/gtk-ui/sync-config-widget.c:489
#: ../src/gtk-ui/sync-config-widget.c:493
msgid "Stop using device"
msgstr "Stop apparaat gebruik"
#: ../src/gtk-ui/sync-config-widget.c:492
#: ../src/gtk-ui/sync-config-widget.c:496
msgid "Stop using service"
msgstr "Stop service gebruik"
#. TRANSLATORS: label for an entry in service configuration form.
#. * Placeholder is a source name.
#. * Example: "Appointments URI"
#: ../src/gtk-ui/sync-config-widget.c:675
#: ../src/gtk-ui/sync-config-widget.c:679
#, c-format
msgid "%s URI"
msgstr "%s URI"
#. TRANSLATORS: toggles in service configuration form, placeholder is service
#. * or device name
#: ../src/gtk-ui/sync-config-widget.c:850
#: ../src/gtk-ui/sync-config-widget.c:854
#, c-format
msgid "Send changes to %s"
msgstr "Stuur wijzigingen naar '%s'"
#: ../src/gtk-ui/sync-config-widget.c:855
#: ../src/gtk-ui/sync-config-widget.c:859
#, c-format
msgid "Receive changes from %s"
msgstr "Ontvang veranderingen van %s"
#: ../src/gtk-ui/sync-config-widget.c:871
#: ../src/gtk-ui/sync-config-widget.c:875
msgid "<b>Sync</b>"
msgstr "<b>Synchronisatie</b>"
#. TRANSLATORS: label of a entry in service configuration
#: ../src/gtk-ui/sync-config-widget.c:887
#: ../src/gtk-ui/sync-config-widget.c:891
msgid "Server address"
msgstr "Server adres"
#. TRANSLATORS: explanation before a device template combobox.
#. * Placeholder is a device name like 'Nokia N85' or 'Syncevolution
#. * Client'
#: ../src/gtk-ui/sync-config-widget.c:963
#: ../src/gtk-ui/sync-config-widget.c:967
#, c-format
msgid "This device looks like it might be a '%s'. If this is not correct, please take a look at the list of supported devices and pick yours if it is listed"
msgstr "Dit apparaat ziet eruit als een '%s'. Als dit niet correct is, kijk dan in de lijst met ondersteunde apparaten en kies de juiste."
#: ../src/gtk-ui/sync-config-widget.c:969
#: ../src/gtk-ui/sync-config-widget.c:973
msgid "We don't know what this device is exactly. Please take a look at the list of supported devices and pick yours if it is listed"
msgstr "We kunnen niet zien wat voor apparaat dit is. Kijk naar de lijst van ondersteunde apparaten en kies de juiste."
#: ../src/gtk-ui/sync-config-widget.c:1122
#: ../src/gtk-ui/sync-config-widget.c:1126
#, c-format
msgid "%s - Bluetooth device"
msgstr "%s - Bluetooth-apparaat"
#. TRANSLATORS: service title for services that are not based on a
#. * template in service list, the placeholder is the name of the service
#: ../src/gtk-ui/sync-config-widget.c:1128
#: ../src/gtk-ui/sync-config-widget.c:1132
#, c-format
msgid "%s - manually setup"
msgstr "%s - handmatig instellen"
#. TRANSLATORS: link button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1803
#: ../src/gtk-ui/sync-config-widget.c:1807
msgid "Launch website"
msgstr "Start website"
#. TRANSLATORS: button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1812
#: ../src/gtk-ui/sync-config-widget.c:1816
msgid "Setup now"
msgstr "Nu instellen"
#. TRANSLATORS: labels of entries in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1908
#: ../src/gtk-ui/sync-config-widget.c:1912
msgid "Username"
msgstr "gebruikersnaam"
#: ../src/gtk-ui/sync-config-widget.c:1923
#: ../src/gtk-ui/sync-config-widget.c:1927
msgid "Password"
msgstr "Wachtwoord"
#. TRANSLATORS: warning in service configuration form for people
#. who have modified the configuration via other means.
#: ../src/gtk-ui/sync-config-widget.c:1946
#: ../src/gtk-ui/sync-config-widget.c:1950
msgid "Current configuration is more complex than what can be shown here. Changes to sync mode or synced data types will overwrite that configuration."
msgstr "De huidige configuratie is complexer dan wat hier kan worden weergegeven. Wijzigingen aan de synchronisatie modus of aan de gesynchroniseerd data types overschrijft de configuratie."
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1965
#: ../src/gtk-ui/sync-config-widget.c:1969
msgid "Hide server settings"
msgstr "Server instellingen verbergen"
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1985
#: ../src/gtk-ui/sync-config-widget.c:1989
msgid "Show server settings"
msgstr "Server instellingen weergeven"
@ -825,47 +825,49 @@ msgstr "Server instellingen weergeven"
msgid "Sync in the Sync application"
msgstr "Synchroniseer in de synchronisatie toepassing"
#: ../src/syncevo-dbus-server.cpp:5622
#: ../src/syncevo-dbus-server.cpp:5664
#, c-format
msgid "%s is syncing"
msgstr "%s synchronisatie bezig"
#: ../src/syncevo-dbus-server.cpp:5623
#: ../src/syncevo-dbus-server.cpp:5665
#, c-format
msgid "We have just started to sync your computer with the %s sync service."
msgstr "We hebben de synchronisatie met service %s en je computer gestart."
#. if sync is successfully started and done
#: ../src/syncevo-dbus-server.cpp:5637
#: ../src/syncevo-dbus-server.cpp:5679
#, c-format
msgid "%s sync complete"
msgstr "%s synchronisatie afgerond"
#: ../src/syncevo-dbus-server.cpp:5638
#: ../src/syncevo-dbus-server.cpp:5680
#, c-format
msgid "We have just finished syncing your computer with the %s sync service."
msgstr "Synchronisatie met service %s en je computer is voltooid."
#. if sync is successfully started and has errors, or not started successful with a fatal problem
#: ../src/syncevo-dbus-server.cpp:5643
#: ../src/syncevo-dbus-server.cpp:5685
msgid "Sync problem."
msgstr "Synchronisatie probleem."
#: ../src/syncevo-dbus-server.cpp:5644
#: ../src/syncevo-dbus-server.cpp:5686
msgid "Sorry, there's a problem with your sync that you need to attend to."
msgstr "Sorry, er is een probleem met de synchronisatie dat naar ingekeken moet worden."
#: ../src/syncevo-dbus-server.cpp:5717
#: ../src/syncevo-dbus-server.cpp:5759
msgid "View"
msgstr "Bekijk"
#: ../src/syncevo-dbus-server.cpp:5718
#. Use "default" as ID because that is what mutter-moblin
#. recognizes: it then skips the action instead of adding it
#. in addition to its own "Dismiss" button (always added).
#: ../src/syncevo-dbus-server.cpp:5763
msgid "Dismiss"
msgstr "Gezien"
#~ msgid "Database error"
#~ msgstr "Database fout"
#~ msgid ""
#~ "Do you want to replace %s with %s? This will not remove any synced "
#~ "information on either end but you will no longer be able to sync with %s."
@ -873,113 +875,80 @@ msgstr "Gezien"
#~ "Wilt u %s met %s vervangen? Data dat al gesynchroniseerde is zal niet "
#~ "worden verwijdert, maar u zal niet langer in staat zijn om met %s te "
#~ "synchroniseren."
#~ msgid "Yes, use %s"
#~ msgstr "Ja, gebruik %s"
#~ msgid "No, use %s"
#~ msgstr "Nee, gebruik %s"
#~ msgid "Reset service"
#~ msgstr "Reset service"
#~ msgid "Addressbook"
#~ msgstr "Adresboek"
#~ msgid "Todo"
#~ msgstr "Te doen"
#~ msgid "Memo"
#~ msgstr "Memo"
#~ msgid "Failed to save current service in GConf configuration system"
#~ msgstr "Fout bij wegschrijven huidige service in GConf configuratie systeem"
#~ msgid "Failed to save service configuration to SyncEvolution"
#~ msgstr "Fout bij wegschrijven service configuratie naar SyncEvolution"
#~ msgid "Failed to get service configuration from SyncEvolution"
#~ msgstr "Fout bij inlezen service configuratie uit SyncEvolution"
#~ msgid "Failed to remove service configuration from SyncEvolution"
#~ msgstr "Fout bij verwijderen service configuratie uit SyncEvolution"
#~ msgid "Failed to cancel: sync was no longer in progress"
#~ msgstr "Afbreken mislukt: syncrhonisatie was niet langer bezig"
#~ msgid "Failed to cancel sync"
#~ msgstr "Afbreken synchronisatie mislukt"
#~ msgid "Canceling sync"
#~ msgstr "Afbreken synchronisatie"
#~ msgid "No sources are enabled, not syncing"
#~ msgstr "Geen bronnen zijn actief, synchronisatie niet gestart"
#~ msgid "A sync is already in progress"
#~ msgstr "Synchronisatie is al bezig"
#~ msgid "Failed to start sync"
#~ msgstr "Fout bij opstarten synchronisatie"
#~ msgid "%s (not supported by this service)"
#~ msgstr "%s (niet ondersteund door deze service)"
#~ msgid "Failed to get server configuration from SyncEvolution"
#~ msgstr "Fout bij inlezen server configuratie uit SyncEvolution"
#~ msgid "Server URL"
#~ msgstr "Server URL"
#~ msgid "Failed to get list of manually setup services from SyncEvolution"
#~ msgstr ""
#~ "Fout bij verkrijgen van handmatige opgezette services uit SyncEvolution"
#~ msgid "Service configuration not found"
#~ msgstr "Service configuratie niet gevonden"
#~ msgid "Not authorized"
#~ msgstr "Niet toegestaan"
#~ msgid "Not found"
#~ msgstr "Niet gevonden"
#~ msgid "Transport failure (no connection?)"
#~ msgstr "Transport fout (geen verbinding?)"
#~ msgid "Connection timed out"
#~ msgstr "Verbinding verlopen"
#~ msgid "Sync canceled"
#~ msgstr "Synchronisatie afgebroken"
#~ msgid "Ending sync"
#~ msgstr "Beindigen synchronisatie"
#~ msgid "<b>No sync service in use</b>"
#~ msgstr "<b>Geen synchronisatie service in gebruik</b>"
#~ msgid "<big>Manual setup</big>"
#~ msgstr "<big>Handleiding opzetten</big>"
#~ msgid "Merge local and remote data (recommended)"
#~ msgstr "Voeg lokale en externe data samen (aanbevolen)"
#~ msgid "Reset original server settings"
#~ msgstr "Herstel originele server installingen"
#~ msgid "Service name"
#~ msgstr "Service naam"
#~ msgid ""
#~ "Sorry, you need an internet\n"
#~ "connection to sync."
#~ msgstr ""
#~ "Sorry, je hebt een internet\n"
#~ "verbinding nodig on te synchroniseren."
#~ msgid ""
#~ "Synchronization is not available (D-Bus service does not answer), sorry."
#~ msgstr ""
#~ "Synchronisatie is niet beschikbaar (D-Bus service niet beschikbaar), "
#~ "sorry."

View file

@ -8,7 +8,7 @@ msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-05-05 09:24+0000\n"
"PO-Revision-Date: 2010-05-05 18:35-0800\n"
"PO-Revision-Date: 2010-05-17 17:45-0800\n"
"Last-Translator: Bogdan Nosach <bogdan.nosach@ptiglobal.net>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@ -146,7 +146,7 @@ msgstr "%s - синхронизировано %ld дней назад"
#: ../src/gtk-ui/sync-ui.c:612
#: ../src/gtk-ui/sync-ui.c:726
msgid "Sync now"
msgstr "Синхронизировать сейчас"
msgstr "Синхронизировать"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "A normal sync is not possible at this time..." message.
@ -154,7 +154,7 @@ msgstr "Синхронизировать сейчас"
#: ../src/gtk-ui/sync-ui.c:618
#: ../src/gtk-ui/ui.glade.h:37
msgid "Slow sync"
msgstr "Медленная синхронизация"
msgstr "Медленная/nсинхронизация"
#: ../src/gtk-ui/sync-ui.c:619
msgid "Other options..."
@ -543,12 +543,12 @@ msgid ""
"A slow sync compares items from both sides and tries to merge them. \n"
"This may fail in some cases, leading to duplicates or lost information."
msgstr ""
"При медленной синхронизации сравниваются элементы с обеих сторон и выполняется попытка их объединения. \n"
"В некоторых случаях это может закончиться сбоем и стать причиной появлений копий данных или их утраты. "
"Медленная синхронизация сравнивает элементы с обеих сторон и выполняет их объединение. \n"
"В некоторых случаях это может вызвать появление копий данных или их утрату. "
#: ../src/gtk-ui/ui.glade.h:15
msgid "Add new device"
msgstr "Добавить новое устройство"
msgstr "Новое устройство"
#: ../src/gtk-ui/ui.glade.h:16
msgid "Add new service"
@ -569,7 +569,7 @@ msgid ""
"Change or edit\n"
"sync service"
msgstr ""
"Изменить или редактировать\n"
"Изменить\n"
"службу синхронизации"
#. close button for settings window
@ -603,7 +603,7 @@ msgid ""
"Fix a sync\n"
"emergency"
msgstr ""
справить экстренную\n"
зменить экстренную\n"
"синхронизацию"
#: ../src/gtk-ui/ui.glade.h:34

879
po/tr.po Normal file
View file

@ -0,0 +1,879 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: http://moblin.org/projects/syncevolution\n"
"POT-Creation-Date: 2010-05-19 09:19+0000\n"
"PO-Revision-Date: 2010-05-19 10:57-0500\n"
"Last-Translator: Ahmet Özgür Erdemli <dbl2010@gmail.com>\n"
"Language-Team: MeeGo Türkçe\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Poedit-Language: Turkish\n"
"X-Poedit-Country: TURKEY\n"
"X-Poedit-SourceCharset: utf-8\n"
#. TRANSLATORS: this is the application name that may be used by e.g.
#. the windowmanager
#: ../src/gtk-ui/main.c:40
#: ../src/gtk-ui/ui.glade.h:38
#: ../src/gtk-ui/sync.desktop.in.h:1
#: ../src/gnome-bluetooth/syncevolution.c:112
msgid "Sync"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:266
msgid "Contacts"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:268
msgid "Appointments"
msgstr "Randevular"
#: ../src/gtk-ui/sync-ui.c:270
#: ../src/gtk-ui/ui.glade.h:40
#, fuzzy
msgid "Tasks"
msgstr "Sık Kullanılan Görevler"
#: ../src/gtk-ui/sync-ui.c:272
msgid "Notes"
msgstr ""
#. TRANSLATORS: This is a "combination source" for syncing with devices
#. * that combine appointments and tasks. the name should match the ones
#. * used for calendar and todo above
#: ../src/gtk-ui/sync-ui.c:277
#, fuzzy
msgid "Appointments & Tasks"
msgstr "Sık Kullanılan Görevler"
#: ../src/gtk-ui/sync-ui.c:349
msgid "Starting sync"
msgstr "Senkronizasyonu başlat"
#. TRANSLATORS: slow sync confirmation dialog message. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:387
#, c-format
msgid "Do you want to slow sync with %s?"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:391
msgid "Yes, do slow sync"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:391
msgid "No, cancel sync"
msgstr "Hayır, senkronizasyonu iptal et"
#. TRANSLATORS: confirmation dialog for refresh-from-server. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:424
#, c-format
msgid "Do you want to delete all local data and replace it with data from %s? This is not usually advised."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
msgid "Yes, delete and replace"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:429
#: ../src/gtk-ui/sync-ui.c:460
#: ../src/gtk-ui/sync-ui.c:1605
msgid "No"
msgstr "Hayır"
#. TRANSLATORS: confirmation dialog for refresh-from-client. Placeholder
#. * is service/device name
#: ../src/gtk-ui/sync-ui.c:455
#, c-format
msgid "Do you want to delete all data in %s and replace it with your local data? This is not usually advised."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:487
msgid "Trying to cancel sync"
msgstr "Senkronizasyon iptal edilmeye çalışılıyor"
#: ../src/gtk-ui/sync-ui.c:529
msgid "No service or device selected"
msgstr ""
#. TRANSLATORS: This is the title on main view. Placeholder is
#. * the service name. Example: "Google - synced just now"
#: ../src/gtk-ui/sync-ui.c:537
#, c-format
msgid "%s - synced just now"
msgstr "%s - yeni senkronize edildi"
#: ../src/gtk-ui/sync-ui.c:541
#, c-format
msgid "%s - synced a minute ago"
msgstr "%s - bir dakika önce senkronize edildi"
#: ../src/gtk-ui/sync-ui.c:545
#, c-format
msgid "%s - synced %ld minutes ago"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:550
#, c-format
msgid "%s - synced an hour ago"
msgstr "%s - bir saat önce senkronize edildi"
#: ../src/gtk-ui/sync-ui.c:554
#, c-format
msgid "%s - synced %ld hours ago"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:559
#, c-format
msgid "%s - synced a day ago"
msgstr "%s - bir gün önce senkronize edildi"
#: ../src/gtk-ui/sync-ui.c:563
#, c-format
msgid "%s - synced %ld days ago"
msgstr ""
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "You've just restored a backup. The changes have not been "
#. * "synced with %s yet"
#: ../src/gtk-ui/sync-ui.c:612
#: ../src/gtk-ui/sync-ui.c:726
msgid "Sync now"
msgstr "Şimdi senkronize et"
#. TRANSLATORS: Action button in info bar in main view. Shown with e.g.
#. * "A normal sync is not possible at this time..." message.
#. * "Other options" will open Emergency view
#: ../src/gtk-ui/sync-ui.c:618
#: ../src/gtk-ui/ui.glade.h:37
msgid "Slow sync"
msgstr "Yavaş senkronizasyon"
#: ../src/gtk-ui/sync-ui.c:619
msgid "Other options..."
msgstr "Diğer seçenekler..."
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * when no service is selected. Will open configuration view
#: ../src/gtk-ui/sync-ui.c:624
msgid "Select sync service"
msgstr "Senkronizasyon servisi seçin"
#. TRANSLATORS: Action button in info bar in main view. Shown e.g.
#. * login to service fails. Will open configuration view for this service
#: ../src/gtk-ui/sync-ui.c:629
msgid "Edit service settings"
msgstr "Servis ayarlarını değiştirin"
#: ../src/gtk-ui/sync-ui.c:700
msgid "You haven't selected a sync service or device yet. Sync services let you synchronize your data between your netbook and a web service. You can also sync directly with some devices."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:722
msgid "Sync again"
msgstr "Tekrar senkronize edin"
#: ../src/gtk-ui/sync-ui.c:743
msgid "Restoring"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:745
msgid "Syncing"
msgstr ""
#. TRANSLATORS: This is for the button in main view, right side.
#. Keep line length below ~20 characters, use two lines if needed
#: ../src/gtk-ui/sync-ui.c:757
#: ../src/gtk-ui/sync-ui.c:3399
msgid "Cancel sync"
msgstr "Senkronizasyonu iptal et"
#: ../src/gtk-ui/sync-ui.c:922
msgid "Back to sync"
msgstr "Senkronizasyona geri dönün"
#. TRANSLATORS: label for checkbutton/toggle in main view.
#. * Please stick to similar length strings or break the line with
#. * "\n" if absolutely needed
#: ../src/gtk-ui/sync-ui.c:1224
msgid "Automatic sync"
msgstr "Otomatik senkronizasyon"
#. This is the expander label in emergency view. It summarizes the
#. * currently selected data sources. First placeholder is service/device
#. * name, second a comma separeted list of sources.
#. * E.g. "Affected data: Google Contacts, Appointments"
#: ../src/gtk-ui/sync-ui.c:1519
#, fuzzy, c-format
msgid "Affected data: %s %s"
msgstr "Veri isteniyor"
#: ../src/gtk-ui/sync-ui.c:1524
#, fuzzy, c-format
msgid "Affected data: none"
msgstr "Etkilenen paketler:Hiçbiri"
#. TRANSLATORS: confirmation for restoring a backup. placeholder is the
#. * backup time string defined below
#: ../src/gtk-ui/sync-ui.c:1602
#, c-format
msgid "Do you want to restore the backup from %s? All changes you have made since then will be lost."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:1605
#, fuzzy
msgid "Yes, restore"
msgstr "Evet, sil"
#. TRANSLATORS: date/time for strftime(), used in emergency view backup
#. * label. Any time format that shows date and time is good.
#: ../src/gtk-ui/sync-ui.c:1637
#, c-format
msgid "%x %X"
msgstr ""
#. TRANSLATORS: label for a backup in emergency view. Placeholder is
#. * service or device name
#: ../src/gtk-ui/sync-ui.c:1656
#, c-format
msgid "Backed up before syncing with %s"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:1673
msgid "Restore"
msgstr ""
#. TRANSLATORS: this is an explanation in Emergency view.
#. * Placeholder is a service/device name
#: ../src/gtk-ui/sync-ui.c:1780
#, c-format
msgid "A normal sync with %s is not possible at this time. You can do a slow two-way sync or start from scratch. You can also restore a backup, but a slow sync or starting from scratch will still be required before normal sync is possible."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:1790
#, c-format
msgid "If something has gone horribly wrong, you can try a slow sync, start from scratch or restore from backup."
msgstr ""
#. TRANSLATORS: These are a buttons in Emergency view. Placeholder is a
#. * service/device name. Please don't use too long lines, but feel free to
#. * use several lines.
#: ../src/gtk-ui/sync-ui.c:1799
#, c-format
msgid ""
"Delete all your local\n"
"data and replace with\n"
"data from %s"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:1805
#, c-format
msgid ""
"Delete all data on\n"
"%s and replace\n"
"with your local data"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:2267
msgid "Failed to get list of supported services from SyncEvolution"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:2321
msgid "There was a problem communicating with the sync process. Please try again later."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:2380
#, fuzzy
msgid "Restore failed"
msgstr "Bağlantı başarısız"
#: ../src/gtk-ui/sync-ui.c:2383
#: ../src/gtk-ui/sync-ui.c:3268
msgid "Sync failed"
msgstr "Senkronizasyon başarısız"
#: ../src/gtk-ui/sync-ui.c:2389
#, fuzzy
msgid "Restore complete"
msgstr "Tamam, ancak tek değil"
#: ../src/gtk-ui/sync-ui.c:2392
msgid "Sync complete"
msgstr "Senkronizasyon tamamlandı"
#: ../src/gtk-ui/sync-ui.c:2484
#, c-format
msgid "Preparing '%s'"
msgstr "'%s' hazırlanıyor"
#: ../src/gtk-ui/sync-ui.c:2487
#, c-format
msgid "Receiving '%s'"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:2490
#, c-format
msgid "Sending '%s'"
msgstr "'%s' gönderiliyor"
#: ../src/gtk-ui/sync-ui.c:2611
#, c-format
msgid "There was one remote rejection."
msgid_plural "There were %ld remote rejections."
msgstr[0] ""
msgstr[1] ""
#: ../src/gtk-ui/sync-ui.c:2616
#, c-format
msgid "There was one local rejection."
msgid_plural "There were %ld local rejections."
msgstr[0] ""
msgstr[1] ""
#: ../src/gtk-ui/sync-ui.c:2621
#, c-format
msgid "There were %ld local rejections and %ld remote rejections."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:2626
#, c-format
msgid "Last time: No changes."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:2628
#, c-format
msgid "Last time: Sent one change."
msgid_plural "Last time: Sent %ld changes."
msgstr[0] ""
msgstr[1] ""
#. This is about changes made to the local data. Not all of these
#. changes were requested by the remote server, so "applied"
#. is a better word than "received" (bug #5185).
#: ../src/gtk-ui/sync-ui.c:2636
#, c-format
msgid "Last time: Applied one change."
msgid_plural "Last time: Applied %ld changes."
msgstr[0] ""
msgstr[1] ""
#: ../src/gtk-ui/sync-ui.c:2641
#, c-format
msgid "Last time: Applied %ld changes and sent %ld changes."
msgstr ""
#. TRANSLATORS: the placeholder is a error message (hopefully)
#. * explaining the problem
#: ../src/gtk-ui/sync-ui.c:2848
#, c-format
msgid ""
"There was a problem with last sync:\n"
"%s"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:2858
#, c-format
msgid "You've just restored a backup. The changes have not been synced with %s yet"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3146
msgid "Waiting for current operation to finish..."
msgstr ""
#. TRANSLATORS: next strings are error messages.
#: ../src/gtk-ui/sync-ui.c:3180
msgid "A normal sync is not possible at this time. The server suggests a slow sync, but this might not always be what you want if both ends already have data."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3184
msgid "The sync process died unexpectedly."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3189
msgid "Password request was not answered. You can save the password in the settings to prevent the request."
msgstr ""
#. TODO use the service device name here, this is a remote problem
#: ../src/gtk-ui/sync-ui.c:3193
msgid "There was a problem processing sync request. Trying again may help."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3199
msgid "Failed to login. Could there be a problem with your username or password?"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3202
msgid "Forbidden"
msgstr ""
#. TRANSLATORS: data source means e.g. calendar or addressbook
#: ../src/gtk-ui/sync-ui.c:3208
msgid "A data source could not be found. Could there be a problem with the settings?"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3212
#, fuzzy
msgid "Remote database error"
msgstr "Dahili hata oluştu"
#. This can happen when EDS is borked, restart it may help...
#: ../src/gtk-ui/sync-ui.c:3215
msgid "There is a problem with the local database. Syncing again or rebooting may help."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3218
msgid "No space on disk"
msgstr "Diskte yer kalmadı"
#: ../src/gtk-ui/sync-ui.c:3220
#, fuzzy
msgid "Failed to process SyncML"
msgstr "Dizin okuma başarısız %s: %m"
#: ../src/gtk-ui/sync-ui.c:3222
#, fuzzy
msgid "Server authorization failed"
msgstr "Paket indirme başarısız"
#: ../src/gtk-ui/sync-ui.c:3224
#, fuzzy
msgid "Failed to parse configuration file"
msgstr "Geçici dosya açılamadı"
#: ../src/gtk-ui/sync-ui.c:3226
#, fuzzy
msgid "Failed to read configuration file"
msgstr "Geçici dosya okumak için açılamadı"
#: ../src/gtk-ui/sync-ui.c:3228
#, fuzzy
msgid "No configuration found"
msgstr "Hiçbir eşleşme bulunamadı."
#: ../src/gtk-ui/sync-ui.c:3230
#, fuzzy
msgid "No configuration file found"
msgstr "XPM başlığı bulunamadı"
#: ../src/gtk-ui/sync-ui.c:3232
msgid "Server sent bad content"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3234
msgid "Connection certificate has expired"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3236
#, fuzzy
msgid "Connection certificate is invalid"
msgstr "Temel PNM resim türü geçersiz"
#: ../src/gtk-ui/sync-ui.c:3244
msgid "We were unable to connect to the server. The problem could be temporary or there could be something wrong with the settings."
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3251
#, fuzzy
msgid "The server URL is bad"
msgstr "Adres bir _yansı listesi"
#: ../src/gtk-ui/sync-ui.c:3256
#, fuzzy
msgid "The server was not found"
msgstr "Paket bulunamadı"
#: ../src/gtk-ui/sync-ui.c:3258
#, c-format
msgid "Error %d"
msgstr "Hata: %d"
#. TRANSLATORS: password request dialog contents: title, cancel button
#. * and ok button
#: ../src/gtk-ui/sync-ui.c:3396
msgid "Password is required for sync"
msgstr ""
#: ../src/gtk-ui/sync-ui.c:3400
#, fuzzy
msgid "Sync with password"
msgstr "Şifreyi girin"
#. TRANSLATORS: password request dialog message, placeholder is service name
#: ../src/gtk-ui/sync-ui.c:3410
#, c-format
msgid "Please enter password for syncing with %s:"
msgstr ""
#. title for the buttons on the right side of main view
#: ../src/gtk-ui/ui.glade.h:2
msgid "<b>Actions</b>"
msgstr ""
#. text between the two "start from scratch" buttons in emergency view
#: ../src/gtk-ui/ui.glade.h:4
msgid "<b>or</b>"
msgstr "<b>ya da</b>"
#: ../src/gtk-ui/ui.glade.h:5
msgid "<big>Direct sync</big>"
msgstr ""
#: ../src/gtk-ui/ui.glade.h:6
msgid "<big>Network sync</big>"
msgstr "<big>Ağ senkronizasyonu</big>"
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:8
msgid "<big>Restore from backup</big>"
msgstr ""
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:10
msgid "<big>Slow sync</big>"
msgstr ""
#. a title in emergency view
#: ../src/gtk-ui/ui.glade.h:12
msgid "<big>Start from scratch</big>"
msgstr ""
#: ../src/gtk-ui/ui.glade.h:13
msgid ""
"A slow sync compares items from both sides and tries to merge them. \n"
"This may fail in some cases, leading to duplicates or lost information."
msgstr ""
#: ../src/gtk-ui/ui.glade.h:15
msgid "Add new device"
msgstr "Yeni cihaz ekle"
#: ../src/gtk-ui/ui.glade.h:16
msgid "Add new service"
msgstr "Yeni servis ekle"
#. explanation of "Restore backup" function
#: ../src/gtk-ui/ui.glade.h:18
msgid "Backups are made before every time we Sync. Choose a backup to restore. Any changes you have made since then will be lost."
msgstr ""
#: ../src/gtk-ui/ui.glade.h:19
msgid "Calendar"
msgstr "Takvim"
#. Button in main view, right side. Keep to below 20 chars per line, feel free to use two lines
#: ../src/gtk-ui/ui.glade.h:21
msgid ""
"Change or edit\n"
"sync service"
msgstr ""
#. close button for settings window
#: ../src/gtk-ui/ui.glade.h:24
msgid "Close"
msgstr "Kapat"
#: ../src/gtk-ui/ui.glade.h:25
msgid ""
"Delete all data on Zyb \n"
"and replace with your\n"
"local information"
msgstr ""
#: ../src/gtk-ui/ui.glade.h:28
msgid ""
"Delete all your local\n"
"information and replace\n"
"with data from Zyb"
msgstr ""
#. button in main view, right side. Keep length to 20 characters or so, use two lines if needed
#: ../src/gtk-ui/ui.glade.h:32
msgid ""
"Fix a sync\n"
"emergency"
msgstr ""
#: ../src/gtk-ui/ui.glade.h:34
msgid ""
"If you don't see your service above but know that your sync provider uses SyncML\n"
"you can setup a service manually."
msgstr ""
#: ../src/gtk-ui/ui.glade.h:36
msgid "Settings"
msgstr "Ayarlar"
#: ../src/gtk-ui/ui.glade.h:39
msgid "Sync Emergency"
msgstr ""
#: ../src/gtk-ui/ui.glade.h:41
msgid ""
"To sync you'll need a network connection and an account with a sync service.\n"
"We support the following services: "
msgstr ""
#: ../src/gtk-ui/ui.glade.h:43
msgid "Use Bluetooth to Sync your data from one device to another."
msgstr ""
#: ../src/gtk-ui/ui.glade.h:44
msgid "You will need to add Bluetooth devices before they can be synced."
msgstr ""
#: ../src/gtk-ui/sync.desktop.in.h:2
#: ../src/gtk-ui/sync-gtk.desktop.in.h:2
msgid "Up to date"
msgstr "Güncel"
#: ../src/gtk-ui/sync-gtk.desktop.in.h:1
msgid "Sync (GTK)"
msgstr "Seknronize et (GTK)"
#: ../src/gtk-ui/sync-config-widget.c:78
msgid "ScheduleWorld enables you to keep your contacts, events, tasks, and notes in sync."
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:81
msgid "Google Sync can backup and synchronize your contacts with your Gmail contacts."
msgstr ""
#. TRANSLATORS: Please include the word "demo" (or the equivalent in
#. your language): Funambol is going to be a 90 day demo service
#. in the future
#: ../src/gtk-ui/sync-config-widget.c:87
msgid "Backup your contacts and calendar. Sync with a single click, anytime, anywhere (DEMO)."
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:90
msgid "Mobical Backup and Restore service allows you to securely backup your personal mobile data for free."
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:93
msgid "ZYB is a simple way for people to store and share mobile information online."
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:96
msgid "Memotoo lets you access your personal data from any computer connected to the Internet."
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:192
#, fuzzy
msgid "Sorry, failed to save the configuration"
msgstr "TIFF resmi kaydedilemedi"
#: ../src/gtk-ui/sync-config-widget.c:381
msgid "Service must have a name and server URL"
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:422
#, c-format
msgid "Do you want to reset the settings for %s? This will not remove any synced information on either end."
msgstr ""
#. TRANSLATORS: buttons in reset-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:426
#, fuzzy
msgid "Yes, reset"
msgstr "Evet, sil"
#: ../src/gtk-ui/sync-config-widget.c:427
#: ../src/gtk-ui/sync-config-widget.c:438
#, fuzzy
msgid "No, keep settings"
msgstr "Yeni bağlantı ayarları"
#: ../src/gtk-ui/sync-config-widget.c:432
#, c-format
msgid "Do you want to delete the settings for %s? This will not remove any synced information on either end but it will remove these settings."
msgstr ""
#. TRANSLATORS: buttons in delete-service warning dialog
#: ../src/gtk-ui/sync-config-widget.c:437
msgid "Yes, delete"
msgstr "Evet, sil"
#: ../src/gtk-ui/sync-config-widget.c:467
#, fuzzy
msgid "Reset settings"
msgstr "Ağ ayarları"
#: ../src/gtk-ui/sync-config-widget.c:470
#, fuzzy
msgid "Delete settings"
msgstr "Ağ ayarları"
#: ../src/gtk-ui/sync-config-widget.c:480
#, fuzzy
msgid "Save and use"
msgstr "Önceki yazıtipini kullan"
#: ../src/gtk-ui/sync-config-widget.c:483
msgid ""
"Save and replace\n"
"current service"
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:493
#, fuzzy
msgid "Stop using device"
msgstr "FCP cihazı ekle"
#: ../src/gtk-ui/sync-config-widget.c:496
#, fuzzy
msgid "Stop using service"
msgstr "3G servisi seçin"
#. TRANSLATORS: label for an entry in service configuration form.
#. * Placeholder is a source name.
#. * Example: "Appointments URI"
#: ../src/gtk-ui/sync-config-widget.c:679
#, fuzzy, c-format
msgid "%s URI"
msgstr "Kaynak URI"
#. TRANSLATORS: toggles in service configuration form, placeholder is service
#. * or device name
#: ../src/gtk-ui/sync-config-widget.c:854
#, fuzzy, c-format
msgid "Send changes to %s"
msgstr "%s çalıştırılamadı: %s"
#: ../src/gtk-ui/sync-config-widget.c:859
#, fuzzy, c-format
msgid "Receive changes from %s"
msgstr "Sık Kullanılanlardan Çıkart"
#: ../src/gtk-ui/sync-config-widget.c:875
msgid "<b>Sync</b>"
msgstr "<b>Senkronizasyon</b>"
#. TRANSLATORS: label of a entry in service configuration
#: ../src/gtk-ui/sync-config-widget.c:891
#, fuzzy
msgid "Server address"
msgstr "IPv6 adresi:"
#. TRANSLATORS: explanation before a device template combobox.
#. * Placeholder is a device name like 'Nokia N85' or 'Syncevolution
#. * Client'
#: ../src/gtk-ui/sync-config-widget.c:967
#, c-format
msgid "This device looks like it might be a '%s'. If this is not correct, please take a look at the list of supported devices and pick yours if it is listed"
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:973
msgid "We don't know what this device is exactly. Please take a look at the list of supported devices and pick yours if it is listed"
msgstr ""
#: ../src/gtk-ui/sync-config-widget.c:1126
#, fuzzy, c-format
msgid "%s - Bluetooth device"
msgstr "RAID Cihazı"
#. TRANSLATORS: service title for services that are not based on a
#. * template in service list, the placeholder is the name of the service
#: ../src/gtk-ui/sync-config-widget.c:1132
#, fuzzy, c-format
msgid "%s - manually setup"
msgstr "Adres kurulumu"
#. TRANSLATORS: link button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1807
#, fuzzy
msgid "Launch website"
msgstr "PackageKit Sitesi"
#. TRANSLATORS: button in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1816
#, fuzzy
msgid "Setup now"
msgstr "Şimdi Bul"
#. TRANSLATORS: labels of entries in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1912
msgid "Username"
msgstr "Kullanıcı Adı"
#: ../src/gtk-ui/sync-config-widget.c:1927
msgid "Password"
msgstr "Şifre"
#. TRANSLATORS: warning in service configuration form for people
#. who have modified the configuration via other means.
#: ../src/gtk-ui/sync-config-widget.c:1950
msgid "Current configuration is more complex than what can be shown here. Changes to sync mode or synced data types will overwrite that configuration."
msgstr ""
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1969
#, fuzzy
msgid "Hide server settings"
msgstr "Yeni bağlantı ayarları"
#. TRANSLATORS: this is the epander label for server settings
#. in service configuration form
#: ../src/gtk-ui/sync-config-widget.c:1989
#, fuzzy
msgid "Show server settings"
msgstr "Yeni bağlantı ayarları"
#: ../src/gnome-bluetooth/syncevolution.c:110
#, fuzzy
msgid "Sync in the Sync application"
msgstr "Oturumu Aç"
#: ../src/syncevo-dbus-server.cpp:5667
#, fuzzy, c-format
msgid "%s is syncing"
msgstr "Üzgünüz, %s çalışmıyor"
#: ../src/syncevo-dbus-server.cpp:5668
#, c-format
msgid "We have just started to sync your computer with the %s sync service."
msgstr ""
#. if sync is successfully started and done
#: ../src/syncevo-dbus-server.cpp:5682
#, fuzzy, c-format
msgid "%s sync complete"
msgstr "Tamam, ancak tek değil"
#: ../src/syncevo-dbus-server.cpp:5683
#, c-format
msgid "We have just finished syncing your computer with the %s sync service."
msgstr ""
#. if sync is successfully started and has errors, or not started successful with a fatal problem
#: ../src/syncevo-dbus-server.cpp:5688
msgid "Sync problem."
msgstr "Senkronizasyon problemi."
#: ../src/syncevo-dbus-server.cpp:5689
msgid "Sorry, there's a problem with your sync that you need to attend to."
msgstr ""
#: ../src/syncevo-dbus-server.cpp:5762
#, fuzzy
msgid "View"
msgstr "Dokümanları görüntüle"
#. Use "default" as ID because that is what mutter-moblin
#. recognizes: it then skips the action instead of adding it
#. in addition to its own "Dismiss" button (always added).
#: ../src/syncevo-dbus-server.cpp:5766
#, fuzzy
msgid "Dismiss"
msgstr "Bırak"

File diff suppressed because it is too large Load diff

View file

@ -35,7 +35,12 @@ SUBDIRS += $(SYNTHESIS_SUBDIR_INCLUDES)
endif
if COND_GUI
SUBDIRS += dbus gtk-ui
else
if COND_DOC
SUBDIRS += dbus
endif
endif
DIST_SUBDIRS = gdbus dbus syncevo $(BACKENDS) gtk-ui gnome-bluetooth synthesis-includes
AM_CPPFLAGS = $(SUBDIRS:%=-I$(srcdir)/%) -I$(srcdir)/../test -I$(top_srcdir) $(BACKEND_CPPFLAGS)
@ -212,22 +217,12 @@ nodist_client_test_SOURCES = ../test/test.cpp
CLIENT_LIB_TEST_FILES = \
testcases/lcs/file1.txt \
testcases/lcs/file2.txt \
testcases/templates/clients/SyncEvolution/sources/addressbook/config.ini \
testcases/templates/clients/SyncEvolution/sources/memo/config.ini \
testcases/templates/clients/SyncEvolution/sources/todo/config.ini \
testcases/templates/clients/SyncEvolution/sources/calendar/config.ini \
testcases/templates/clients/SyncEvolution/template.ini \
testcases/templates/clients/SyncEvolution/config.ini \
testcases/templates/clients/phone/nokia/S40/7210c/sources/addressbook/config.ini \
testcases/templates/clients/phone/nokia/S40/7210c/sources/memo/config.ini \
testcases/templates/clients/phone/nokia/S40/7210c/sources/todo/config.ini \
testcases/templates/clients/phone/nokia/S40/7210c/sources/calendar/config.ini \
testcases/templates/clients/phone/nokia/S40/7210c/sources/calendar+todo/config.ini \
testcases/templates/clients/phone/nokia/S40/7210c/template.ini \
testcases/templates/clients/phone/nokia/S40/7210c/config.ini \
testcases/templates/clients/SyncEvolution.ini \
testcases/templates/clients/phone/nokia/S40/7210c.ini \
testcases/vcard21.vcf \
testcases/vcard30.vcf \
testcases/ical20.ics \
testcases/ical20.ics.local \
testcases/imemo20.ics \
testcases/itodo20.ics

View file

@ -429,9 +429,30 @@ EvolutionCalendarSource::InsertItemResult EvolutionCalendarSource::insertItem(co
ItemID id(newluid);
bool isParent = id.m_rid.empty();
// ensure that the component has the right UID
if (update && !id.m_uid.empty()) {
icalcomponent_set_uid(subcomp, id.m_uid.c_str());
// ensure that the component has the right UID and
// RECURRENCE-ID
if (update) {
if (!id.m_uid.empty()) {
icalcomponent_set_uid(subcomp, id.m_uid.c_str());
}
if (!id.m_rid.empty()) {
// Reconstructing the RECURRENCE-ID is non-trivial,
// because our luid only contains the date-time, but
// not the time zone. Only do the work if the event
// really doesn't have a RECURRENCE-ID.
struct icaltimetype rid;
rid = icalcomponent_get_recurrenceid(subcomp);
if (icaltime_is_null_time(rid)) {
// Preserve the original RECURRENCE-ID, including
// timezone, no matter what the update contains
// (might have wrong timezone or UTC).
eptr<icalcomponent> orig(retrieveItem(id));
icalproperty *orig_rid = icalcomponent_get_first_property(orig, ICAL_RECURRENCEID_PROPERTY);
if (orig_rid) {
icalcomponent_add_property(subcomp, icalproperty_new_clone(orig_rid));
}
}
}
}
if (isParent) {

View file

@ -2,6 +2,7 @@ lib_LTLIBRARIES = libsyncevo-dbus.la
SUBDIRS = interfaces
if COND_GUI
AM_CPPFLAGS = -I$(top_srcdir) -Iinterfaces $(SYNTHESIS_CFLAGS)
DISTCLEANFILES = syncevo-dbus.pc
@ -40,3 +41,4 @@ syncevo_dbus_headers = \
libsyncevo_dbus_includedir = $(includedir)/syncevo-dbus
libsyncevo_dbus_include_HEADERS = \
$(syncevo_dbus_headers)
endif

View file

@ -1,14 +1,38 @@
doc_DATA =
%.xml: %-full.xml
$(XSLT) -o $@ $(srcdir)/spec-strip-docs.xsl $<
if COND_DOC
%-doc.xml: %-full.xml
$(XSLT) -o $@ $(srcdir)/spec-to-docbook.xsl $<
BUILT_SOURCES = syncevo-marshal.c syncevo-marshal.h \
syncevo-dbus-api-doc.xml: syncevo-server-doc.xml syncevo-session-doc.xml syncevo-connection-doc.xml
echo '<?xml version="1.0" encoding="UTF-8"?>' >$@
echo '<reference><title>SyncEvolution D-Bus API $(VERSION)</title>' >>$@
for xml in $+; do \
tail -n +2 $$xml >>$@; \
done
echo '</reference>' >>$@
syncevo-dbus-api-doc.html: syncevo-dbus-api-doc.xml
$(XSLT) -o $@ http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl $<
doc_DATA += syncevo-dbus-api-doc.html
endif
BUILT_SOURCES =
if COND_GUI
BUILT_SOURCES += syncevo-marshal.c syncevo-marshal.h \
syncevo-server-bindings.h syncevo-connection-bindings.h syncevo-session-bindings.h \
syncevo-server-glue.h syncevo-connection-glue.h syncevo-session-glue.h \
syncevo-server-doc.xml syncevo-connection-doc.xml syncevo-session-doc.xml \
syncevo-server.xml syncevo-connection.xml syncevo-session.xml
endif
if COND_DOC
BUILT_SOURCES += syncevo-server-doc.xml syncevo-connection-doc.xml syncevo-session-doc.xml \
syncevo-dbus-api-doc.xml syncevo-dbus-api-doc.html
endif
CLEANFILES = $(BUILT_SOURCES) stamp-syncevo-dbus-glue.h
EXTRA_DIST = syncevo-marshal.list \
@ -18,6 +42,7 @@ EXTRA_DIST = syncevo-marshal.list \
syncevo-server-full.xml \
syncevo-session-full.xml
if COND_GUI
%-bindings.h: stamp-%-bindings.h
@true
stamp-%-bindings.h: %.xml
@ -39,3 +64,4 @@ stamp-%-glue.h: %.xml
&& (cmp -s xgen-$(@F) $(@F:stamp-%=%) || cp xgen-$(@F) $(@F:stamp-%=%)) \
&& rm -f xgen-$(@F) \
&& echo timestamp > $(@F)
endif

View file

@ -0,0 +1,9 @@
The documentation of .xml files follows dbus-introspect-docs.dtd
and uses spec-to-docbook.xsl from William Jon McCann <jmccann@redhat.com>
to convert the documentation into DocBook and then HTML.
See http://cgit.freedesktop.org/ConsoleKit/tree/doc/dbus for latest (?)
copy of the script and http://cgit.freedesktop.org/ConsoleKit/tree/src
for some examples.

View file

@ -0,0 +1,32 @@
<!-- DTD for D-Bus Introspection Documentation -->
<!ELEMENT doc (summary?,description?,errors?,permission?,since?,deprecated,seealso?)>
<!ELEMENT summary (#PCDATA|ref)*>
<!ELEMENT description (#PCDATA|para|example)*>
<!ELEMENT errors (error)*>
<!ELEMENT permission (#PCDATA|ref|para)*>
<!ELEMENT since EMPTY>
<!ATTLIST since version CDATA #REQUIRED>
<!ELEMENT deprecated (#PCDATA|ref)>
<!ATTLIST deprecated version CDATA #REQUIRED>
<!ATTLIST deprecated instead CDATA #REQUIRED>
<!ELEMENT seealso (ref+)>
<!ELEMENT error (#PCDATA|para)*>
<!ATTLIST error name CDATA #REQUIRED>
<!ELEMENT para (#PCDATA|example|code|list|ref)*>
<!ELEMENT example (#PCDATA|para|code|ref)*>
<!ATTLIST language (c|glib|python|shell) #REQUIRED>
<!ATTLIST title CDATA #IMPLIED>
<!ELEMENT list (item*)>
<!ATTLIST list type (bullet|number) #REQUIRED>
<!ELEMENT item (term|definition)*>
<!ELEMENT term (#PCDATA|ref)*>
<!ELEMENT definition (#PCDATA|para)*>
<!ELEMENT code (#PCDATA)>
<!ATTLIST code lang CDATA #IMPLIED>
<!ELEMENT ref CDATA>
<!ATTLIST ref type (parameter|arg|signal|method|interface) #REQUIRED>
<!ATTLIST ref to CDATA #REQUIRED>

View file

@ -33,6 +33,7 @@
</node>
</xsl:template>
<xsl:template match="annotation"/>
<xsl:template match="doc:*"/>
<xsl:template match="text()"/>
</xsl:stylesheet>

View file

@ -9,19 +9,9 @@
-->
<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:template match="/node">
<reference>
<xsl:attribute name="id"><xsl:value-of select="@doc:id"/></xsl:attribute>
<title>
<xsl:value-of select="doc:doc/doc:summary"/>
</title>
<xsl:apply-templates select="interface"/>
</reference>
</xsl:template>
<xsl:template match="/">
<xsl:template match="interface">
<xsl:variable name="interface" select="@name"/>
<xsl:variable name="interface" select="//interface/@name"/>
<xsl:variable name="basename">
<xsl:call-template name="interface-basename">
<xsl:with-param name="str" select="$interface"/>
@ -30,11 +20,11 @@
<refentry><xsl:attribute name="id"><xsl:value-of select="$basename"/></xsl:attribute>
<refmeta>
<refentrytitle role="top_of_page"><xsl:value-of select="@name"/></refentrytitle>
<refentrytitle role="top_of_page"><xsl:value-of select="//interface/@name"/></refentrytitle>
</refmeta>
<refnamediv>
<refname><xsl:value-of select="@name"/></refname>
<refname><xsl:value-of select="//interface/@name"/></refname>
<refpurpose><xsl:value-of select="$basename"/> interface</refpurpose>
</refnamediv>
@ -47,38 +37,52 @@
</synopsis>
</refsynopsisdiv>
<refsect1 role="signal_proto">
<title role="signal_proto.title">Signals</title>
<synopsis>
<xsl:call-template name="signals-synopsis">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</synopsis>
</refsect1>
<xsl:choose>
<xsl:when test="count(///signal) > 0">
<refsect1 role="signal_proto">
<title role="signal_proto.title">Signals</title>
<synopsis>
<xsl:call-template name="signals-synopsis">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</synopsis>
</refsect1>
</xsl:when>
</xsl:choose>
<refsect1 role="impl_interfaces">
<title role="impl_interfaces.title">Implemented Interfaces</title>
<para>
<xsl:value-of select="$interface"/> implements
Objects implementing <xsl:value-of select="$interface"/> also implements
org.freedesktop.DBus.Introspectable,
org.freedesktop.DBus.Properties
</para>
</refsect1>
<refsect1 role="properties">
<title role="properties.title">Properties</title>
<synopsis>
<xsl:call-template name="properties-synopsis">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</synopsis>
</refsect1>
<xsl:choose>
<xsl:when test="count(///property) > 0">
<refsect1 role="properties">
<title role="properties.title">Properties</title>
<synopsis>
<xsl:call-template name="properties-synopsis">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</synopsis>
</refsect1>
</xsl:when>
</xsl:choose>
<refsect1 role="desc">
<title role="desc.title">Description</title>
<para>
<xsl:apply-templates select="doc:doc"/>
</para>
<xsl:choose>
<xsl:when test="count(//interface/doc:doc) > 0">
<xsl:apply-templates select="//interface/doc:doc"/>
</xsl:when>
<xsl:otherwise>
<para>
</para>
</xsl:otherwise>
</xsl:choose>
</refsect1>
<refsect1 role="details">
@ -88,19 +92,27 @@
</xsl:call-template>
</refsect1>
<refsect1 role="signals">
<title role="signals.title">Signal Details</title>
<xsl:call-template name="signal-details">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</refsect1>
<xsl:choose>
<xsl:when test="count(///signal) > 0">
<refsect1 role="signals">
<title role="signals.title">Signal Details</title>
<xsl:call-template name="signal-details">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</refsect1>
</xsl:when>
</xsl:choose>
<refsect1 role="property_details">
<title role="property_details.title">Property Details</title>
<xsl:call-template name="property-details">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</refsect1>
<xsl:choose>
<xsl:when test="count(///property) > 0">
<refsect1 role="property_details">
<title role="property_details.title">Property Details</title>
<xsl:call-template name="property-details">
<xsl:with-param name="basename" select="$basename"/>
</xsl:call-template>
</refsect1>
</xsl:when>
</xsl:choose>
</refentry>
</xsl:template>
@ -109,13 +121,17 @@
<xsl:template name="property-doc">
<xsl:apply-templates select="doc:doc/doc:description"/>
<variablelist role="params">
<xsl:for-each select="arg">
<xsl:choose>
<xsl:when test="count(arg) > 0">
<variablelist role="params">
<xsl:for-each select="arg">
<varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
<listitem><simpara><xsl:value-of select="doc:doc/doc:summary"/></simpara></listitem>
</varlistentry>
</xsl:for-each>
</variablelist>
</xsl:for-each>
</variablelist>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select="doc:doc/doc:since"/>
<xsl:apply-templates select="doc:doc/doc:deprecated"/>
@ -131,15 +147,13 @@
<xsl:with-param name="set" select="@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="property">
<xsl:for-each select="///property">
<refsect2>
<title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$basename"/>:<xsl:value-of select="@name"/></xsl:attribute></anchor>The "<xsl:value-of select="@name"/>" property</title>
<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$basename"/></secondary></indexterm>
<programlisting>'<xsl:value-of select="@name"/>'<xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="2"/></xsl:call-template>
<xsl:call-template name="property-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/></xsl:call-template></programlisting>
<xsl:call-template name="property-doc"/>
</refsect2>
</xsl:for-each>
</xsl:template>
@ -147,13 +161,17 @@
<xsl:template name="signal-doc">
<xsl:apply-templates select="doc:doc/doc:description"/>
<variablelist role="params">
<xsl:for-each select="arg">
<xsl:choose>
<xsl:when test="count(arg) > 0">
<variablelist role="params">
<xsl:for-each select="arg">
<varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
<listitem><simpara><xsl:value-of select="doc:doc/doc:summary"/></simpara></listitem>
</varlistentry>
</xsl:for-each>
</variablelist>
</xsl:for-each>
</variablelist>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select="doc:doc/doc:since"/>
<xsl:apply-templates select="doc:doc/doc:deprecated"/>
@ -168,14 +186,12 @@
<xsl:with-param name="set" select="@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="signal">
<xsl:for-each select="///signal">
<refsect2>
<title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$basename"/>::<xsl:value-of select="@name"/></xsl:attribute></anchor>The <xsl:value-of select="@name"/> signal</title>
<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$basename"/></secondary></indexterm>
<programlisting><xsl:value-of select="@name"/> (<xsl:call-template name="signal-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/><xsl:with-param name="prefix" select="."/></xsl:call-template>)</programlisting>
<xsl:call-template name="signal-doc"/>
</refsect2>
</xsl:for-each>
</xsl:template>
@ -186,8 +202,33 @@
</programlisting>
</xsl:template>
<xsl:template match="doc:tt">
<literal>
<xsl:apply-templates />
</literal>
</xsl:template>
<xsl:template match="doc:i">
<emphasis>
<xsl:apply-templates />
</emphasis>
</xsl:template>
<xsl:template match="doc:b">
<emphasis role="bold">
<xsl:apply-templates />
</emphasis>
</xsl:template>
<xsl:template match="doc:ulink">
<ulink>
<xsl:attribute name="url"><xsl:value-of select="@url"/></xsl:attribute>
<xsl:value-of select="."/>
</ulink>
</xsl:template>
<xsl:template match="doc:summary">
<!-- by default don't display -->
<xsl:apply-templates />
</xsl:template>
<xsl:template match="doc:example">
@ -196,6 +237,41 @@
</informalexample>
</xsl:template>
<xsl:template name="listitems-do-term">
<xsl:param name="str"/>
<xsl:choose>
<xsl:when test="string-length($str) > 0">
<emphasis role="bold"><xsl:value-of select="$str"/>: </emphasis>
</xsl:when>
</xsl:choose>
</xsl:template>
<xsl:template name="do-listitems">
<xsl:for-each select="doc:item">
<listitem><para>
<xsl:call-template name="listitems-do-term"><xsl:with-param name="str" select="doc:term"/></xsl:call-template>
<xsl:apply-templates select="doc:definition"/>
</para></listitem>
</xsl:for-each>
</xsl:template>
<xsl:template match="doc:list">
<para>
<xsl:choose>
<xsl:when test="contains(@type,'number')">
<orderedlist>
<xsl:call-template name="do-listitems"/>
</orderedlist>
</xsl:when>
<xsl:otherwise>
<itemizedlist>
<xsl:call-template name="do-listitems"/>
</itemizedlist>
</xsl:otherwise>
</xsl:choose>
</para>
</xsl:template>
<xsl:template match="doc:para">
<para>
<xsl:apply-templates />
@ -259,6 +335,12 @@ instead.</para></warning>
</para>
</xsl:template>
<xsl:template match="doc:errors">
<para role="errors">
<xsl:apply-templates />
</para>
</xsl:template>
<xsl:template match="doc:seealso">
<para>
See also:
@ -285,9 +367,6 @@ See also:
<xsl:when test="contains($type,'interface')">
<link><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute><xsl:value-of select="$val"/></link>
</xsl:when>
<xsl:when test="contains($type,'xref')">
<xref><xsl:attribute name="linkend"><xsl:value-of select="$to"/></xsl:attribute></xref>
</xsl:when>
</xsl:choose>
</xsl:template>
@ -302,20 +381,46 @@ See also:
<xsl:template name="method-doc">
<xsl:apply-templates select="doc:doc/doc:description"/>
<variablelist role="params">
<xsl:for-each select="arg">
<xsl:choose>
<xsl:when test="count(arg) > 0">
<variablelist role="params">
<xsl:for-each select="arg">
<varlistentry><term><parameter><xsl:value-of select="@name"/></parameter>:</term>
<listitem>
<para><xsl:value-of select="doc:doc/doc:summary"/></para>
<xsl:apply-templates select="doc:doc/doc:description"/>
</listitem>
<listitem><simpara><xsl:apply-templates select="doc:doc/doc:summary"/></simpara></listitem>
</varlistentry>
</xsl:for-each>
</variablelist>
</xsl:for-each>
</variablelist>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select="doc:doc/doc:since"/>
<xsl:apply-templates select="doc:doc/doc:deprecated"/>
<xsl:apply-templates select="doc:doc/doc:permission"/>
<xsl:choose>
<xsl:when test="count(doc:doc/doc:errors) > 0">
<note>
<title>Errors</title>
<variablelist role="errors">
<xsl:for-each select="doc:doc/doc:errors/doc:error">
<varlistentry>
<term><parameter><xsl:value-of select="@name"/></parameter>:</term>
<listitem><simpara><xsl:apply-templates select="."/></simpara></listitem>
</varlistentry>
</xsl:for-each>
</variablelist>
</note>
</xsl:when>
</xsl:choose>
<xsl:choose>
<xsl:when test="count(doc:doc/doc:permission) > 0">
<note>
<title>Permissions</title>
<xsl:apply-templates select="doc:doc/doc:permission"/>
</note>
</xsl:when>
</xsl:choose>
<xsl:apply-templates select="doc:doc/doc:seealso"/>
</xsl:template>
@ -326,15 +431,13 @@ See also:
<xsl:with-param name="set" select="@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="method">
<xsl:for-each select="///method">
<refsect2>
<title><anchor role="function"><xsl:attribute name="id"><xsl:value-of select="$basename"/>.<xsl:value-of select="@name"/></xsl:attribute></anchor><xsl:value-of select="@name"/> ()</title>
<indexterm><primary><xsl:value-of select="@name"/></primary><secondary><xsl:value-of select="$basename"/></secondary></indexterm>
<programlisting><xsl:value-of select="@name"/> (<xsl:call-template name="method-args"><xsl:with-param name="indent" select="string-length(@name) + 2"/><xsl:with-param name="prefix" select="."/></xsl:call-template>)</programlisting>
<xsl:call-template name="method-doc"/>
</refsect2>
</xsl:for-each>
</xsl:template>
@ -343,10 +446,10 @@ See also:
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="property/@name"/>
<xsl:with-param name="set" select="///property/@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="property">
<xsl:for-each select="///property">
<link><xsl:attribute name="linkend"><xsl:value-of select="$basename"/>:<xsl:value-of select="@name"/></xsl:attribute>'<xsl:value-of select="@name"/>'</link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template> <xsl:call-template name="property-args"><xsl:with-param name="indent" select="$longest + 2"/></xsl:call-template>
</xsl:for-each>
</xsl:template>
@ -356,11 +459,11 @@ See also:
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="signal/@name"/>
<xsl:with-param name="set" select="///signal/@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="signal">
<link><xsl:attribute name="linkend"><xsl:value-of select="$basename"/>::<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template>(<xsl:call-template name="signal-args"><xsl:with-param name="indent" select="$longest + 2"/><xsl:with-param name="prefix" select="signal"/></xsl:call-template>)
<xsl:for-each select="///signal">
<link><xsl:attribute name="linkend"><xsl:value-of select="$basename"/>::<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template>(<xsl:call-template name="signal-args"><xsl:with-param name="indent" select="$longest + 2"/><xsl:with-param name="prefix" select="///signal"/></xsl:call-template>)
</xsl:for-each>
</xsl:template>
@ -369,11 +472,11 @@ See also:
<xsl:param name="basename"/>
<xsl:variable name="longest">
<xsl:call-template name="find-longest">
<xsl:with-param name="set" select="method/@name"/>
<xsl:with-param name="set" select="///method/@name"/>
</xsl:call-template>
</xsl:variable>
<xsl:for-each select="method">
<link><xsl:attribute name="linkend"><xsl:value-of select="$basename"/>.<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template>(<xsl:call-template name="method-args"><xsl:with-param name="indent" select="$longest + 2"/><xsl:with-param name="prefix" select="method"/></xsl:call-template>)
<xsl:for-each select="///method">
<link><xsl:attribute name="linkend"><xsl:value-of select="$basename"/>.<xsl:value-of select="@name"/></xsl:attribute><xsl:value-of select="@name"/></link><xsl:call-template name="pad-spaces"><xsl:with-param name="width" select="$longest - string-length(@name) + 1"/></xsl:call-template>(<xsl:call-template name="method-args"><xsl:with-param name="indent" select="$longest + 2"/><xsl:with-param name="prefix" select="///method"/></xsl:call-template>)
</xsl:for-each>
</xsl:template>

View file

@ -34,30 +34,33 @@
<doc:para>
Method calls may fail with the following errors:
"org.syncevolution.Exception" - catch-all error condition.
"org.syncevolution.NoSuchConfig" - server configuration name is invalid
"org.syncevolution.NoSuchSource" - source name is invalid
"org.syncevolution.SourceUnusable" - CheckSource() may return this
if source is not usable (for various possible reasons).
"org.syncevolution.InvalidCall" - a call is (perhaps no longer) allowed
or suitable in the current situation, like Detach() when the client
is not attached.
<doc:list>
<doc:item><doc:term>org.syncevolution.Exception</doc:term><doc:definition>catch-all error condition.</doc:definition></doc:item>
<doc:item><doc:term>org.syncevolution.NoSuchConfig</doc:term><doc:definition>server configuration name is invalid</doc:definition></doc:item>
<doc:item><doc:term>org.syncevolution.NoSuchSource</doc:term><doc:definition>source name is invalid</doc:definition></doc:item>
<doc:item><doc:term>org.syncevolution.SourceUnusable</doc:term><doc:definition>CheckSource() may return this if source is not usable (for various possible reasons).</doc:definition></doc:item>
<doc:item><doc:term>org.syncevolution.InvalidCall</doc:term><doc:definition>a call is (perhaps no longer) allowed or suitable in the current situation, like Detach() when the client is not attached.</doc:definition></doc:item>
</doc:list>
</doc:para>
</doc:doc>
<method name="Attach">
<doc:doc>
<doc:description>
<doc:para>
With no client attached, the server will shut down after a
certain period of inactivity. Attaching to the server
prevents that. Attaching is not necessary to invoke methods.
The main purpose is to keep the server running while clients
are around and listen for signals, in particular the
Presence signal.
</doc:para>
<doc:para>
Each attach has to be matched by one detach, so that one client has
the capability to attach to the server many times in different
modules. The behavior of calling Detach() more often than Attach()
is undefined.
</doc:para>
</doc:description>
</doc:doc>
</method>
@ -73,37 +76,68 @@
<method name ="GetConfigs">
<doc:doc><doc:description>
<doc:para>
Get an array of all configured servers (or templates)
</doc:para>
<doc:para>
In getting templates mode, the dbus server checks all paired devices
from bluez daemon and filters them by SyncML capability. Then it
looks through built-in templates and returns their matched templates.
Multiple templates might be created for each device, with different
matching scores(range: 1-5). Scores represent how well the device name
matches a template. The higher, the better.
</doc:para>
<doc:para>
A template might be used to help creation for multiple devices. Thus template
names must be reset in a naming rule. They are re-named with 'Bluetooth_&lt;
mac address&gt;_&lt;sequence number&gt;'. Here 'mac address' is the mac
address of the Bluetooth device and 'sequence number' enumerates all the
matched templates created for the device.
</doc:para>
<doc:para>
When retrieving the templates with GetConfig(), several additional
properties will be returned:
description - the description for the template (non-localized string)
score - the calculated score based on the device name and template (1-5, 5 is best)
deviceName - the device name that the template is for (copied verbatim from that device)
templateName - string identifying the class of devices the templates works for,
like "Nokia S40"; meant to be shown to users; optional, fall back
to first entry in fingerPrint if not set
fingerPrint - comma separated list of devices which work with this template,
typically in "vendor model" format; can be used by D-Bus
clients to re-match with user provided device information
<doc:list>
<doc:item>
<doc:term>description</doc:term>
<doc:definition>the description for the template
(non-localized string)</doc:definition>
</doc:item>
<doc:item>
<doc:term>score</doc:term>
<doc:definition>the calculated score based on the device
name and template (1-5, 5 is best)</doc:definition>
</doc:item>
<doc:item>
<doc:term>deviceName</doc:term>
<doc:definition>the device name that the template is for
(copied verbatim from that device)</doc:definition>
</doc:item>
<doc:item>
<doc:term>templateName</doc:term>
<doc:definition>string identifying the class of devices
the templates works for, like "Nokia S40"; meant to be
shown to users; optional, fall back to first entry in
fingerPrint if not set</doc:definition>
</doc:item>
<doc:item>
<doc:term>fingerPrint</doc:term>
<doc:definition>comma separated list of devices which
work with this template, typically in "vendor model"
format; can be used by D-Bus clients to re-match with
user provided device information</doc:definition>
</doc:item>
</doc:list>
</doc:para>
<doc:para>
Together with these changes, a property value is changed: 'syncURL' in the
configuration is replaced with the mac address of the device.
</doc:para>
</doc:description></doc:doc>
<arg type="b" name="template" direction="in">
<arg type="b" name="tmplate" direction="in">
<doc:doc><doc:summary>
if TRUE, will return template names, otherwise will return
configured servers
@ -123,7 +157,7 @@
<arg type="s" name="server" direction="in">
<doc:doc><doc:summary>server name</doc:summary></doc:doc>
</arg>
<arg type="b" name="template" direction="in">
<arg type="b" name="tmplate" direction="in">
<doc:doc><doc:summary>
if TRUE, will return a matching template configuration, otherwise
will return a matching server configuration
@ -153,6 +187,7 @@
server. The result is undefined.
</doc:description></doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QStringMultiMap"/>
</method>
<method name="CheckPresence">
@ -221,6 +256,7 @@
its pair-value won't be included in the dictionary.
</doc:description></doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QArrayOfStringMap"/>
</method>
<method name="GetDatabases">
@ -253,6 +289,7 @@
</doc:description>
</doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QArrayOfDatabases"/>
</method>
<method name="CheckSource">
@ -365,6 +402,7 @@
</doc:summary>
</doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="StringMap"/>
<arg type="b" name="must_authenticate" direction="in">
<doc:doc>
<doc:summary>
@ -499,11 +537,16 @@
</doc:para>
<doc:para>
Clients react by calling InfoResponse. The flow is this:
information needed, InfoRequest("request"),
InfoResponse("working") + dialog is opened (if necessary),
InfoRequest("waiting"), information becomes available,
InfoResponse("response"), InfoRequest("done").
Clients react by calling InfoResponse. The flow of events is this:
<doc:list type="number">
<doc:item><doc:definition>information needed</doc:definition></doc:item>
<doc:item><doc:definition>InfoRequest("request")</doc:definition></doc:item>
<doc:item><doc:definition>InfoResponse("working") + dialog is opened (if necessary)</doc:definition></doc:item>
<doc:item><doc:definition>InfoRequest("waiting")</doc:definition></doc:item>
<doc:item><doc:definition>information becomes available</doc:definition></doc:item>
<doc:item><doc:definition>InfoResponse("response")</doc:definition></doc:item>
<doc:item><doc:definition>InfoRequest("done")</doc:definition></doc:item>
</doc:list>
</doc:para>
<doc:para>
@ -519,6 +562,33 @@
provide the information and fall back to some default or
abort.
</doc:para>
<doc:para>
For "type = password" the following keys are used as part of the "parameters" string hash:
<doc:list>
<doc:item>
<doc:term>"name"</doc:term>
<doc:definition>name of the password property in the config</doc:definition>
</doc:item>
<doc:item>
<doc:term>"description"</doc:term>
<doc:definition>unique English description of the required password.
Content is determined by the individual password property, so this
may change. Currently used are "SyncML Server", "proxy",
"'source name' backend" (with 'source name' replaced by the same
names also used for the corresponding config entry).
</doc:definition>
</doc:item>
<doc:item>
<doc:term>
"user", "server", "domain", "object", "protocol", "authtype", "port"
</doc:term>
<doc:definition>
optional keys as they would be used in the GNOME keyring.
</doc:definition>
</doc:item>
</doc:list>
</doc:para>
</doc:description>
</doc:doc>
@ -558,19 +628,10 @@
<doc:doc>
<doc:summary>
Auxiliary parameters which depend on the type.
For "password" the following keys are used:
"name" - name of the password property in the config.
"description" - unique English description of the required password.
Content is determined by the individual password property, so this
may change. Currently used are "SyncML Server", "proxy",
"'source name' backend" (with 'source name' replaced by the same
names also used for the corresponding config entry).
"user", "server", "domain", "object", "protocol", "authtype", "port" -
optional keys as they would be used in the GNOME keyring.
</doc:summary>
</doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.In5" value="StringMap"/>
</signal>
<method name="InfoResponse">
@ -599,6 +660,7 @@
</doc:summary>
</doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.In2" value="StringMap"/>
</method>
<signal name="LogOutput">

View file

@ -8,13 +8,14 @@
<method name="GetConfig">
<doc:doc><doc:description>Get the configuration of the server</doc:description></doc:doc>
<arg type="b" name="template" direction="in">
<arg type="b" name="tmplate" direction="in">
<doc:doc><doc:summary>if TRUE, will return a matching template configuration, otherwise will return a matching server configuration</doc:summary></doc:doc>
</arg>
<arg type="a{sa{ss}}" name="configuration" direction="out">
<doc:doc><doc:summary>server configuration</doc:summary></doc:doc>
<doc:doc><doc:description>See Server.GetConfig() for dictionary description.</doc:description></doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QStringMultiMap"/>
</method>
<method name="SetConfig">
@ -61,6 +62,7 @@
<doc:doc><doc:summary>server configuration</doc:summary></doc:doc>
<doc:doc><doc:description>See Server.GetConfig() for dictionary description.</doc:description></doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.In2" value="QStringMultiMap"/>
</method>
<method name="GetReports">
@ -75,6 +77,7 @@
<doc:doc><doc:summary>synchronization reports</doc:summary></doc:doc>
<doc:doc><doc:description>See Server.GetReports() for array description.</doc:description></doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QArrayOfStringMap"/>
</method>
@ -106,6 +109,7 @@
</doc:description>
</doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="QArrayOfDatabases"/>
</method>
<method name="CheckSource">
@ -128,15 +132,21 @@
<doc:doc><doc:description>
<doc:para>
Start synchronization. The synchronization mode selection for sources works like this: Primarily, use mode from "sources" array. If the source was not found or its mode was empty, use the mode parameter. If mode parameter is empty, use the mode in configuration.
Examples:
* sync all with mode from config
Sync (NULL, ())
* refresh all from server
Sync ("refresh-from-server", ())
* force slow sync for calendar, use mode from config for others
Sync (NULL, (("calendar", "slow")))
* sync only calendar and addressbook, with mode from config
Sync ("none", (("calendar", NULL), ("addressbook", NULL)))
Examples:
<doc:list type="bullet">
<doc:item><doc:definition>sync all with mode from config:
Sync (NULL, ())</doc:definition>
</doc:item>
<doc:item><doc:definition>refresh all from server:
Sync ("refresh-from-server", ())</doc:definition>
</doc:item>
<doc:item><doc:definition>force slow sync for calendar, use mode from config for others:
Sync (NULL, (("calendar", "slow")))</doc:definition>
</doc:item>
<doc:item><doc:definition>sync only calendar and addressbook, with mode from config:
Sync ("none", (("calendar", NULL), ("addressbook", NULL)))</doc:definition>
</doc:item>
</doc:list>
</doc:para>
<doc:para>
Syncevolution will by default output a sync "diff" in the end of Sync().
@ -153,6 +163,7 @@
<doc:doc><doc:summary>synchronization source modes</doc:summary></doc:doc>
<doc:doc><doc:description>Source modes to override the 'mode' variable for specific sources. The dictionary key is source name, value is synchronization mode. Valid synchronization modes are all synchronization modes used in syncevolution server configuration files and the empty string.</doc:description></doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="StringMap"/>
</method>
<method name="Abort">
@ -217,6 +228,7 @@
<doc:doc><doc:summary>Synchronization source status dictionary</doc:summary></doc:doc>
<doc:doc><doc:description>Dictionary key is source name. The value structs contain synchronization mode, source status and error code. Valid values for status are the same as for status parameter above. "done" represents a synced source when the whole sync is not done yet.</doc:description></doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out2" value="QSyncStatusMap"/>
</method>
<method name="GetProgress">
@ -228,6 +240,7 @@
<doc:doc><doc:summary>Synchronization source progress dictionary</doc:summary></doc:doc>
<doc:doc><doc:description>Dictionary key is source name. The value structs contain phase (can be one of "", "preparing", "sending", "receiving"), prepare count, prepare total, send count, send total, receive count and receive total. -1 is used for unknown. Normally only the 'counts' increase but there are cases where the total will increase as well.</doc:description></doc:doc>
</arg>
<annotation name="com.trolltech.QtDBus.QtTypeName.Out1" value="QSyncProgressMap"/>
</method>
<method name="Execute">
@ -245,12 +258,14 @@
<arg type="s" name="status"/>
<arg type="u" name="error"/>
<arg type="a{s(ssu)}" name="sources"/>
<annotation name="com.trolltech.QtDBus.QtTypeName.In2" value="QSyncStatusMap"/>
</signal>
<signal name="ProgressChanged">
<doc:doc><doc:description>Synchronization progress change. See GetProgress() for argument descriptions.</doc:description></doc:doc>
<arg type="i" name="progress"/>
<arg type="a{s(siiiiii)}" name="sources"/>
<annotation name="com.trolltech.QtDBus.QtTypeName.In1" value="QSyncProgressMap"/>
</signal>
</interface>

78
src/dbus/qt/dbustypes.cpp Normal file
View file

@ -0,0 +1,78 @@
/*
* Copyright (C) 2010 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include "dbustypes.h"
// Marshall the SyncDatabase data into a D-BUS argument
QDBusArgument &operator<<(QDBusArgument &argument, const SyncDatabase &d)
{
argument.beginStructure();
argument << d.name << d.source << d.flag;
argument.endStructure();
return argument;
}
// Retrieve the SyncDatabase data from the D-BUS argument
const QDBusArgument &operator>>(const QDBusArgument &argument, SyncDatabase &d)
{
argument.beginStructure();
argument >> d.name >> d.source >> d.flag;
argument.endStructure();
return argument;
}
// Marshall the SyncProgress data into a D-BUS argument
QDBusArgument &operator<<(QDBusArgument &argument, const SyncProgress &p)
{
argument.beginStructure();
argument << p.prepareCount << p.prepareTotal << p.sendCount << p.sendTotal << p.recieveCount \
<< p.recieveTotal;
argument.endStructure();
return argument;
}
// Retrieve the SyncProgress data from the D-BUS argument
const QDBusArgument &operator>>(const QDBusArgument &argument, SyncProgress &p)
{
argument.beginStructure();
argument >> p.prepareCount >> p.prepareTotal >> p.sendCount >> p.sendTotal >> p.recieveCount \
>> p.recieveTotal;
argument.endStructure();
return argument;
}
// Marshall the SyncStatus data into a D-BUS argument
QDBusArgument &operator<<(QDBusArgument &argument, const SyncStatus &s)
{
argument.beginStructure();
argument << s.mode << s.status << s.error;
argument.endStructure();
return argument;
}
// Retrieve the SyncStatus data from the D-BUS argument
const QDBusArgument &operator>>(const QDBusArgument &argument, SyncStatus &s)
{
argument.beginStructure();
argument >> s.mode >> s.status >> s.error;
argument.endStructure();
return argument;
}

97
src/dbus/qt/dbustypes.h Normal file
View file

@ -0,0 +1,97 @@
/*
* Copyright (C) 2010 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef DBUSTYPES_H
#define DBUSTYPES_H
#include "commondbustypes.h"
#include <QtCore/QList>
#include <QtCore/QMap>
#include <QtCore/QString>
#include <QtCore/QMetaType>
#include <QtDBus/QtDBus>
struct SyncDatabase
{
QString name;
QString source;
bool flag;
};
Q_DECLARE_METATYPE ( SyncDatabase )
// Marshall the SyncDatabase data into a D-BUS argument
QDBusArgument &operator<<(QDBusArgument &argument, const SyncDatabase &mystruct);
// Retrieve the SyncDatabase data from the D-BUS argument
const QDBusArgument &operator>>(const QDBusArgument &argument, SyncDatabase &mystruct);
struct SyncProgress
{
QString phase;
int prepareCount;
int prepareTotal;
int sendCount;
int sendTotal;
int recieveCount;
int recieveTotal;
};
Q_DECLARE_METATYPE ( SyncProgress )
// Marshall the SyncProgress data into a D-BUS argument
QDBusArgument &operator<<(QDBusArgument &argument, const SyncProgress &mystruct);
// Retrieve the SyncProgress data from the D-BUS argument
const QDBusArgument &operator>>(const QDBusArgument &argument, SyncProgress &mystruct);
struct SyncStatus
{
QString mode;
QString status;
unsigned int error;
};
Q_DECLARE_METATYPE ( SyncStatus )
// Marshall the SyncStatus data into a D-BUS argument
QDBusArgument &operator<<(QDBusArgument &argument, const SyncStatus &mystruct);
// Retrieve the SyncStatus data from the D-BUS argument
const QDBusArgument &operator>>(const QDBusArgument &argument, SyncStatus &mystruct);
typedef QMap<QString, StringMap > QStringMultiMap;
typedef QList< StringMap > QArrayOfStringMap;
typedef QList< SyncDatabase > QArrayOfDatabases;
typedef QMap<QString, SyncProgress > QSyncProgressMap;
typedef QMap<QString, SyncStatus > QSyncStatusMap;
Q_DECLARE_METATYPE ( QStringMultiMap )
Q_DECLARE_METATYPE ( QArrayOfStringMap )
Q_DECLARE_METATYPE ( QArrayOfDatabases )
Q_DECLARE_METATYPE ( QSyncProgressMap )
Q_DECLARE_METATYPE ( QSyncStatusMap )
inline void registerMyDataTypes() {
qDBusRegisterMetaType< SyncDatabase >();
qDBusRegisterMetaType< QStringMultiMap >();
qDBusRegisterMetaType< QArrayOfStringMap >();
qDBusRegisterMetaType< QArrayOfDatabases >();
qDBusRegisterMetaType< SyncProgress >();
qDBusRegisterMetaType< QSyncProgressMap >();
qDBusRegisterMetaType< SyncStatus >();
qDBusRegisterMetaType< QSyncStatusMap >();
}
#endif //MYTYPES_H

View file

@ -2115,6 +2115,7 @@ sync_config_widget_add_alternative_config (SyncConfigWidget *self,
{
if (configured) {
sync_config_widget_set_config (self, config);
sync_config_widget_set_name (self, name);
sync_config_widget_set_configured (self, TRUE);
} else {
sync_config_widget_add_config (self, name, config);

View file

@ -664,6 +664,7 @@ set_app_state (app_data *data, app_state state)
gtk_widget_set_sensitive (data->main_frame, TRUE);
gtk_widget_set_sensitive (data->sync_btn, FALSE);
gtk_widget_set_sensitive (data->change_service_btn, FALSE);
gtk_widget_set_sensitive (data->settings_btn, FALSE);
gtk_widget_set_sensitive (data->emergency_btn, FALSE);
break;
case SYNC_UI_STATE_SERVER_FAILURE:
@ -681,6 +682,7 @@ set_app_state (app_data *data, app_state state)
gtk_widget_set_sensitive (data->sync_btn, FALSE);
gtk_widget_set_sensitive (data->emergency_btn, FALSE);
gtk_widget_set_sensitive (data->change_service_btn, FALSE);
gtk_widget_set_sensitive (data->settings_btn, FALSE);
break;
case SYNC_UI_STATE_SERVER_OK:
if (data->online) {
@ -689,6 +691,11 @@ set_app_state (app_data *data, app_state state)
gtk_widget_show (data->no_connection_box);
}
/* TRANSLATORS: These are for the button in main view, right side.
Keep line length below ~20 characters, use two lines if needed */
gtk_button_set_label (GTK_BUTTON (data->sync_btn),
_("Sync now"));
if (!data->current_service) {
gtk_widget_hide (data->service_box);
gtk_widget_hide (data->autosync_box);
@ -713,21 +720,18 @@ set_app_state (app_data *data, app_state state)
gtk_widget_show (data->autosync_box);
gtk_widget_set_sensitive (data->sync_btn, data->online);
gtk_widget_set_sensitive (data->emergency_btn, TRUE);
/* TRANSLATORS: These are for the button in main view, right side.
Keep line length below ~20 characters, use two lines if needed */
if (data->synced_this_session && data->current_operation != OP_RESTORE) {
gtk_button_set_label (GTK_BUTTON (data->sync_btn),
_("Sync again"));
} else {
gtk_widget_hide (data->progress);
gtk_button_set_label (GTK_BUTTON (data->sync_btn),
_("Sync now"));
}
gtk_window_set_focus (GTK_WINDOW (data->sync_win), data->sync_btn);
}
gtk_widget_set_sensitive (data->main_frame, TRUE);
gtk_widget_set_sensitive (data->change_service_btn, TRUE);
gtk_widget_set_sensitive (data->settings_btn, TRUE);
data->syncing = FALSE;
break;
@ -743,6 +747,7 @@ set_app_state (app_data *data, app_state state)
}
gtk_widget_set_sensitive (data->main_frame, FALSE);
gtk_widget_set_sensitive (data->change_service_btn, FALSE);
gtk_widget_set_sensitive (data->settings_btn, FALSE);
gtk_widget_set_sensitive (data->emergency_btn, FALSE);
gtk_widget_set_sensitive (data->sync_btn,
@ -1247,6 +1252,17 @@ build_autosync_ui (app_data *data)
gtk_widget_show (data->autosync_toggle);
}
static void
glade_name_workaround (GtkBuilder *builder, const char *name)
{
GtkWidget *w;
w = GTK_WIDGET (gtk_builder_get_object (builder, name));
if (w) {
gtk_widget_set_name (w, name);
}
}
static gboolean
init_ui (app_data *data)
{
@ -1363,6 +1379,19 @@ init_ui (app_data *data)
g_signal_connect (data->new_device_btn, "clicked",
G_CALLBACK (new_device_clicked_cb), data);
/* workarounds for glade not working with gtkbuilder >= 2.20:
* widgets do not get names. */
glade_name_workaround (builder, "meego_win");
glade_name_workaround (builder, "sync_data_and_type_box");
glade_name_workaround (builder, "log_frame");
glade_name_workaround (builder, "backup_frame");
glade_name_workaround (builder, "services_frame");
glade_name_workaround (builder, "sync_service_label");
glade_name_workaround (builder, "sync_status_label");
glade_name_workaround (builder, "no_server_label");
glade_name_workaround (builder, "sync_failure_label");
glade_name_workaround (builder, "sync_btn");
init_bluetooth_ui (data);
g_object_unref (builder);
@ -2037,6 +2066,7 @@ get_config_for_config_widget_cb (SyncevoServer *server,
/* NOTE: using device_name here means a new config will be saved with
* device_name (and not the template name). Not sure if this is
* what we really want... */
syncevo_config_get_value (config, NULL, "templateName", &device_name);
if (!device_name) {
syncevo_config_get_value (config, NULL, "fingerPrint", &fp);
@ -2069,7 +2099,7 @@ get_config_for_config_widget_cb (SyncevoServer *server,
* all configs / templates, then decide what to sho w*/
/* there is a widget for this device already, add this info there*/
if (g_strcmp0 ("1", ready) == 0) {
if (c_data->has_configuration || g_strcmp0 ("1", ready) == 0) {
sync_config_widget_add_alternative_config (w, device_name, config,
c_data->has_configuration);
}
@ -2899,7 +2929,7 @@ save_config (app_data *data, SyncevoSession *session)
}
static void
sync (operation_data *op_data, SyncevoSession *session)
do_sync (operation_data *op_data, SyncevoSession *session)
{
GHashTable *source_modes;
GHashTableIter iter;
@ -2969,7 +2999,7 @@ set_config_for_sync_cb (SyncevoSession *session,
return;
}
sync (op_data, session);
do_sync (op_data, session);
}
static void

View file

@ -805,489 +805,503 @@ you can setup a service manually.</property>
<property name="label_xalign">0</property>
<property name="shadow_type">none</property>
<child>
<widget class="GtkHBox" id="hbox16">
<widget class="GtkScrolledWindow" id="emergency_scrolledwindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">never</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<widget class="GtkVBox" id="vbox20">
<widget class="GtkViewport" id="emergency_viewport">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<property name="resize_mode">queue</property>
<child>
<widget class="GtkVBox" id="vbox39">
<widget class="GtkHBox" id="hbox16">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<widget class="GtkLabel" id="emergency_label">
<property name="width_request">800</property>
<widget class="GtkVBox" id="vbox20">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label">If something has gone horribly wrong you can try a slow sync, start from scratch or restore from backup.</property>
<property name="wrap">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkExpander" id="emergency_expander">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<widget class="GtkAlignment" id="alignment19">
<property name="visible">True</property>
<property name="yscale">0</property>
<property name="left_padding">20</property>
<child>
<widget class="GtkTable" id="emergency_source_table">
<property name="visible">True</property>
<property name="n_rows">2</property>
<child>
<widget class="GtkCheckButton" id="checkbutton2">
<property name="label" translatable="yes">Calendar</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
</widget>
</child>
<child>
<widget class="GtkCheckButton" id="checkbutton3">
<property name="label" translatable="yes">Tasks</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkLabel" id="emergency_expander_label">
<property name="visible">True</property>
<property name="label">Affected data:</property>
</widget>
<packing>
<property name="type">label_item</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">8</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="slow_sync_box">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<widget class="GtkLabel" id="slow_sync_label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="a title in emergency view">&lt;big&gt;Slow sync&lt;/big&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment4">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xscale">0</property>
<property name="left_padding">40</property>
<property name="right_padding">40</property>
<child>
<widget class="GtkHBox" id="hbox19">
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<widget class="GtkButton" id="slow_sync_btn">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<widget class="GtkLabel" id="slow_sync_btn_label">
<property name="visible">True</property>
<property name="xpad">16</property>
<property name="label" translatable="yes">Slow sync</property>
</widget>
</child>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="slow_sync_explanation_label">
<property name="visible">True</property>
<property name="xpad">8</property>
<property name="label" translatable="yes">A slow sync compares items from both sides and tries to merge them.
This may fail in some cases, leading to duplicates or lost information.</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">8</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<widget class="GtkLabel" id="label14">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="a title in emergency view">&lt;big&gt;Start from scratch&lt;/big&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment3">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xscale">0</property>
<property name="left_padding">40</property>
<property name="right_padding">40</property>
<child>
<widget class="GtkHBox" id="hbox13">
<property name="visible">True</property>
<child>
<widget class="GtkButton" id="refresh_from_server_btn">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<widget class="GtkLabel" id="refresh_from_server_btn_label">
<property name="visible">True</property>
<property name="xpad">16</property>
<property name="label" translatable="yes">Delete all your local
information and replace
with data from Zyb</property>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="xpad">15</property>
<property name="label" translatable="yes" comments="text between the two &quot;start from scratch&quot; buttons in emergency view">&lt;b&gt;or&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="refresh_from_client_btn">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<widget class="GtkLabel" id="refresh_from_client_btn_label">
<property name="visible">True</property>
<property name="xpad">16</property>
<property name="label" translatable="yes">Delete all data on Zyb
and replace with your
local information</property>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">8</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox21">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<widget class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="a title in emergency view">&lt;big&gt;Restore from backup&lt;/big&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="resize_mode">queue</property>
<property name="left_padding">40</property>
<property name="right_padding">40</property>
<child>
<widget class="GtkVBox" id="vbox22">
<widget class="GtkVBox" id="vbox39">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">8</property>
<child>
<widget class="GtkLabel" id="label12">
<widget class="GtkLabel" id="emergency_label">
<property name="width_request">800</property>
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="explanation of &quot;Restore backup&quot; function">Backups are made before every time we Sync. Choose a backup to restore. Any changes you have made since then will be lost.</property>
<property name="label">If something has gone horribly wrong you can try a slow sync, start from scratch or restore from backup.</property>
<property name="wrap">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow1">
<widget class="GtkExpander" id="emergency_expander">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<widget class="GtkViewport" id="backup_viewport">
<widget class="GtkAlignment" id="alignment19">
<property name="visible">True</property>
<property name="resize_mode">queue</property>
<property name="yscale">0</property>
<property name="left_padding">20</property>
<child>
<widget class="GtkTable" id="emergency_backup_table">
<widget class="GtkTable" id="emergency_source_table">
<property name="visible">True</property>
<property name="n_rows">10</property>
<property name="n_columns">2</property>
<property name="row_spacing">16</property>
<property name="n_rows">2</property>
<child>
<widget class="GtkLabel" id="label59">
<widget class="GtkCheckButton" id="checkbutton2">
<property name="label" translatable="yes">Calendar</property>
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 5th 2009 16:35</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label69">
<widget class="GtkCheckButton" id="checkbutton3">
<property name="label" translatable="yes">Tasks</property>
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 5th 2009 13:35</property>
</widget>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label79">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 5th 2009 11:35</property>
</widget>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label89">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 3rd</property>
</widget>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label109">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 1st</property>
</widget>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label29">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing yesterday</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label30">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing two hours ago</property>
</widget>
<packing>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button1">
<property name="label">Restore</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
<property name="x_padding">16</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkLabel" id="emergency_expander_label">
<property name="visible">True</property>
<property name="label">Affected data:</property>
</widget>
<packing>
<property name="type">label_item</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">8</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="slow_sync_box">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<widget class="GtkLabel" id="slow_sync_label">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="a title in emergency view">&lt;big&gt;Slow sync&lt;/big&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment4">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xscale">0</property>
<property name="left_padding">40</property>
<property name="right_padding">40</property>
<child>
<widget class="GtkHBox" id="hbox19">
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<widget class="GtkButton" id="slow_sync_btn">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<widget class="GtkLabel" id="slow_sync_btn_label">
<property name="visible">True</property>
<property name="xpad">16</property>
<property name="label" translatable="yes">Slow sync</property>
</widget>
</child>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="slow_sync_explanation_label">
<property name="visible">True</property>
<property name="xpad">8</property>
<property name="label" translatable="yes">A slow sync compares items from both sides and tries to merge them.
This may fail in some cases, leading to duplicates or lost information.</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">8</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<widget class="GtkLabel" id="label14">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="a title in emergency view">&lt;big&gt;Start from scratch&lt;/big&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment3">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="yalign">0</property>
<property name="xscale">0</property>
<property name="left_padding">40</property>
<property name="right_padding">40</property>
<child>
<widget class="GtkHBox" id="hbox13">
<property name="visible">True</property>
<child>
<widget class="GtkButton" id="refresh_from_server_btn">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<widget class="GtkLabel" id="refresh_from_server_btn_label">
<property name="visible">True</property>
<property name="xpad">16</property>
<property name="label" translatable="yes">Delete all your local
information and replace
with data from Zyb</property>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label4">
<property name="visible">True</property>
<property name="xpad">15</property>
<property name="label" translatable="yes" comments="text between the two &quot;start from scratch&quot; buttons in emergency view">&lt;b&gt;or&lt;/b&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="refresh_from_client_btn">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<child>
<widget class="GtkLabel" id="refresh_from_client_btn_label">
<property name="visible">True</property>
<property name="xpad">16</property>
<property name="label" translatable="yes">Delete all data on Zyb
and replace with your
local information</property>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">8</property>
<property name="position">2</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox21">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<widget class="GtkLabel" id="label9">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="a title in emergency view">&lt;big&gt;Restore from backup&lt;/big&gt;</property>
<property name="use_markup">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkAlignment" id="alignment2">
<property name="visible">True</property>
<property name="resize_mode">queue</property>
<property name="left_padding">40</property>
<property name="right_padding">40</property>
<child>
<widget class="GtkVBox" id="vbox22">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<widget class="GtkLabel" id="label12">
<property name="width_request">800</property>
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="explanation of &quot;Restore backup&quot; function">Backups are made before every time we Sync. Choose a backup to restore. Any changes you have made since then will be lost.</property>
<property name="wrap">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">automatic</property>
<property name="vscrollbar_policy">automatic</property>
<child>
<widget class="GtkViewport" id="backup_viewport">
<property name="visible">True</property>
<property name="resize_mode">queue</property>
<child>
<widget class="GtkTable" id="emergency_backup_table">
<property name="visible">True</property>
<property name="n_rows">10</property>
<property name="n_columns">2</property>
<property name="row_spacing">16</property>
<child>
<widget class="GtkLabel" id="label59">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 5th 2009 16:35</property>
</widget>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label69">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 5th 2009 13:35</property>
</widget>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label79">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 5th 2009 11:35</property>
</widget>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label89">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 3rd</property>
</widget>
<packing>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label109">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing Dec 1st</property>
</widget>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label29">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing yesterday</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label30">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="ypad">5</property>
<property name="label">Backup before syncing two hours ago</property>
</widget>
<packing>
<property name="y_options">GTK_FILL</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="button1">
<property name="label">Restore</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options">GTK_FILL</property>
<property name="x_padding">16</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">8</property>
<property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
<property name="padding">40</property>
<property name="position">0</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">8</property>
<property name="position">3</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">40</property>
<property name="position">0</property>
</packing>
</child>
</widget>
</child>

View file

@ -2023,7 +2023,10 @@ public:
// exceptions must be handled (= printed) before returning,
// so that our client gets the output
try {
m_cmdline.run();
if (!m_cmdline.run()) {
SE_THROW_EXCEPTION(DBusSyncException, "command line execution failure");
}
} catch (...) {
redirectPtr->flush();
throw;
@ -5837,6 +5840,14 @@ int main(int argc, char **argv)
g_type_init();
g_thread_init(NULL);
g_set_application_name("SyncEvolution");
// Initializing a potential use of EDS early is necessary for
// libsynthesis when compiled with
// --enable-evolution-compatibility: in that mode libical will
// only be found by libsynthesis after EDSAbiWrapperInit()
// pulls it into the process by loading libecal.
EDSAbiWrapperInit();
loop = g_main_loop_new (NULL, FALSE);
setvbuf(stderr, NULL, _IONBF, 0);

View file

@ -1519,6 +1519,7 @@ class CmdlineTest : public CppUnit::TestFixture {
CPPUNIT_TEST(testPrintServers);
CPPUNIT_TEST(testPrintConfig);
CPPUNIT_TEST(testPrintFileTemplates);
CPPUNIT_TEST(testPrintFileTemplatesConfig);
CPPUNIT_TEST(testTemplate);
CPPUNIT_TEST(testMatchTemplate);
CPPUNIT_TEST(testAddSource);
@ -1852,6 +1853,7 @@ protected:
void testMatchTemplate() {
ScopedEnvChange templates("SYNCEVOLUTION_TEMPLATE_DIR", "testcases/templates");
ScopedEnvChange xdg("XDG_CONFIG_HOME", "/dev/null");
TestCmdline help1("--template", "?nokia 7210c", NULL);
help1.doit();
@ -2083,12 +2085,27 @@ protected:
}
void testPrintFileTemplates() {
rm_r(m_testDir);
// use local copy of templates in build dir (no need to install)
ScopedEnvChange templates("SYNCEVOLUTION_TEMPLATE_DIR", "./templates");
ScopedEnvChange xdg("XDG_CONFIG_HOME", m_testDir);
ScopedEnvChange home("HOME", m_testDir);
doPrintFileTemplates();
}
void testPrintFileTemplatesConfig() {
rm_r(m_testDir);
mkdir_p(m_testDir);
symlink("../templates", (m_testDir + "/syncevolution-templates").c_str());
ScopedEnvChange templates("SYNCEVOLUTION_TEMPLATE_DIR", "/dev/null");
ScopedEnvChange xdg("XDG_CONFIG_HOME", m_testDir);
ScopedEnvChange home("HOME", m_testDir);
doPrintFileTemplates();
}
void doPrintFileTemplates() {
testSetupFunambol();
{

View file

@ -0,0 +1,43 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <syncevo/FileConfigNode.h>
#include <syncevo/SafeConfigNode.h>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
boost::shared_ptr<ConfigNode> ConfigNode::createFileNode(const string &filename)
{
string::size_type off = filename.rfind('/');
boost::shared_ptr<ConfigNode> filenode;
if (off != filename.npos) {
filenode.reset(new FileConfigNode(filename.substr(0, off),
filename.substr(off + 1),
false));
} else {
filenode.reset(new FileConfigNode(".", filename, false));
}
boost::shared_ptr<SafeConfigNode> savenode(new SafeConfigNode(filenode));
savenode->setMode(false);
return savenode;
}
SE_END_CXX

63
src/syncevo/DataBlob.h Normal file
View file

@ -0,0 +1,63 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef INCL_EVOLUTION_DATA_BLOB
# define INCL_EVOLUTION_DATA_BLOB
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
/**
* Abstract base class for a chunk of data.
* Can be opened for reading and writing.
* Meant to be used for plain files and
* for sections inside a larger file.
*/
class DataBlob
{
public:
virtual ~DataBlob() {}
/**
* Create stream for writing data.
* Always overwrites old data.
*/
virtual boost::shared_ptr<std::ostream> write() = 0;
/**
* Create stream for reading data.
*/
virtual boost::shared_ptr<std::istream> read() = 0;
/** some kind of user visible name for the data */
virtual std::string getName() const = 0;
/** true if the data exists already */
virtual bool exists() const = 0;
/** true if the data is read-only and write() will fail */
virtual bool isReadonly() const = 0;
};
SE_END_CXX
#endif // INCL_EVOLUTION_DATA_BLOB

View file

@ -33,24 +33,6 @@
#include <syncevo/declarations.h>
SE_BEGIN_CXX
/** @TODO: replace stdio.h with streams */
boost::shared_ptr<ConfigNode> ConfigNode::createFileNode(const string &filename)
{
string::size_type off = filename.rfind('/');
boost::shared_ptr<ConfigNode> filenode;
if (off != filename.npos) {
filenode.reset(new FileConfigNode(filename.substr(0, off),
filename.substr(off + 1),
false));
} else {
filenode.reset(new FileConfigNode(".", filename, false));
}
boost::shared_ptr<SafeConfigNode> savenode(new SafeConfigNode(filenode));
savenode->setMode(false);
return savenode;
}
FileBaseConfigNode::FileBaseConfigNode(const string &path, const string &fileName, bool readonly) :
m_path(path),
m_fileName(fileName),

View file

@ -0,0 +1,71 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <syncevo/FileDataBlob.h>
#include <syncevo/SafeOstream.h>
#include <syncevo/util.h>
#include <unistd.h>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
FileDataBlob::FileDataBlob(const std::string &path, const std::string &fileName, bool readonly) :
m_path(path),
m_fileName(fileName),
m_readonly(readonly)
{
}
FileDataBlob::FileDataBlob(const std::string &fullpath, bool readonly) :
m_readonly(readonly)
{
splitPath(fullpath, m_path, m_fileName);
}
boost::shared_ptr<std::ostream> FileDataBlob::write()
{
if (m_readonly) {
SE_THROW(getName() + ": internal error: attempt to write read-only FileDataBlob");
}
mkdir_p(m_path);
boost::shared_ptr<std::ostream> file(new SafeOstream(getName()));
return file;
}
boost::shared_ptr<std::istream> FileDataBlob::read()
{
boost::shared_ptr<std::istream> file(new std::ifstream(getName().c_str()));
return file;
}
std::string FileDataBlob::getName() const
{
return m_path + "/" + m_fileName;
}
bool FileDataBlob::exists() const
{
std::string fullname = getName();
return !access(fullname.c_str(), F_OK);
}
SE_END_CXX

View file

@ -0,0 +1,61 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef INCL_EVOLUTION_FILE_DATA_BLOB
# define INCL_EVOLUTION_FILE_DATA_BLOB
#include <syncevo/DataBlob.h>
#include <string>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
/**
* Abstract base class for a chunk of data.
* Can be opened for reading and writing.
* Meant to be used for plain files and
* for sections inside a larger file.
*/
class FileDataBlob : public DataBlob
{
std::string m_path;
std::string m_fileName;
bool m_readonly;
public:
/**
* @param path directory name
* @param fileName name of file inside that directory
* @param readonly do not create or write file, it must exist;
* write() will throw an exception
*/
FileDataBlob(const std::string &path, const std::string &fileName, bool readonly);
FileDataBlob(const std::string &fullpath, bool readonly);
boost::shared_ptr<std::ostream> write();
boost::shared_ptr<std::istream> read();
virtual std::string getName() const;
virtual bool exists() const;
virtual bool isReadonly() const { return m_readonly; }
};
SE_END_CXX
#endif // INCL_EVOLUTION_FILE_DATA_BLOB

View file

@ -0,0 +1,375 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
* Copyright (C) 2009 Intel Corporation
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <syncevo/IniConfigNode.h>
#include <syncevo/FileDataBlob.h>
#include <syncevo/SyncConfig.h>
#include <syncevo/util.h>
#include <boost/scoped_array.hpp>
#include <boost/foreach.hpp>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
IniBaseConfigNode::IniBaseConfigNode(const boost::shared_ptr<DataBlob> &data) :
m_data(data)
{
}
void IniBaseConfigNode::flush()
{
if (!m_modified) {
return;
}
if (m_data->isReadonly()) {
throw std::runtime_error(m_data->getName() + ": internal error: flushing read-only config node not allowed");
}
boost::shared_ptr<std::ostream> file = m_data->write();
toFile(*file);
m_modified = false;
}
IniFileConfigNode::IniFileConfigNode(const boost::shared_ptr<DataBlob> &data) :
IniBaseConfigNode(data)
{
read();
}
IniFileConfigNode::IniFileConfigNode(const string &path, const string &fileName, bool readonly) :
IniBaseConfigNode(boost::shared_ptr<DataBlob>(new FileDataBlob(path, fileName, readonly)))
{
read();
}
void IniFileConfigNode::toFile(std::ostream &file) {
BOOST_FOREACH(const string &line, m_lines) {
file << line << std::endl;
}
}
void IniFileConfigNode::read()
{
boost::shared_ptr<std::istream> file(m_data->read());
std::string line;
while (getline(*file, line)) {
m_lines.push_back(line);
}
m_modified = false;
}
/**
* get property and value from line, if any present
*/
static bool getContent(const string &line,
string &property,
string &value,
bool &isComment,
bool fuzzyComments)
{
size_t start = 0;
while (start < line.size() &&
isspace(line[start])) {
start++;
}
// empty line?
if (start == line.size()) {
return false;
}
// Comment? Potentially keep reading, might be commented out assignment.
isComment = false;
if (line[start] == '#') {
if (!fuzzyComments) {
return false;
}
isComment = true;
}
// recognize # <word> = <value> as commented out (= default) value
if (isComment) {
start++;
while (start < line.size() &&
isspace(line[start])) {
start++;
}
}
// extract property
size_t end = start;
while (end < line.size() &&
!isspace(line[end])) {
end++;
}
property = line.substr(start, end - start);
// skip assignment
start = end;
while (start < line.size() &&
isspace(line[start])) {
start++;
}
if (start == line.size() ||
line[start] != '=') {
// invalid syntax or we tried to read a comment as assignment
return false;
}
// extract value
start++;
while (start < line.size() &&
isspace(line[start])) {
start++;
}
value = line.substr(start);
// remove trailing white space: usually it is
// added accidentally by users
size_t numspaces = 0;
while (numspaces < value.size() &&
isspace(value[value.size() - 1 - numspaces])) {
numspaces++;
}
value.erase(value.size() - numspaces);
// @TODO: strip quotation marks around value?!
return true;
}
/**
* check whether the line contains the property and if so, extract its value
*/
static bool getValue(const string &line,
const string &property,
string &value,
bool &isComment,
bool fuzzyComments)
{
string curProp;
return getContent(line, curProp, value, isComment, fuzzyComments) &&
!strcasecmp(curProp.c_str(), property.c_str());
}
string IniFileConfigNode::readProperty(const string &property) const {
string value;
BOOST_FOREACH(const string &line, m_lines) {
bool isComment;
if (getValue(line, property, value, isComment, false)) {
return value;
}
}
return "";
}
void IniFileConfigNode::readProperties(ConfigProps &props) const {
map<string, string> res;
string value, property;
BOOST_FOREACH(const string &line, m_lines) {
bool isComment;
if (getContent(line, property, value, isComment, false)) {
// don't care about the result: only the first instance
// of the property counts, so it doesn't matter when
// inserting it again later fails
props.insert(pair<string, string>(property, value));
}
}
}
void IniFileConfigNode::removeProperty(const string &property)
{
string value;
list<string>::iterator it = m_lines.begin();
while (it != m_lines.end()) {
const string &line = *it;
bool isComment;
if (getValue(line, property, value, isComment, false)) {
it = m_lines.erase(it);
m_modified = true;
} else {
it++;
}
}
}
void IniFileConfigNode::setProperty(const string &property,
const string &newvalue,
const string &comment,
const string *defValue) {
string newstr;
string oldvalue;
bool isDefault = false;
if (defValue &&
*defValue == newvalue) {
newstr += "# ";
isDefault = true;
}
newstr += property + " = " + newvalue;
BOOST_FOREACH(string &line, m_lines) {
bool isComment;
if (getValue(line, property, oldvalue, isComment, true)) {
if (newvalue != oldvalue ||
(isComment && !isDefault)) {
line = newstr;
m_modified = true;
}
return;
}
}
// add each line of the comment as separate line in .ini file
if (comment.size()) {
list<string> commentLines;
ConfigProperty::splitComment(comment, commentLines);
if (m_lines.size()) {
m_lines.push_back("");
}
BOOST_FOREACH(const string &comment, commentLines) {
m_lines.push_back(string("# ") + comment);
}
}
m_lines.push_back(newstr);
m_modified = true;
}
void IniFileConfigNode::clear()
{
m_lines.clear();
m_modified = true;
}
IniHashConfigNode::IniHashConfigNode(const boost::shared_ptr<DataBlob> &data) :
IniBaseConfigNode(data)
{
read();
}
IniHashConfigNode::IniHashConfigNode(const string &path, const string &fileName, bool readonly) :
IniBaseConfigNode(boost::shared_ptr<DataBlob>(new FileDataBlob(path, fileName, readonly)))
{
read();
}
void IniHashConfigNode::read()
{
boost::shared_ptr<std::istream> file(m_data->read());
std::string line;
while (std::getline(*file, line)) {
string property, value;
bool isComment;
if (getContent(line, property, value, isComment, false)) {
m_props.insert(StringPair(property, value));
}
}
m_modified = false;
}
void IniHashConfigNode::toFile(std::ostream &file)
{
BOOST_FOREACH(const StringPair &prop, m_props) {
file << prop.first << " = " << prop.second << std::endl;
}
}
void IniHashConfigNode::readProperties(ConfigProps &props) const
{
BOOST_FOREACH(const StringPair &prop, m_props) {
props.insert(prop);
}
}
void IniHashConfigNode::writeProperties(const ConfigProps &props)
{
if (!props.empty()) {
m_props.insert(props.begin(), props.end());
m_modified = true;
}
}
string IniHashConfigNode::readProperty(const string &property) const
{
std::map<std::string, std::string>::const_iterator it = m_props.find(property);
if (it != m_props.end()) {
return it->second;
} else {
return "";
}
}
void IniHashConfigNode::removeProperty(const string &property) {
map<string, string>::iterator it = m_props.find(property);
if(it != m_props.end()) {
m_props.erase(it);
m_modified = true;
}
}
void IniHashConfigNode::clear()
{
if (!m_props.empty()) {
m_props.clear();
m_modified = true;
}
}
void IniHashConfigNode::setProperty(const string &property,
const string &newvalue,
const string &comment,
const string *defValue)
{
/** we don't support property comments here. Also, we ignore comment*/
if (defValue &&
*defValue == newvalue) {
removeProperty(property);
return;
}
map<string, string>::iterator it = m_props.find(property);
if(it != m_props.end()) {
string oldvalue = it->second;
if(oldvalue != newvalue) {
m_props.erase(it);
m_props.insert(StringPair(property, newvalue));
m_modified = true;
}
} else {
m_props.insert(StringPair(property, newvalue));
m_modified = true;
}
}
SE_END_CXX

130
src/syncevo/IniConfigNode.h Normal file
View file

@ -0,0 +1,130 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef INCL_EVOLUTION_INI_CONFIG_NODE
# define INCL_EVOLUTION_INI_CONFIG_NODE
#include <syncevo/ConfigNode.h>
#include <syncevo/DataBlob.h>
#include <string>
#include <list>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
using namespace std;
/**
* A base class for .ini style data blobs.
*/
class IniBaseConfigNode: public ConfigNode {
protected:
boost::shared_ptr<DataBlob> m_data;
bool m_modified;
/**
* Open or create a new blob. The blob will be read (if it exists)
* but not created or written to unless flush() is called explicitly.
*/
IniBaseConfigNode(const boost::shared_ptr<DataBlob> &data);
/**
* a virtual method to serial data structure to the file
* It is used by flush function to flush memory into disk file
*/
virtual void toFile(std::ostream &file) = 0;
public:
virtual void flush();
virtual string getName() const { return m_data->getName(); }
virtual bool exists() const { return m_data->exists(); }
};
/**
* This class started its life as the Posix implementation of the
* ManagementNode in the Funambol C++ client library. Nowadays it is
* part of the SyncEvolution ConfigTree (see there for details).
*
* Each node is mapped to one file whose location is determined by
* the ConfigTree when the node gets created. Each node represents
* one .ini file with entries of the type
* <property>\s*=\s*<value>\s*\n
*
* Comments look like:
* \s*# <comment>
*
*/
class IniFileConfigNode : public IniBaseConfigNode {
list<string> m_lines;
void read();
protected:
virtual void toFile(std::ostream &file);
public:
IniFileConfigNode(const boost::shared_ptr<DataBlob> &data);
IniFileConfigNode(const string &path, const string &fileName, bool readonly);
/* keep underlying methods visible; our own setProperty() would hide them */
using ConfigNode::setProperty;
virtual string readProperty(const string &property) const;
virtual void setProperty(const string &property,
const string &value,
const string &comment = "",
const string *defValue = NULL);
virtual void readProperties(ConfigProps &props) const;
virtual void removeProperty(const string &property);
virtual void clear();
};
/**
* The main difference from FileConfigNode is to store pair of 'property-value'
* in a map to avoid O(n^2) string comparison
* Here comments for property default value are discarded.
*/
class IniHashConfigNode: public IniBaseConfigNode {
map<std::string, std::string> m_props;
/**
* Map used to store pairs
*/
void read();
protected:
virtual void toFile(std::ostream & file);
public:
IniHashConfigNode(const boost::shared_ptr<DataBlob> &data);
IniHashConfigNode(const string &path, const string &fileName, bool readonly);
virtual string readProperty(const string &property) const;
virtual void setProperty(const string &property,
const string &value,
const string &comment = "",
const string *defValue = NULL);
virtual void readProperties(ConfigProps &props) const;
virtual void writeProperties(const ConfigProps &props);
virtual void removeProperty(const string &property);
virtual void clear();
};
SE_END_CXX
#endif // INCL_EVOLUTION_INI_CONFIG_NODE

View file

@ -393,10 +393,11 @@ bool LogRedirect::process(FDs &fds) throw()
while (*text == '\n') {
text++;
}
const char *glib_debug_prefix = "** (process:";
const char *glib_debug_prefix = "** ("; // ** (client-test:875): WARNING **:
const char *glib_msg_prefix = "** Message:";
prefix = "stderr";
if (!strncmp(text, glib_debug_prefix, strlen(glib_debug_prefix)) ||
if ((!strncmp(text, glib_debug_prefix, strlen(glib_debug_prefix)) &&
strstr(text, " **:")) ||
!strncmp(text, glib_msg_prefix, strlen(glib_msg_prefix))) {
level = Logger::DEBUG;
prefix = "glib";
@ -662,10 +663,19 @@ public:
buffer.m_redirect->process();
std::string debug = buffer.m_streams[Logger::DEBUG].str();
std::string error = buffer.m_streams[Logger::ERROR].str();
std::string warning = buffer.m_streams[Logger::WARNING].str();
std::string show = buffer.m_streams[Logger::SHOW].str();
std::string info = buffer.m_streams[Logger::INFO].str();
std::string dev = buffer.m_streams[Logger::DEV].str();
CPPUNIT_ASSERT(debug.find("test warning") != debug.npos);
std::string debug = buffer.m_streams[Logger::DEBUG].str();
CPPUNIT_ASSERT_EQUAL(string(""), error);
CPPUNIT_ASSERT_EQUAL(string(""), warning);
CPPUNIT_ASSERT_EQUAL(string(""), show);
CPPUNIT_ASSERT_EQUAL(string(""), info);
CPPUNIT_ASSERT_EQUAL(string(""), error);
CPPUNIT_ASSERT(dev.find("normal message stderr") != dev.npos);
CPPUNIT_ASSERT(debug.find("test warning") != debug.npos);
} catch(...) {
dup2(orig_stdout, STDOUT_FILENO);
throw;

View file

@ -19,6 +19,7 @@ lib_LTLIBRARIES = libsyncevolution.la
SYNCEVOLUTION_SOURCES = \
ConfigTree.h \
ConfigNode.h \
ConfigNode.cpp \
HashConfigNode.h \
VolatileConfigNode.h \
VolatileConfigTree.h \
@ -83,6 +84,20 @@ SYNCEVOLUTION_SOURCES = \
FileConfigNode.h \
FileConfigNode.cpp \
\
IniConfigNode.h \
IniConfigNode.cpp \
SingleFileConfigTree.h \
SingleFileConfigTree.cpp \
\
DataBlob.h \
FileDataBlob.h \
FileDataBlob.cpp \
StringDataBlob.h \
StringDataBlob.cpp \
\
SafeOstream.h \
SafeOstream.cpp \
\
FileConfigTree.h \
FileConfigTree.cpp \
\

View file

@ -0,0 +1,51 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <syncevo/SafeOstream.h>
#include <syncevo/SyncContext.h>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
SafeOstream::SafeOstream(const std::string filename) :
m_filename(filename)
{
size_t pos = filename.rfind('/');
if (pos == filename.npos) {
m_tmpFilename = ".#";
m_tmpFilename += filename;
} else {
m_tmpFilename.assign(filename, 0, pos + 1);
m_tmpFilename += ".#";
m_tmpFilename += filename.substr(pos + 1);
}
open(m_tmpFilename.c_str());
}
SafeOstream::~SafeOstream()
{
close();
if (bad() ||
rename(m_tmpFilename.c_str(), m_filename.c_str())) {
SyncContext::throwError(m_tmpFilename, errno);
}
}
SE_END_CXX

56
src/syncevo/SafeOstream.h Normal file
View file

@ -0,0 +1,56 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef INCL_EVOLUTION_SAFE_OSTREAM
# define INCL_EVOLUTION_SAFE_OSTREAM
#include <fstream>
#include <string>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
/**
* Writes into temporary file (.# prefix) first, then renames to real
* file only when no error encountered at the time of deleting the
* instance. Once instantiated, the only way to safe the content of the
* real file is to set the "fail" bit. In that sense it is similar to
* instantiating a normal ofstream, which would directly overwrite
* the file at creation time.
*/
class SafeOstream : public std::ofstream
{
std::string m_filename;
std::string m_tmpFilename;
public:
/**
* @param filename real filename, without the .# prefix
*/
SafeOstream(const std::string filename);
/**
* on success, rename file
*/
~SafeOstream();
};
SE_END_CXX
#endif // INCL_EVOLUTION_SAFE_OSTREAM

View file

@ -0,0 +1,242 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <config.h>
#include "test.h"
#include <syncevo/SingleFileConfigTree.h>
#include <syncevo/StringDataBlob.h>
#include <syncevo/FileDataBlob.h>
#include <syncevo/IniConfigNode.h>
#include <syncevo/util.h>
#include <boost/foreach.hpp>
#include <boost/algorithm/string.hpp>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
using namespace std;
SingleFileConfigTree::SingleFileConfigTree(const boost::shared_ptr<DataBlob> &data) :
m_data(data)
{
readFile();
}
SingleFileConfigTree::SingleFileConfigTree(const string &fullpath) :
m_data(new FileDataBlob(fullpath, true))
{
readFile();
}
boost::shared_ptr<ConfigNode> SingleFileConfigTree::open(const string &filename)
{
string normalized = normalizePath(string("/") + filename);
boost::shared_ptr<ConfigNode> &entry = m_nodes[normalized];
if (entry) {
return entry;
}
string name = getRootPath() + " - " + normalized;
boost::shared_ptr<DataBlob> data;
BOOST_FOREACH(const FileContent_t::value_type &file, m_content) {
if (file.first == normalized) {
data.reset(new StringDataBlob(name, file.second, true));
break;
}
}
if (!data) {
/*
* creating new files not supported, would need support for detecting
* StringDataBlob::write()
*/
data.reset(new StringDataBlob(name, boost::shared_ptr<std::string>(), true));
}
entry.reset(new IniFileConfigNode(data));
return entry;
}
void SingleFileConfigTree::flush()
{
// not implemented, cannot write anyway
}
void SingleFileConfigTree::remove(const string &path)
{
SE_THROW("internal error: SingleFileConfigTree::remove() called");
}
void SingleFileConfigTree::reset()
{
m_nodes.clear();
readFile();
}
boost::shared_ptr<ConfigNode> SingleFileConfigTree::open(const string &path,
PropertyType type,
const string &otherId)
{
string fullpath = path;
if (!fullpath.empty()) {
fullpath += "/";
}
switch (type) {
case visible:
fullpath += "config.ini";
break;
case hidden:
fullpath += ".internal.ini";
break;
case other:
fullpath += ".other.ini";
break;
case server:
fullpath += ".server.ini";
break;
}
return open(fullpath);
}
static void checkChild(const string &normalized,
const string &node,
set<string> &subdirs)
{
if (boost::starts_with(node, normalized)) {
string remainder = node.substr(normalized.size());
size_t offset = remainder.find('/');
if (offset != remainder.npos) {
// only directories underneath path matter
subdirs.insert(remainder.substr(0, offset));
}
}
}
list<string> SingleFileConfigTree::getChildren(const string &path)
{
set<string> subdirs;
string normalized = normalizePath(string("/") + path);
if (normalized != "/") {
normalized += "/";
}
// must check both actual files as well as unsaved nodes
BOOST_FOREACH(const FileContent_t::value_type &file, m_content) {
checkChild(normalized, file.first, subdirs);
}
BOOST_FOREACH(const NodeCache_t::value_type &file, m_nodes) {
checkChild(normalized, file.first, subdirs);
}
list<string> result;
BOOST_FOREACH(const string &dir, subdirs) {
result.push_back(dir);
}
return result;
}
void SingleFileConfigTree::readFile()
{
boost::shared_ptr<istream> in(m_data->read());
boost::shared_ptr<string> content;
string line;
m_content.clear();
while (getline(*in, line)) {
if (boost::starts_with(line, "=== ") &&
boost::ends_with(line, " ===")) {
string name = line.substr(4, line.size() - 8);
name = normalizePath(string("/") + name);
content.reset(new string);
m_content[name] = content;
} else if (content) {
(*content) += line;
(*content) += "\n";
}
}
}
#ifdef ENABLE_UNIT_TESTS
class SingleIniTest : public CppUnit::TestFixture {
CPPUNIT_TEST_SUITE(SingleIniTest);
CPPUNIT_TEST(simple);
CPPUNIT_TEST_SUITE_END();
void simple() {
boost::shared_ptr<string> data(new string);
data->assign("# comment\n"
"# foo\n"
"=== foo/config.ini ===\n"
"foo = bar\n"
"foo2 = bar2\n"
"=== foo/.config.ini ===\n"
"foo_internal = bar_internal\n"
"foo2_internal = bar2_internal\n"
"=== /bar/.internal.ini ===\n"
"bar = foo\n"
"=== sources/addressbook/config.ini ===\n"
"=== sources/calendar/config.ini ===\n"
"evolutionsource = Personal\n");
boost::shared_ptr<DataBlob> blob(new StringDataBlob("test", data, true));
SingleFileConfigTree tree(blob);
boost::shared_ptr<ConfigNode> node;
node = tree.open("foo/config.ini");
CPPUNIT_ASSERT(node);
CPPUNIT_ASSERT(node->exists());
CPPUNIT_ASSERT_EQUAL(string("test - /foo/config.ini"), node->getName());
CPPUNIT_ASSERT_EQUAL(string("bar"), node->readProperty("foo"));
CPPUNIT_ASSERT_EQUAL(string("bar2"), node->readProperty("foo2"));
node = tree.open("/foo/config.ini");
CPPUNIT_ASSERT(node);
CPPUNIT_ASSERT(node->exists());
node = tree.open("foo//.config.ini");
CPPUNIT_ASSERT(node);
CPPUNIT_ASSERT(node->exists());
CPPUNIT_ASSERT_EQUAL(string("bar_internal"), node->readProperty("foo_internal"));
CPPUNIT_ASSERT_EQUAL(string("bar2_internal"), node->readProperty("foo2_internal"));
node = tree.open("bar///./.internal.ini");
CPPUNIT_ASSERT(node);
CPPUNIT_ASSERT(node->exists());
CPPUNIT_ASSERT_EQUAL(string("foo"), node->readProperty("bar"));
node = tree.open("sources/addressbook/config.ini");
CPPUNIT_ASSERT(node);
CPPUNIT_ASSERT(node->exists());
node = tree.open("sources/calendar/config.ini");
CPPUNIT_ASSERT(node);
CPPUNIT_ASSERT(node->exists());
CPPUNIT_ASSERT_EQUAL(string("Personal"), node->readProperty("evolutionsource"));
node = tree.open("no-such-source/config.ini");
CPPUNIT_ASSERT(node);
CPPUNIT_ASSERT(!node->exists());
list<string> dirs = tree.getChildren("");
CPPUNIT_ASSERT_EQUAL(string("bar|foo|no-such-source|sources"), boost::join(dirs, "|"));
dirs = tree.getChildren("sources/");
CPPUNIT_ASSERT_EQUAL(string("addressbook|calendar"), boost::join(dirs, "|"));
}
};
SYNCEVOLUTION_TEST_SUITE_REGISTRATION(SingleIniTest);
#endif // ENABLE_UNIT_TESTS
SE_END_CXX

View file

@ -0,0 +1,94 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef INCL_EVOLUTION_SINGLE_FILE_CONFIG_TREE
# define INCL_EVOLUTION_SINGLE_FILE_CONFIG_TREE
#include <ConfigTree.h>
#include <DataBlob.h>
#include <util.h>
#include <string>
#include <map>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
/**
* This class handles data blobs which contain multiple .ini files, using
* the following format:
* @verbatim
# comment
# ...
=== <first path>/[.internal.ini|config.ini|template.ini|...] ===
<file content>
=== <second file name> ===
...
* @endverbatim
*
* This is based on the assumption that the === ... === file separator
* is not part of valid .ini file content.
*
* Right now, only reading such a single data blob is implemented.
*/
class SingleFileConfigTree : public ConfigTree {
public:
/**
* @param data access to complete file data
*/
SingleFileConfigTree(const boost::shared_ptr<DataBlob> &data);
SingleFileConfigTree(const std::string &fullpath);
/**
* same as open(), with full file name (like sources/addressbook/config.ini)
* instead of path + type
*/
boost::shared_ptr<ConfigNode> open(const std::string &filename);
/* ConfigTree API */
virtual string getRootPath() const { return m_data->getName(); }
virtual void flush();
virtual void remove(const std::string &path);
virtual void reset();
virtual boost::shared_ptr<ConfigNode> open(const std::string &path,
PropertyType type,
const std::string &otherId = std::string(""));
list<string> getChildren(const std::string &path);
private:
boost::shared_ptr<DataBlob> m_data;
/**
* maps from normalized file name (see normalizePath()) to content for that name
*/
typedef std::map<std::string, boost::shared_ptr<std::string> > FileContent_t;
FileContent_t m_content;
/** cache of all nodes ever accessed */
typedef map< string, boost::shared_ptr<ConfigNode> > NodeCache_t;
NodeCache_t m_nodes;
/**
* populate m_content from m_data
*/
void readFile();
};
SE_END_CXX
#endif

View file

@ -0,0 +1,47 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#include <syncevo/StringDataBlob.h>
#include <syncevo/util.h>
#include <sstream>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
StringDataBlob::StringDataBlob(const std::string &name,
const boost::shared_ptr<std::string> &data,
bool readonly) :
m_name(name),
m_data(data),
m_readonly(readonly)
{
}
boost::shared_ptr<std::ostream> StringDataBlob::write()
{
SE_THROW("internal error: StringDataBlob::write() not implemented");
}
boost::shared_ptr<std::istream> StringDataBlob::read()
{
return boost::shared_ptr<std::istream>(new istringstream(m_data ? *m_data : ""));
}
SE_END_CXX

View file

@ -0,0 +1,61 @@
/*
* Copyright (C) 2008-2009 Patrick Ohly <patrick.ohly@gmx.de>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) version 3.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA
*/
#ifndef INCL_EVOLUTION_STRING_DATA_BLOB
# define INCL_EVOLUTION_STRING_DATA_BLOB
#include <syncevo/DataBlob.h>
#include <boost/shared_ptr.hpp>
#include <string>
#include <syncevo/declarations.h>
SE_BEGIN_CXX
/**
* Stores data chunk in memory.
* Ownership of that memory is shared.
*/
class StringDataBlob : public DataBlob
{
std::string m_name;
boost::shared_ptr<std::string> m_data;
bool m_readonly;
public:
/**
* @param name name for the data blob
* @param data reference to string holding data, NULL pointer if it doesn't exist
* @param readonly true if write() is meant to fail
*/
StringDataBlob(const std::string &name,
const boost::shared_ptr<std::string> &data,
bool readonly);
virtual boost::shared_ptr<std::ostream> write();
virtual boost::shared_ptr<std::istream> read();
virtual boost::shared_ptr<std::string> getData() { return m_data; }
virtual std::string getName() const { return m_name; }
virtual bool exists() const { return m_data; }
virtual bool isReadonly() const { return m_readonly; }
};
SE_END_CXX
#endif // INCL_EVOLUTION_STRING_DATA_BLOB

View file

@ -28,6 +28,7 @@
#include <syncevo/VolatileConfigNode.h>
#include <syncevo/DevNullConfigNode.h>
#include <syncevo/MultiplexConfigNode.h>
#include <syncevo/SingleFileConfigTree.h>
#include <syncevo/lcs.h>
#include <test.h>
#include <synthesis/timeutil.h>
@ -416,22 +417,28 @@ SyncConfig::TemplateList SyncConfig::matchPeerTemplates(const DeviceList &peers,
// layout, the match is entirely based on the metadata template.ini
string templateDir(SyncEvolutionTemplateDir());
std::queue <std::string, std::list<std::string> > directories;
if (isDir(templateDir)) {
directories.push (templateDir);
}
directories.push(templateDir);
templateDir = SubstEnvironment("${XDG_CONFIG_HOME}/syncevolution-templates");
directories.push(templateDir);
while (!directories.empty()) {
string sDir = directories.front();
directories.pop();
if (!TemplateConfig::isTemplateConfig(sDir)) {
if (isDir(sDir)) {
// check all sub directories
ReadDir dir(sDir);
//not a template folder, check all sub directories
BOOST_FOREACH(const string &entry, dir) {
if (isDir(sDir + "/" + entry)) {
directories.push (sDir + "/" + entry);
}
directories.push(sDir + "/" + entry);
}
} else {
TemplateConfig templateConf (sDir);
if (boost::ends_with(sDir, "~") ||
boost::starts_with(sDir, ".") ||
!templateConf.isTemplateConfig()) {
// ignore temporary files and files which do
// not contain a valid template
continue;
}
BOOST_FOREACH (const DeviceList::value_type &entry, peers){
int rank = templateConf.metaMatch (entry.m_fingerprint, entry.m_matchMode);
if (fuzzyMatch){
@ -485,8 +492,10 @@ boost::shared_ptr<SyncConfig> SyncConfig::createPeerTemplate(const string &serve
// before starting another fuzzy match process, first try to load the
// template directly taking the parameter as the path
if (isDir (server) && TemplateConfig::isTemplateConfig(server)) {
bool fromDisk = false;
if (TemplateConfig::isTemplateConfig(server)) {
templateConfig = server;
fromDisk = true;
} else {
SyncConfig::DeviceList devices;
devices.push_back (DeviceDescription("", server, MATCH_ALL));
@ -498,11 +507,12 @@ boost::shared_ptr<SyncConfig> SyncConfig::createPeerTemplate(const string &serve
if (templateConfig.empty()) {
// not found, avoid reading current directory by using one which doesn't exist
templateConfig = "/dev/null";
} else {
fromDisk = true;
}
}
boost::shared_ptr<FileConfigTree> tree(new FileConfigTree(templateConfig, "", false));
tree->setReadOnly(true);
boost::shared_ptr<ConfigTree> tree(new SingleFileConfigTree(templateConfig));
boost::shared_ptr<SyncConfig> config(new SyncConfig(server, tree));
boost::shared_ptr<PersistentSyncSourceConfig> source;
@ -559,13 +569,23 @@ boost::shared_ptr<SyncConfig> SyncConfig::createPeerTemplate(const string &serve
source->setSync("two-way");
}
if (isDir(templateConfig)) {
// directory exists, check for icon?
if (fromDisk) {
// check for icon
if (config->getIconURI().empty()) {
ReadDir dir(templateConfig);
string dirname, filename;
splitPath(templateConfig, dirname, filename);
ReadDir dir(getDirname(dirname));
// remove last suffix, regardless what it is
size_t pos = filename.rfind('.');
if (pos != filename.npos) {
filename.resize(pos);
}
filename += "-icon";
BOOST_FOREACH(const string &entry, dir) {
if (boost::istarts_with(entry, "icon")) {
config->setIconURI("file://" + templateConfig + "/" + entry);
if (boost::istarts_with(entry, filename)) {
config->setIconURI("file://" + dirname + "/" + entry);
break;
}
}
@ -573,8 +593,7 @@ boost::shared_ptr<SyncConfig> SyncConfig::createPeerTemplate(const string &serve
// leave the source configs alone and return the config as it is:
// in order to have sources configured as part of the template,
// the template directory must have directories for all
// sources under "sources"
// the template must have entries for all sources under "sources"
return config;
}
@ -698,6 +717,13 @@ boost::shared_ptr<SyncConfig> SyncConfig::createPeerTemplate(const string &serve
} else if (boost::iequals(server, "Ovi")) {
config->setSyncURL("https://sync.ovi.com/services/syncml");
config->setWebURL("http://www.ovi.com");
#ifndef ENABLE_SSL_CERTIFICATE_CHECK
// temporarily (?) disabled certificate checking because
// libsoup/gnutls do not accept the Verisign certificate
// (GNOME Bugzilla #589323)
config->setSSLVerifyServer(false);
config->setSSLVerifyHost(false);
#endif
//prefer vcard 3.0
source = config->getSyncSourceConfig("addressbook");
source->setSourceType("addressbook:text/vcard");
@ -1471,9 +1497,9 @@ bool SyncConfig::getUseProxy() const {
if (!proxy ) {
return syncPropUseProxy.getPropertyValue(*getNode(syncPropUseProxy));
} else if (strlen(proxy)>0) {
return TRUE;
return true;
} else {
return FALSE;
return false;
}
}
@ -2213,24 +2239,34 @@ bool SyncConfig::TemplateDescription::compare_op (boost::shared_ptr<SyncConfig::
return (left->m_templateId < right->m_templateId);
}
TemplateConfig::TemplateConfig (const string &path)
: m_metaNode (new FileConfigNode (path, "template.ini", true)),
m_id(""),
m_path(path)
TemplateConfig::TemplateConfig(const string &path) :
m_template(new SingleFileConfigTree(path))
{
m_metaNode->readProperties(m_metaProps);
boost::shared_ptr<ConfigNode> metaNode = m_template->open("template.ini");
metaNode->readProperties(m_metaProps);
}
bool TemplateConfig::isTemplateConfig (const string &dir)
bool TemplateConfig::isTemplateConfig (const string &path)
{
return !ReadDir(dir).find ("template.ini", false).empty();
SingleFileConfigTree templ(path);
boost::shared_ptr<ConfigNode> metaNode = templ.open("template.ini");
if (!metaNode->exists()) {
return false;
}
ConfigProps props;
metaNode->readProperties(props);
return !props.empty();
}
bool TemplateConfig::isTemplateConfig() const
{
return !m_metaProps.empty();
}
int TemplateConfig::serverModeMatch (SyncConfig::MatchMode mode)
{
FileConfigNode configNode (m_path, "config.ini", true);
std::string peerIsClient = configNode.readProperty ("peerIsClient");
boost::shared_ptr<ConfigNode> configNode = m_template->open("config.ini");
std::string peerIsClient = configNode->readProperty ("peerIsClient");
//not a match if serverMode does not match
if ((peerIsClient.empty() || peerIsClient == "0") && mode == SyncConfig::MATCH_FOR_SERVER_MODE) {

View file

@ -1680,16 +1680,17 @@ class SyncSourceConfig {
string m_cachedPassword;
};
class SingleFileConfigTree;
/**
* Representing a configuration template node used for fuzzy matching.
*/
class TemplateConfig
{
boost::shared_ptr<FileConfigNode> m_metaNode;
boost::shared_ptr<SingleFileConfigTree> m_template;
ConfigProps m_metaProps;
string m_id;
string m_templateName;
string m_path;
public:
TemplateConfig (const string &path);
enum {
@ -1701,6 +1702,7 @@ public:
BEST_MATCH=5
};
static bool isTemplateConfig (const string &path);
bool isTemplateConfig() const;
virtual int metaMatch (const string &fingerprint, SyncConfig::MatchMode mode);
virtual int serverModeMatch (SyncConfig::MatchMode mode);
virtual int fingerprintMatch (const string &fingerprint);

View file

@ -73,7 +73,6 @@ using namespace std;
#include <syncevo/declarations.h>
SE_BEGIN_CXX
SourceList *SyncContext::m_sourceListPtr;
SyncContext *SyncContext::m_activeContext;
SuspendFlags SyncContext::s_flags;
@ -161,6 +160,7 @@ void SyncContext::init()
m_serverMode = false;
m_firstSourceAccess = true;
m_remoteInitiated = false;
m_sourceListPtr = NULL;
}
SyncContext::~SyncContext()
@ -1780,8 +1780,8 @@ void SyncContext::throwError(const string &action, int error)
void SyncContext::fatalError(void *object, const char *error)
{
SE_LOG_ERROR(NULL, NULL, "%s", error);
if (m_sourceListPtr) {
m_sourceListPtr->syncDone(STATUS_FATAL, NULL);
if (m_activeContext && m_activeContext->m_sourceListPtr) {
m_activeContext->m_sourceListPtr->syncDone(STATUS_FATAL, NULL);
}
exit(1);
}
@ -1834,7 +1834,7 @@ void SyncContext::startLoopThread()
SyncSource *SyncContext::findSource(const char *name)
{
if (!m_sourceListPtr) {
if (!m_activeContext || !m_activeContext->m_sourceListPtr) {
return NULL;
}
const char *realname = strrchr(name, m_findSourceSeparator);
@ -1843,7 +1843,7 @@ SyncSource *SyncContext::findSource(const char *name)
} else {
realname = name;
}
return (*m_sourceListPtr)[realname];
return (*m_activeContext->m_sourceListPtr)[realname];
}
SyncContext *SyncContext::findContext(const char *sessionName)
@ -2573,10 +2573,10 @@ SyncContext::analyzeSyncMLMessage(const char *data, size_t len,
const std::string &messageType)
{
SyncContext sync;
SwapContext syncSentinel(&sync);
SourceList sourceList(sync, false);
sourceList.setLogLevel(SourceList::LOGGING_SUMMARY);
m_sourceListPtr = &sourceList;
sync.m_sourceListPtr = &sourceList;
SwapContext syncSentinel(&sync);
sync.initServer("", SharedBuffer(), "");
SwapEngine swapengine(sync);
sync.initEngine(false);
@ -2988,13 +2988,14 @@ SyncMLStatus SyncContext::doSync()
new_action.sa_handler = handleSignal;
sigemptyset(&new_action.sa_mask);
sigaction(SIGINT, NULL, &old_action);
if (old_action.sa_handler == SIG_DFL) {
bool catchSignals = getenv("SYNCEVOLUTION_NO_SYNC_SIGNALS") == NULL;
if (catchSignals && old_action.sa_handler == SIG_DFL) {
sigaction(SIGINT, &new_action, NULL);
}
struct sigaction old_term_action;
sigaction(SIGTERM, NULL, &old_term_action);
if (old_term_action.sa_handler == SIG_DFL) {
if (catchSignals && old_term_action.sa_handler == SIG_DFL) {
sigaction(SIGTERM, &new_action, NULL);
}
@ -3316,24 +3317,23 @@ SyncMLStatus SyncContext::doSync()
progressInfo.extra2,
progressInfo.extra3);
break;
default:
if (!m_serverMode) {
// specific for a certain sync source:
// find it...
SyncSource *source = m_sourceListPtr->lookupBySynthesisID(progressInfo.targetID);
if (source) {
displaySourceProgress(sysync::TProgressEventEnum(progressInfo.eventtype),
*source,
progressInfo.extra1,
progressInfo.extra2,
progressInfo.extra3);
} else {
throwError(std::string("unknown target ") + s);
}
target.reset();
default: {
// specific for a certain sync source:
// find it...
SyncSource *source = m_sourceListPtr->lookupBySynthesisID(progressInfo.targetID);
if (source) {
displaySourceProgress(sysync::TProgressEventEnum(progressInfo.eventtype),
*source,
progressInfo.extra1,
progressInfo.extra2,
progressInfo.extra3);
} else {
throwError(std::string("unknown target ") + s);
}
target.reset();
break;
}
}
}
stepCmd = sysync::STEPCMD_STEP;
break;
@ -3541,8 +3541,10 @@ SyncMLStatus SyncContext::doSync()
}
m_agent.reset();
sigaction (SIGINT, &old_action, NULL);
sigaction (SIGTERM, &old_term_action, NULL);
if (catchSignals) {
sigaction (SIGINT, &old_action, NULL);
sigaction (SIGTERM, &old_term_action, NULL);
}
return status;
}
@ -3898,6 +3900,7 @@ private:
* @return logdir created for the session
*/
string session(bool changeServer, SyncMLStatus status, ...) {
Logger::Level level = LoggerBase::instance().getLevel();
SourceList list(*this, true);
list.setLogLevel(SourceList::LOGGING_QUIET);
SyncReport report;
@ -3947,6 +3950,7 @@ private:
}
list.syncDone(status, &report);
LoggerBase::instance().setLevel(level);
return list.getLogdir();
}

View file

@ -103,10 +103,10 @@ class SyncContext : public SyncConfig, public ConfigUserInterface {
static SuspendFlags s_flags;
/**
* a pointer to the active SourceList instance if one exists;
* a pointer to the active SourceList instance for this context if one exists;
* used for error handling in throwError() on the iPhone
*/
static SourceList *m_sourceListPtr;
SourceList *m_sourceListPtr;
/**
* a pointer to the active SyncContext instance if one exists;

View file

@ -117,7 +117,7 @@ std::string GetLegacyMIMEType (const std::string &type, bool force) {
||boost::iequals (type, "text/x-calendar") || boost::iequals (type, "text/x-calendar:1.0")) {
return "text/x-vcalendar";
} else if (boost::iequals (type, "text/calendar") ||boost::iequals (type, "text/calendar:2.0")) {
return force ? "text/vcalendar" : "text/x-calendar";
return force ? "text/vcalendar" : "text/x-vcalendar";
} else if (boost::iequals (type, "text/plain") ||boost::iequals (type, "text/plain:1.0")) {
return "text/plain";
} else {

View file

@ -0,0 +1,14 @@
<remoterule name="E55">
<manufacturer>NOKIA</manufacturer>
<model>E55-1</model>
<rulescript><![CDATA[
// no dates before 1980
mindate=(TIMESTAMP)"19800101T000000Z";
alarmTimeToUTC = TRUE;
]]></rulescript>
<descriptivename>Nokia E55</descriptivename>
</remoterule>

View file

@ -256,6 +256,7 @@ extern "C" void EDSAbiWrapperInit()
&EDSAbiWrapperSingleton.e_cal_remove_object_with_mod, "e_cal_remove_object_with_mod",
&EDSAbiWrapperSingleton.e_cal_set_auth_func, "e_cal_set_auth_func",
&EDSAbiWrapperSingleton.icalcomponent_add_component, "icalcomponent_add_component",
&EDSAbiWrapperSingleton.icalcomponent_add_property, "icalcomponent_add_property",
&EDSAbiWrapperSingleton.icalcomponent_as_ical_string, "icalcomponent_as_ical_string",
&EDSAbiWrapperSingleton.icalcomponent_free, "icalcomponent_free",
&EDSAbiWrapperSingleton.icalcomponent_get_first_component, "icalcomponent_get_first_component",
@ -272,9 +273,11 @@ extern "C" void EDSAbiWrapperInit()
&EDSAbiWrapperSingleton.icalcomponent_new_from_string, "icalcomponent_new_from_string",
&EDSAbiWrapperSingleton.icalcomponent_remove_property, "icalcomponent_remove_property",
&EDSAbiWrapperSingleton.icalcomponent_set_uid, "icalcomponent_set_uid",
&EDSAbiWrapperSingleton.icalcomponent_set_recurrenceid, "icalcomponent_set_recurrenceid",
&EDSAbiWrapperSingleton.icalcomponent_vanew, "icalcomponent_vanew",
&EDSAbiWrapperSingleton.icalparameter_get_tzid, "icalparameter_get_tzid",
&EDSAbiWrapperSingleton.icalparameter_set_tzid, "icalparameter_set_tzid",
&EDSAbiWrapperSingleton.icalproperty_new_clone, "icalproperty_new_clone",
&EDSAbiWrapperSingleton.icalproperty_get_description, "icalproperty_get_description",
&EDSAbiWrapperSingleton.icalproperty_get_first_parameter, "icalproperty_get_first_parameter",
&EDSAbiWrapperSingleton.icalproperty_get_lastmodified, "icalproperty_get_lastmodified",
@ -284,7 +287,10 @@ extern "C" void EDSAbiWrapperInit()
&EDSAbiWrapperSingleton.icalproperty_new_summary, "icalproperty_new_summary",
&EDSAbiWrapperSingleton.icalproperty_set_value_from_string, "icalproperty_set_value_from_string",
&EDSAbiWrapperSingleton.icalproperty_remove_parameter_by_kind, "icalproperty_remove_parameter_by_kind",
&EDSAbiWrapperSingleton.icaltime_is_null_time, "icaltime_is_null_time",
&EDSAbiWrapperSingleton.icaltime_as_ical_string, "icaltime_as_ical_string",
&EDSAbiWrapperSingleton.icaltime_from_string, "icaltime_from_string",
&EDSAbiWrapperSingleton.icaltime_set_timezone, "icaltime_set_timezone",
&EDSAbiWrapperSingleton.icaltimezone_free, "icaltimezone_free",
&EDSAbiWrapperSingleton.icaltimezone_get_builtin_timezone, "icaltimezone_get_builtin_timezone",
&EDSAbiWrapperSingleton.icaltimezone_get_builtin_timezone_from_tzid, "icaltimezone_get_builtin_timezone_from_tzid",
@ -360,6 +366,6 @@ extern "C" void EDSAbiWrapperInit()
#endif // EVOLUTION_COMPATIBILITY
}
extern "C" const char *EDSAbiWrapperInfo() { return lookupInfo.c_str(); }
extern "C" const char *EDSAbiWrapperDebug() { return lookupDebug.c_str(); }
extern "C" const char *EDSAbiWrapperInfo() { EDSAbiWrapperInit(); return lookupInfo.c_str(); }
extern "C" const char *EDSAbiWrapperDebug() { EDSAbiWrapperInit(); return lookupDebug.c_str(); }

View file

@ -147,6 +147,7 @@ struct EDSAbiWrapper {
gboolean (*e_cal_remove_object_with_mod) (ECal *ecal, const char *uid, const char *rid, CalObjModType mod, GError **error);
void (*e_cal_set_auth_func) (ECal *ecal, ECalAuthFunc func, gpointer data);
void (*icalcomponent_add_component) (icalcomponent* parent, icalcomponent* child);
void (*icalcomponent_add_property) (icalcomponent* comp, icalproperty* prop);
char* (*icalcomponent_as_ical_string) (icalcomponent* component);
void (*icalcomponent_free) (icalcomponent* component);
icalcomponent* (*icalcomponent_get_first_component) (icalcomponent* component, icalcomponent_kind kind);
@ -163,9 +164,11 @@ struct EDSAbiWrapper {
icalcomponent* (*icalcomponent_new_from_string) (char* str);
void (*icalcomponent_remove_property) (icalcomponent* component, icalproperty* property);
void (*icalcomponent_set_uid) (icalcomponent* comp, const char* v);
void (*icalcomponent_set_recurrenceid)(icalcomponent* comp, struct icaltimetype v);
icalcomponent* (*icalcomponent_vanew) (icalcomponent_kind kind, ...);
const char* (*icalparameter_get_tzid) (const icalparameter* value);
void (*icalparameter_set_tzid) (icalparameter* value, const char* v);
icalproperty *(*icalproperty_new_clone)(icalproperty *prop);
const char* (*icalproperty_get_description) (const icalproperty* prop);
icalparameter* (*icalproperty_get_first_parameter) (icalproperty* prop, icalparameter_kind kind);
struct icaltimetype (*icalproperty_get_lastmodified) (const icalproperty* prop);
@ -177,7 +180,10 @@ struct EDSAbiWrapper {
void (*icalproperty_set_value_from_string) (icalproperty* prop,const char* value, const char* kind);
void (*icalproperty_remove_parameter_by_kind)(icalproperty* prop,
icalparameter_kind kind);
int (*icaltime_is_null_time)(const struct icaltimetype t);
const char* (*icaltime_as_ical_string) (const struct icaltimetype tt);
icaltimetype (*icaltime_from_string)(const char* str);
void (*icaltime_set_timezone)(icaltimetype *tt, const icaltimezone *zone);
void (*icaltimezone_free) (icaltimezone *zone, int free_struct);
icaltimezone* (*icaltimezone_get_builtin_timezone) (const char *location);
@ -283,6 +289,7 @@ extern struct EDSAbiWrapper EDSAbiWrapperSingleton;
# define e_cal_remove_object_with_mod EDSAbiWrapperSingleton.e_cal_remove_object_with_mod
# define e_cal_set_auth_func EDSAbiWrapperSingleton.e_cal_set_auth_func
# define icalcomponent_add_component EDSAbiWrapperSingleton.icalcomponent_add_component
# define icalcomponent_add_property EDSAbiWrapperSingleton.icalcomponent_add_property
# define icalcomponent_as_ical_string (EDSAbiWrapperSingleton.icalcomponent_as_ical_string_r ? EDSAbiWrapperSingleton.icalcomponent_as_ical_string_r : EDSAbiWrapperSingleton.icalcomponent_as_ical_string)
# define icalcomponent_free EDSAbiWrapperSingleton.icalcomponent_free
# define icalcomponent_get_first_component EDSAbiWrapperSingleton.icalcomponent_get_first_component
@ -299,9 +306,11 @@ extern struct EDSAbiWrapper EDSAbiWrapperSingleton;
# define icalcomponent_new_from_string EDSAbiWrapperSingleton.icalcomponent_new_from_string
# define icalcomponent_remove_property EDSAbiWrapperSingleton.icalcomponent_remove_property
# define icalcomponent_set_uid EDSAbiWrapperSingleton.icalcomponent_set_uid
# define icalcomponent_set_recurrenceid EDSAbiWrapperSingleton.icalcomponent_set_recurrenceid
# define icalcomponent_vanew EDSAbiWrapperSingleton.icalcomponent_vanew
# define icalparameter_get_tzid EDSAbiWrapperSingleton.icalparameter_get_tzid
# define icalparameter_set_tzid EDSAbiWrapperSingleton.icalparameter_set_tzid
# define icalproperty_new_clone EDSAbiWrapperSingleton.icalproperty_new_clone
# define icalproperty_get_description EDSAbiWrapperSingleton.icalproperty_get_description
# define icalproperty_get_first_parameter EDSAbiWrapperSingleton.icalproperty_get_first_parameter
# define icalproperty_get_lastmodified EDSAbiWrapperSingleton.icalproperty_get_lastmodified
@ -311,7 +320,10 @@ extern struct EDSAbiWrapper EDSAbiWrapperSingleton;
# define icalproperty_new_summary EDSAbiWrapperSingleton.icalproperty_new_summary
# define icalproperty_set_value_from_string EDSAbiWrapperSingleton.icalproperty_set_value_from_string
# define icalproperty_remove_parameter_by_kind EDSAbiWrapperSingleton.icalproperty_remove_parameter_by_kind
# define icaltime_is_null_time EDSAbiWrapperSingleton.icaltime_is_null_time
# define icaltime_as_ical_string (EDSAbiWrapperSingleton.icaltime_as_ical_string_r ? EDSAbiWrapperSingleton.icaltime_as_ical_string_r : EDSAbiWrapperSingleton.icaltime_as_ical_string)
# define icaltime_from_string EDSAbiWrapperSingleton.icaltime_from_string
# define icaltime_set_timezone EDSAbiWrapperSingleton.icaltime_set_timezone
# define icaltimezone_free EDSAbiWrapperSingleton.icaltimezone_free
# define icaltimezone_get_builtin_timezone EDSAbiWrapperSingleton.icaltimezone_get_builtin_timezone
# define icaltimezone_get_builtin_timezone_from_tzid EDSAbiWrapperSingleton.icaltimezone_get_builtin_timezone_from_tzid

View file

@ -75,7 +75,21 @@ public:
typedef typename T::value_type::first_type F;
typedef typename T::value_type::second_type C;
static C cost(const T &a, ssize_t start, size_t end) { return a[end].second - (start == -1 ? 0 : a[start].second); }
/**
* @param a container holding sequence of items as passed to lcs()
* @param start index of first item in the gap, may be -1
* @param end index of the last item in the gap, may be one beyond end of sequence, always >= start
* @return cost 0 for start == end, > 0 for start < end
*/
static C cost(const T &a, ssize_t start, size_t end) {
return a.empty() ? 0 :
((end >= a.size() ? a[a.size() - 1].second : a[end].second) -
(start < 0 ? a[0].second : a[start].second));
}
/**
* @param index valid index (>= 0, < a.size())
* @return entry at index
*/
static const F &entry_at(const T &a, size_t index) { return a[index].first; }
};

View file

@ -86,6 +86,35 @@ string normalizePath(const string &path)
return res;
}
string getBasename(const string &path)
{
string dir;
string file;
splitPath(path, dir, file);
return file;
}
string getDirname(const string &path)
{
string dir;
string file;
splitPath(path, dir, file);
return dir;
}
void splitPath(const string &path, string &dir, string &file)
{
string normal = normalizePath(path);
size_t offset = normal.rfind('/');
if (offset != normal.npos) {
dir = normal.substr(0, offset);
file = normal.substr(offset + 1);
} else {
dir = "";
file = normal;
}
}
bool relToAbs(string &path)
{
char buffer[PATH_MAX+1];

View file

@ -64,6 +64,23 @@ typedef map<string, string> StringMap;
*/
string normalizePath(const string &path);
/**
* Returns last component of path. Trailing slash is ignored.
* Empty if path is empty.
*/
string getBasename(const string &path);
/**
* Returns path without the last component. Empty if nothing left.
*/
string getDirname(const string &path);
/**
* Splits path into directory and file part. Trailing slashes
* are stripped first.
*/
void splitPath(const string &path, string &dir, string &file);
/**
* convert relative path to canonicalized absolute path
* @param path will be turned into absolute path if possible, otherwise left unchanged

View file

@ -0,0 +1,26 @@
=== template.ini ===
fingerprint = SyncEvolution Client
description = SyncEvolution server side template
=== config.ini ===
username = test
password = test
PeerIsClient = 1
ConsumerReady = 1
=== sources/addressbook/config.ini ===
sync = two-way
uri = addressbook
=== sources/calendar/config.ini ===
sync = two-way
uri = calendar
=== sources/todo/config.ini ===
sync = two-way
uri = todo
=== sources/memo/config.ini ===
sync = two-way
uri = memo

View file

@ -1,4 +0,0 @@
username = test
password = test
PeerIsClient = 1
ConsumerReady = 1

View file

@ -1,2 +0,0 @@
sync = two-way
uri = addressbook

View file

@ -1,2 +0,0 @@
sync = two-way
uri = calendar

View file

@ -1,2 +0,0 @@
sync = two-way
uri = memo

View file

@ -1,2 +0,0 @@
sync = two-way
uri = todo

View file

@ -1,2 +0,0 @@
fingerprint = SyncEvolution Client
description = SyncEvolution server side template

View file

@ -0,0 +1,29 @@
=== template.ini ===
fingerprint = Nokia 7210c,Nokia
description = Template for Nokia S40 series Phone
templateName = Nokia S40
=== config.ini ===
PeerIsClient = 1
ConsumerReady = 1
=== sources/addressbook/config.ini ===
sync = two-way
uri = Contacts
=== sources/calendar/config.ini ===
sync = none
=== sources/todo/config.ini ===
sync = none
=== sources/memo/config.ini ===
sync = two-way
uri = memo
=== sources/calendar+todo/config.ini ===
sync = two-way
type = virtual:text/x-calendar:1.0
evolutionsource = calendar,todo
uri = Calendar

View file

@ -1,2 +0,0 @@
PeerIsClient = 1
ConsumerReady = 1

View file

@ -1,2 +0,0 @@
sync = two-way
uri = Contacts

View file

@ -1,4 +0,0 @@
sync = two-way
type = virtual:text/x-calendar:1.0
evolutionsource = calendar,todo
uri = Calendar

View file

@ -1,2 +0,0 @@
sync = two-way
uri = memo

View file

@ -1,3 +0,0 @@
fingerprint = Nokia 7210c,Nokia
description = Template for Nokia S40 series Phone
templateName = Nokia S40

View file

@ -0,0 +1,31 @@
=== template.ini ===
fingerprint = Nokia N85,Nokia
description = Template for Nokia S60 series Phone
templateName = Nokia S60
=== config.ini ===
peerIsClient = 1
remoteIdentifier = PC Suite
ConsumerReady = 1
=== sources/addressbook/config.ini ===
sync = two-way
uri = Contacts
=== sources/calendar/config.ini ===
sync = none
=== sources/todo/config.ini ===
sync = none
=== sources/memo/config.ini ===
sync = two-way
uri = Notes
=== sources/calendar+todo/config.ini ===
sync = two-way
type = virtual:text/x-calendar:1.0
evolutionsource = calendar,todo
uri = Calendar

View file

@ -1,3 +0,0 @@
peerIsClient = 1
remoteIdentifier = PC Suite
ConsumerReady = 1

View file

@ -1,2 +0,0 @@
sync = two-way
uri = Contacts

View file

@ -1,4 +0,0 @@
sync = two-way
type = virtual:text/calendar
evolutionsource = calendar,todo
uri = Calendar

View file

@ -1,2 +0,0 @@
sync = two-way
uri = Notes

View file

@ -1,4 +0,0 @@
fingerprint = Nokia N85,Nokia
description = Template for Nokia S60 series Phone
templateName = Nokia S60

View file

@ -0,0 +1,29 @@
=== template.ini ===
fingerprint = Nokia N900
description = Template for Nokia N900
=== config.ini ===
PeerIsClient = 1
ConsumerReady = 1
remoteIdentifier = PC Suite
=== sources/addressbook/config.ini ===
sync = two-way
uri = Contacts
=== sources/calendar/config.ini ===
sync = none
=== sources/todo/config.ini ===
sync = none
=== sources/memo/config.ini ===
sync = two-way
uri = Notes
=== sources/calendar+todo/config.ini ===
sync = two-way
type = virtual:text/x-calendar:1.0
evolutionsource = calendar,todo
uri = Calendar

View file

@ -1,3 +0,0 @@
PeerIsClient = 1
ConsumerReady = 1
remoteIdentifier = PC Suite

View file

@ -1,2 +0,0 @@
sync = two-way
uri = Contacts

View file

@ -1,4 +0,0 @@
sync = two-way
type = virtual:text/calendar
evolutionsource = calendar,todo
uri = Calendar

View file

@ -1,2 +0,0 @@
sync = two-way
uri = Notes

View file

@ -1,2 +0,0 @@
fingerprint = Nokia N900
description = Template for Nokia N900

View file

@ -0,0 +1,28 @@
=== template.ini ===
fingerprint = Funambol
description = http://my.funambol.com
=== config.ini ===
syncURL = http://my.funambol.com/sync
WebURL = http://my.funambol.com
enableWBXML = FALSE
ConsumerReady = TRUE
RetryInterval = 0
=== sources/addressbook/config.ini ===
type = addressbook
uri = card
=== sources/calendar/config.ini ===
uri = event
sync = two-way
type = calendar:text/calendar!
=== sources/todo/config.ini ===
uri = task
sync = two-way
type = todo:text/calendar!
=== sources/memo/config.ini ===
uri = note

View file

@ -1,7 +0,0 @@
# *not* a complete config, do not copy manually into ~/.config
syncURL = http://my.funambol.com/sync
WebURL = http://my.funambol.com
enableWBXML = FALSE
ConsumerReady = TRUE
RetryInterval = 0

View file

@ -1,2 +0,0 @@
type = addressbook
uri = card

View file

@ -1,3 +0,0 @@
uri = event
sync = two-way
type = calendar:text/calendar!

View file

@ -1 +0,0 @@
uri = note

View file

@ -1,3 +0,0 @@
uri = task
sync = two-way
type = todo:text/calendar!

View file

@ -1,2 +0,0 @@
fingerprint = Funambol
description = http://my.funambol.com

View file

@ -0,0 +1,22 @@
=== template.ini ===
fingerprint = ScheduleWorld, default
description = http://www.scheduleworld.org
=== config.ini ===
syncURL = http://sync.scheduleworld.com/funambol/ds
WebURL = http://www.scheduleworld.com
ConsumerReady = TRUE
=== sources/addressbook/config.ini ===
type = addressbook:text/vcard
uri = card3
=== sources/calendar/config.ini ===
uri = cal2
=== sources/todo/config.ini ===
uri = task2
=== sources/memo/config.ini ===
uri = note

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