package-helpers-cmxsl/helpers/DATA/sugar/git-20201017.patch
2020-10-17 13:57:49 -04:00

10097 lines
277 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

diff --git b/.flake8 a/.flake8
new file mode 100644
index 0000000..0146a5f
--- /dev/null
+++ a/.flake8
@@ -0,0 +1,6 @@
+[flake8]
+
+# E402 module level import not at top of file
+# gi.require_version() is required before later imports
+
+ignore = E402
diff --git b/MAINTAINERS a/MAINTAINERS
new file mode 100644
index 0000000..0f3a245
--- /dev/null
+++ a/MAINTAINERS
@@ -0,0 +1,14 @@
+Current maintainers
+-------------------
+
+Aleksey Lim <alsroot@member.fsf.org> http://github.com/alsroot (Journal)
+Tomeu Vizoso <tomeu@sugarlabs.org> http://github.com/tomeuv
+Gonzalo Odiard http://github.com/godiard
+Martin Abente Lahaye <tch@sugarlabs.org>http://github.com/tchx84
+Sam <sam@sam.today> http://github.com/samdroid-apps
+
+
+Past maintainers
+----------------
+
+Marco Pesenti Gritti <marcopg@sugarlabs.org>
diff --git b/autogen.sh a/autogen.sh
new file mode 100755
index 0000000..739e7f8
--- /dev/null
+++ a/autogen.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+test -n "${srcdir}" || srcdir=`dirname "$0"`
+test -n "${srcdir}" || srcdir="$(pwd)"
+
+olddir="$(pwd)"
+cd "$srcdir"
+
+mkdir -p m4
+
+intltoolize --force
+autoreconf -i
+
+cd "$olddir"
+"$srcdir/configure" --enable-maintainer-mode "$@"
diff --git b/data/.gitignore a/data/.gitignore
new file mode 100644
index 0000000..09d75cd
--- /dev/null
+++ a/data/.gitignore
@@ -0,0 +1,3 @@
+*.gtkrc
+sugar.schemas
+org.sugarlabs.gschema.valid
diff --git b/docs/debian.md a/docs/debian.md
index 725b6a1..9183bb7 100644
--- b/docs/debian.md
+++ a/docs/debian.md
@@ -18,7 +18,7 @@ sudo apt install sucrose lightdm
exec sudo reboot
```
-- in the graphical login screen, change from the default X session to Sugar,
+- in the graphical login screen, [change from the default X session to Sugar](https://github.com/sugarlabs/sugar-docs/blob/master/src/sugar-logging-in.md),
- log in as the non-root user, which you will have created during install.
Known bugs include;
@@ -41,7 +41,7 @@ sudo apt install sucrose lightdm
exec sudo reboot
```
-- in the graphical login screen, change from the default X session to Sugar,
+- in the graphical login screen, [change from the default X session to Sugar](https://github.com/sugarlabs/sugar-docs/blob/master/src/sugar-logging-in.md),
- log in as your non-root user, created during install.
Known bugs include;
@@ -61,10 +61,9 @@ Packaging
Packaging of Sugar on Debian is done by a team:
-- [pkg-sugar project](https://alioth.debian.org/projects/pkg-sugar/),
+- [pkg-sugar-team project](https://salsa.debian.org/pkg-sugar-team),
- [pkg-sugar-devel mailing list](https://lists.alioth.debian.org/mailman/listinfo/pkg-sugar-devel),
-- [pkg-sugar-commit mailing list](https://lists.alioth.debian.org/mailman/listinfo/pkg-sugar-commit),
-- [pkg-sugar git repositories](https://anonscm.debian.org/cgit/pkg-sugar/),
+- [pkg-sugar git repositories](https://salsa.debian.org/pkg-sugar-team/sugar)
- [package archive of Jonas Smedegaard](http://debian.jones.dk/pkg/sugar_/),
Sucrose packages are usually updated in the unstable release. These packages migrate to the testing release after a while. You can see the current package versions [here](http://packages.debian.org/search?keywords=sugar&searchon=names&suite=all&section=all).
diff --git b/docs/development-environment.md a/docs/development-environment.md
index eb1914d..7bd61a4 100644
--- b/docs/development-environment.md
+++ a/docs/development-environment.md
@@ -26,7 +26,7 @@ See [downloads](http://people.sugarlabs.org/~quozl/sugar-live-build/) for the IS
Once installed, Sugar Live Build can be used to make changes to Sugar, the toolkits, the demonstration activities, or to write new activities.
-- changes to Sugar or the toolkits can be done by editing files in the module source trees in `/usr/src`, followed by `sudo make install` for each changed module.
+- changes to Sugar or the toolkits can be done by editing files in the module source trees in `/usr/src`, followed by per-module [install steps](https://github.com/sugarlabs/sugar-live-build/blob/master/src/config/hooks/normal/0900-sugar.hook.chroot#L42) for each changed module. See [issue 442](https://github.com/sugarlabs/sugar-toolkit-gtk3/issues/442) for details.
- changes to demonstration activities can be done in the activity source trees in `/usr/src/sugar-activities`, and are immediately effective; just start a new instance of the activity in Sugar.
@@ -49,7 +49,7 @@ Install the `sucrose` package;
sudo apt install sucrose
-Log out, then log in with the Sugar desktop selected.
+Log out, then [log in with the Sugar desktop selected](https://github.com/sugarlabs/sugar-docs/blob/master/src/sugar-logging-in.md).
Once Sugar is installed, development of activities can begin.
@@ -144,7 +144,7 @@ Clone the Browse and Terminal activities;
git clone https://github.com/sugarlabs/browse-activity.git Browse.activity
git clone https://github.com/sugarlabs/terminal-activity.git Terminal.activity
-Log out and log in again with the Sugar desktop selected, or use the remote desktop feature described earlier on this page.
+Log out and [log in again with the Sugar desktop selected](https://github.com/sugarlabs/sugar-docs/blob/master/src/sugar-logging-in.md), or use the remote desktop feature described earlier on this page.
After making changes in a Sugar module, repeat the `sudo make install` step, and log in again.
diff --git b/docs/fedora.md a/docs/fedora.md
index 4b50b8b..af3c3e9 100644
--- b/docs/fedora.md
+++ a/docs/fedora.md
@@ -12,7 +12,7 @@ Install Fedora. Then, in a Terminal, type:
sudo dnf groupinstall sugar-desktop
-Then restart your computer. At the *Sign in* select the *Sugar* desktop.
+Then restart your computer. At the *Sign in* select the *Sugar* desktop (Fedora uses GDM by default, tutorial to login to Sugar using GDM can be viewed in [the Sugar Docs](https://github.com/sugarlabs/sugar-docs/blob/master/src/sugar-logging-in.md)).
Using Sugar with another Desktop Environment
--------------------------------------------
diff --git b/docs/ubuntu.md a/docs/ubuntu.md
index 34c5644..26661cd 100644
--- b/docs/ubuntu.md
+++ a/docs/ubuntu.md
@@ -14,7 +14,7 @@ Sugar 0.112 can be installed with the following commands:
sudo apt install sucrose
- log out,
-- log in with the Sugar desktop selected,
+- [log in with the Sugar desktop selected](https://github.com/sugarlabs/sugar-docs/blob/master/src/sugar-logging-in.md),
Known Problems:
@@ -31,7 +31,7 @@ Sugar 0.112 is in the universe repository, and can be installed with the followi
sudo apt install sucrose
- log out,
-- log in with the Sugar desktop selected,
+- [log in with the Sugar desktop selected](https://github.com/sugarlabs/sugar-docs/blob/master/src/sugar-logging-in.md),
Ubuntu 18.04 (Bionic Beaver) and 18.10 (Cosmic Cuttlefish)
-------------------
@@ -44,7 +44,7 @@ Sugar 0.112 is in the universe repository, and can be installed with the followi
sudo apt install sucrose
- log out,
-- log in with the Sugar desktop selected,
+- [log in with the Sugar desktop selected](https://github.com/sugarlabs/sugar-docs/blob/master/src/sugar-logging-in.md),
- press the F3 key to switch to the home view, see below.
Known problems
diff --git b/extensions/cpsection/language/view.py a/extensions/cpsection/language/view.py
index 39beda7..b2bb51e 100644
--- b/extensions/cpsection/language/view.py
+++ a/extensions/cpsection/language/view.py
@@ -486,6 +486,7 @@ class BlackLabel(PaletteMenuItem):
self.set_label(text_label)
def set_label(self, text_label):
+ text_label = GLib.markup_escape_text(text_label)
text = '<span foreground="%s">' % style.COLOR_BLACK.get_html() + \
text_label + '</span>'
self.label.set_markup(text)
diff --git b/extensions/cpsection/modemconfiguration/model.py a/extensions/cpsection/modemconfiguration/model.py
index e2ba304..dfe0e20 100755
--- b/extensions/cpsection/modemconfiguration/model.py
+++ a/extensions/cpsection/modemconfiguration/model.py
@@ -318,8 +318,6 @@ class ServiceProviders(object):
provider_name = self._settings.get_string(CONF_SP_PROVIDER)
if not provider_name:
provider_name = ''
- else:
- provider_name = provider_name.decode('utf-8')
plan_idx = self._settings.get_int(CONF_SP_PLAN) or 0
diff --git b/po/en_US.po a/po/en_US.po
new file mode 100644
index 0000000..06414dd
--- /dev/null
+++ a/po/en_US.po
@@ -0,0 +1,2016 @@
+# 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: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-07-31 00:33-0400\n"
+"PO-Revision-Date: 2013-08-01 05:05+0200\n"
+"Last-Translator: Chris <cjl@laptop.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: en_US\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.0.5\n"
+
+#: ../extensions/cpsection/aboutme/__init__.py:24
+msgid "About Me"
+msgstr "About Me"
+
+#: ../extensions/cpsection/aboutme/model.py:48
+msgid "You must enter a name."
+msgstr "You must enter a name."
+
+#: ../extensions/cpsection/aboutme/model.py:75
+#, python-format
+msgid "stroke: color=%s hue=%s"
+msgstr "stroke: color=%s hue=%s"
+
+#: ../extensions/cpsection/aboutme/model.py:78
+#, python-format
+msgid "stroke: %s"
+msgstr "stroke: %s"
+
+#: ../extensions/cpsection/aboutme/model.py:80
+#, python-format
+msgid "fill: color=%s hue=%s"
+msgstr "fill: color=%s hue=%s"
+
+#: ../extensions/cpsection/aboutme/model.py:82
+#, python-format
+msgid "fill: %s"
+msgstr "fill: %s"
+
+#: ../extensions/cpsection/aboutme/model.py:94
+msgid "Error in specified color modifiers."
+msgstr "Error in specified color modifiers."
+
+#: ../extensions/cpsection/aboutme/model.py:97
+msgid "Error in specified colors."
+msgstr "Error in specified colors."
+
+#: ../extensions/cpsection/aboutme/view.py:212
+msgid "Click to change your color:"
+msgstr "Click to change your color:"
+
+#: ../extensions/cpsection/aboutcomputer/__init__.py:21
+msgid "About my Computer"
+msgstr "About my Computer"
+
+#: ../extensions/cpsection/aboutcomputer/model.py:42
+msgid "Not available"
+msgstr "Not available"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:60
+msgid "Identity"
+msgstr "Identity"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:69
+msgid "Serial Number:"
+msgstr "Serial Number:"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:91
+msgid "Software"
+msgstr "Software"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:100
+msgid "Build:"
+msgstr "Build:"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:115
+msgid "Sugar:"
+msgstr "Sugar:"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:130
+msgid "Firmware:"
+msgstr "Firmware:"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:145
+msgid "Wireless Firmware:"
+msgstr "Wireless Firmware:"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:168
+msgid "Copyright and License"
+msgstr "Copyright and License"
+
+#. TRANS: The word "Sugar" should not be translated.
+#: ../extensions/cpsection/aboutcomputer/view.py:187
+msgid ""
+"Sugar is the graphical user interface that you are looking at. Sugar is free "
+"software, covered by the GNU General Public License, and you are welcome to "
+"change it and/or distribute copies of it under certain conditions described "
+"therein."
+msgstr ""
+"Sugar is the graphical user interface that you are looking at. Sugar is free "
+"software, covered by the GNU General Public License, and you are welcome to "
+"change it and/or distribute copies of it under certain conditions described "
+"therein."
+
+#: ../extensions/cpsection/aboutcomputer/view.py:199
+msgid "Full license:"
+msgstr "Full license:"
+
+#: ../extensions/cpsection/background/__init__.py:21
+msgid "Background"
+msgstr "Background"
+
+#: ../extensions/cpsection/background/view.py:39
+msgid "Select a background:"
+msgstr "Select a background:"
+
+#: ../extensions/cpsection/background/view.py:46
+msgid "Clear background"
+msgstr "Clear background"
+
+#: ../extensions/cpsection/datetime/__init__.py:21
+msgid "Date & Time"
+msgstr "Date & Time"
+
+#: ../extensions/cpsection/datetime/model.py:92
+msgid "Error timezone does not exist."
+msgstr "Error timezone does not exist."
+
+#: ../extensions/cpsection/datetime/view.py:66 ../data/sugar.schemas.in.h:61
+msgid "Timezone"
+msgstr "Timezone"
+
+#: ../extensions/cpsection/frame/__init__.py:21
+msgid "Frame"
+msgstr "Frame"
+
+#: ../extensions/cpsection/frame/model.py:41
+#: ../extensions/cpsection/frame/model.py:66
+msgid "Value must be an integer."
+msgstr "Value must be an integer."
+
+#: ../extensions/cpsection/frame/view.py:27
+msgid "never"
+msgstr "never"
+
+#: ../extensions/cpsection/frame/view.py:28
+msgid "instantaneous"
+msgstr "instantaneous"
+
+#: ../extensions/cpsection/frame/view.py:29
+#, python-format
+msgid "%s seconds"
+msgstr "%s seconds"
+
+#: ../extensions/cpsection/frame/view.py:54
+msgid "Activation Delay"
+msgstr "Activation Delay"
+
+#: ../extensions/cpsection/frame/view.py:78
+msgid "Corner"
+msgstr "Corner"
+
+#: ../extensions/cpsection/frame/view.py:114
+msgid "Edge"
+msgstr "Edge"
+
+#: ../extensions/cpsection/keyboard/__init__.py:21
+#: ../extensions/cpsection/keyboard/view.py:38
+msgid "Keyboard"
+msgstr "Keyboard"
+
+#: ../extensions/cpsection/keyboard/view.py:240
+msgid "Keyboard Model"
+msgstr "Keyboard Model"
+
+#: ../extensions/cpsection/keyboard/view.py:301
+msgid "Key(s) to change layout"
+msgstr "Key(s) to change layout"
+
+#: ../extensions/cpsection/keyboard/view.py:369
+msgid "Keyboard Layout(s)"
+msgstr "Keyboard Layout(s)"
+
+#: ../extensions/cpsection/language/__init__.py:21
+#: ../extensions/cpsection/language/view.py:33
+msgid "Language"
+msgstr "Language"
+
+#: ../extensions/cpsection/language/model.py:30
+msgid "Could not access ~/.i18n. Create standard settings."
+msgstr "Could not access ~/.i18n. Create standard settings."
+
+#: ../extensions/cpsection/language/model.py:129
+#, python-format
+msgid "Language for code=%s could not be determined."
+msgstr "Language for code=%s could not be determined."
+
+#: ../extensions/cpsection/language/model.py:152
+#, python-format
+msgid "Sorry I do not speak '%s'."
+msgstr "Sorry I do not speak '%s'."
+
+#: ../extensions/cpsection/language/view.py:57
+msgid ""
+"Add languages in the order you prefer. If a translation is not available, "
+"the next in the list will be used."
+msgstr ""
+"Add languages in the order you prefer. If a translation is not available, "
+"the next in the list will be used."
+
+#: ../extensions/cpsection/modemconfiguration/__init__.py:21
+msgid "Modem Configuration"
+msgstr "Modem Configuration"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:94
+msgid ""
+"You will need to provide the following information to set up a mobile "
+"broadband connection to a cellular (3G) network."
+msgstr ""
+"You will need to provide the following information to set up a mobile "
+"broadband connection to a cellular (3G) network."
+
+#: ../extensions/cpsection/modemconfiguration/view.py:117
+msgid "Country:"
+msgstr "Country:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:118
+msgid "Provider:"
+msgstr "Provider:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:119
+msgid "Plan:"
+msgstr "Plan:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:160
+msgid "Username:"
+msgstr "Username:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:167
+msgid "Password:"
+msgstr "Password:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:174
+msgid "Number:"
+msgstr "Number:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:181
+msgid "Access Point Name (APN):"
+msgstr "Access Point Name (APN):"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:188
+msgid "Personal Identity Number (PIN):"
+msgstr "Personal Identity Number (PIN):"
+
+#: ../extensions/cpsection/modemconfiguration/model.py:161
+#, python-format
+msgid "Plan #%s"
+msgstr "Plan #%s"
+
+#: ../extensions/cpsection/modemconfiguration/model.py:291
+#, python-format
+msgid "Provider %s"
+msgstr "Provider %s"
+
+#: ../extensions/cpsection/network/__init__.py:21
+#: ../extensions/cpsection/network/view.py:30
+msgid "Network"
+msgstr "Network"
+
+#: ../extensions/cpsection/network/model.py:73
+msgid "State is unknown."
+msgstr "State is unknown."
+
+#: ../extensions/cpsection/network/model.py:101
+msgid "Error in specified radio argument use on/off."
+msgstr "Error in specified radio argument use on/off."
+
+#: ../extensions/cpsection/network/model.py:152
+msgid "Error in specified argument use 0/1."
+msgstr "Error in specified argument use 0/1."
+
+#: ../extensions/cpsection/network/view.py:68
+msgid "Wireless"
+msgstr "Wireless"
+
+#: ../extensions/cpsection/network/view.py:77
+msgid "Turn off the wireless radio to save battery life"
+msgstr "Turn off the wireless radio to save battery life"
+
+#: ../extensions/cpsection/network/view.py:90
+msgid "Radio"
+msgstr "Radio"
+
+#: ../extensions/cpsection/network/view.py:106
+msgid "Discard network history if you have trouble connecting to the network"
+msgstr "Discard network history if you have trouble connecting to the network"
+
+#: ../extensions/cpsection/network/view.py:115
+msgid "Discard network history"
+msgstr "Discard network history"
+
+#: ../extensions/cpsection/network/view.py:131
+msgid "Collaboration"
+msgstr "Collaboration"
+
+#: ../extensions/cpsection/network/view.py:139
+msgid ""
+"The server is the equivalent of what room you are in; people on the same "
+"server will be able to see each other, even when they aren't on the same "
+"network."
+msgstr ""
+"The server is the equivalent of what room you are in; people on the same "
+"server will be able to see each other, even when they aren't on the same "
+"network."
+
+#: ../extensions/cpsection/network/view.py:149
+msgid "Server:"
+msgstr "Server:"
+
+#: ../extensions/cpsection/power/__init__.py:21
+msgid "Power"
+msgstr "Power"
+
+#: ../extensions/cpsection/power/model.py:90
+msgid "Error in automatic pm argument, use on/off."
+msgstr "Error in automatic pm argument, use on/off."
+
+#: ../extensions/cpsection/power/view.py:45
+msgid "Power management"
+msgstr "Power management"
+
+#: ../extensions/cpsection/power/view.py:55 ../data/sugar.schemas.in.h:5
+msgid "Automatic power management (increases battery life)"
+msgstr "Automatic power management (increases battery life)"
+
+#: ../extensions/cpsection/updater/__init__.py:21
+msgid "Software Update"
+msgstr "Software Update"
+
+#: ../extensions/cpsection/updater/view.py:65
+msgid ""
+"Software updates correct errors, eliminate security vulnerabilities, and "
+"provide new features."
+msgstr ""
+"Software updates correct errors, eliminate security vulnerabilities, and "
+"provide new features."
+
+#: ../extensions/cpsection/updater/view.py:79
+msgid "Update in progress..."
+msgstr "Update in progress..."
+
+#: ../extensions/cpsection/updater/view.py:106
+msgid "Checking for updates..."
+msgstr "Checking for updates..."
+
+#: ../extensions/cpsection/updater/view.py:108
+msgid "Installing updates..."
+msgstr "Installing updates..."
+
+#: ../extensions/cpsection/updater/view.py:137
+#, python-format
+msgid "Checking %s..."
+msgstr "Checking %s..."
+
+#: ../extensions/cpsection/updater/view.py:139
+msgid "Looking for updates..."
+msgstr "Looking for updates..."
+
+#: ../extensions/cpsection/updater/view.py:141
+#, python-format
+msgid "Downloading %s..."
+msgstr "Downloading %s..."
+
+#: ../extensions/cpsection/updater/view.py:143
+#, python-format
+msgid "Updating %s..."
+msgstr "Updating %s..."
+
+#: ../extensions/cpsection/updater/view.py:153
+msgid "Your software is up-to-date"
+msgstr "Your software is up-to-date"
+
+#: ../extensions/cpsection/updater/view.py:155
+#, python-format
+msgid "You can install %s update"
+msgid_plural "You can install %s updates"
+msgstr[0] "You can install %s update"
+msgstr[1] "You can install %s updates"
+
+#: ../extensions/cpsection/updater/view.py:184
+#, python-format
+msgid "%s update was installed"
+msgid_plural "%s updates were installed"
+msgstr[0] "%s update was installed"
+msgstr[1] "%s updates were installed"
+
+#: ../extensions/cpsection/updater/view.py:266
+msgid "Install selected"
+msgstr "Install selected"
+
+#: ../extensions/cpsection/updater/view.py:284
+#, python-format
+msgid "Download size: %s"
+msgstr "Download size: %s"
+
+#: ../extensions/cpsection/updater/view.py:373
+#, python-format
+msgid "From version %(current)s to %(new)s (Size: %(size)s)"
+msgstr "From version %(current)s to %(new)s (Size: %(size)s)"
+
+#: ../extensions/cpsection/updater/view.py:380
+#, python-format
+msgid "Version %(version)s (Size: %(size)s)"
+msgstr "Version %(version)s (Size: %(size)s)"
+
+#. TRANS: download size is 0
+#: ../extensions/cpsection/updater/view.py:397
+msgid "None"
+msgstr "None"
+
+#. TRANS: download size of very small updates
+#: ../extensions/cpsection/updater/view.py:400
+msgid "1 KB"
+msgstr "1 KB"
+
+#. TRANS: download size of small updates, e.g. '250 KB'
+#: ../extensions/cpsection/updater/view.py:403
+#, python-format
+msgid "%.0f KB"
+msgstr "%.0f KB"
+
+#. TRANS: download size of updates, e.g. '2.3 MB'
+#: ../extensions/cpsection/updater/view.py:406
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MB"
+
+#: ../extensions/cpsection/webaccount/__init__.py:24
+msgid "Configure your Web Services"
+msgstr "Configure your Web Services"
+
+#: ../extensions/cpsection/webaccount/view.py:42
+#, python-format
+msgid ""
+"No web services are installed.\n"
+"Please visit %s for more details."
+msgstr ""
+"No web services are installed.\n"
+"Please visit %s for more details."
+
+#: ../extensions/deviceicon/battery.py:71
+msgid "My Battery"
+msgstr "My Battery"
+
+#: ../extensions/deviceicon/battery.py:153
+msgid "Removed"
+msgstr "Removed"
+
+#: ../extensions/deviceicon/battery.py:156
+msgid "Charging"
+msgstr "Charging"
+
+#: ../extensions/deviceicon/battery.py:159
+msgid "Very little power remaining"
+msgstr "Very little power remaining"
+
+#. TRANS: do not translate %(hour)d:%(min).2d it is a variable,
+#. only translate the word "remaining"
+#: ../extensions/deviceicon/battery.py:166
+#, python-format
+msgid "%(hour)d:%(min).2d remaining"
+msgstr "%(hour)d:%(min).2d remaining"
+
+#: ../extensions/deviceicon/battery.py:169
+msgid "Charged"
+msgstr "Charged"
+
+#: ../extensions/deviceicon/frame.py:56
+msgid "Show my keyboard"
+msgstr "Show my keyboard"
+
+#: ../extensions/deviceicon/network.py:50
+#, python-format
+msgid "IP address: %s"
+msgstr "IP address: %s"
+
+#: ../extensions/deviceicon/network.py:82
+#: ../extensions/deviceicon/network.py:298
+#: ../src/jarabe/desktop/networkviews.py:135
+#: ../src/jarabe/desktop/networkviews.py:509
+msgid "Disconnect"
+msgstr "Disconnect"
+
+#: ../extensions/deviceicon/network.py:107
+#: ../extensions/deviceicon/network.py:290
+#: ../src/jarabe/desktop/networkviews.py:251
+#: ../src/jarabe/desktop/networkviews.py:551
+#: ../src/jarabe/desktop/networkviews.py:693
+msgid "Connecting..."
+msgstr "Connecting..."
+
+#: ../extensions/deviceicon/network.py:112
+#: ../extensions/deviceicon/network.py:180
+#: ../src/jarabe/desktop/networkviews.py:258
+#: ../src/jarabe/desktop/networkviews.py:557
+#: ../src/jarabe/desktop/networkviews.py:699
+msgid "Connected"
+msgstr "Connected"
+
+#: ../extensions/deviceicon/network.py:125
+msgid "No wireless connection"
+msgstr "No wireless connection"
+
+#: ../extensions/deviceicon/network.py:139
+msgid "Channel"
+msgstr "Channel"
+
+#: ../extensions/deviceicon/network.py:154
+msgid "Wired Network"
+msgstr "Wired Network"
+
+#: ../extensions/deviceicon/network.py:183
+msgid "Speed"
+msgstr "Speed"
+
+#: ../extensions/deviceicon/network.py:208
+msgid "Wireless modem"
+msgstr "Wireless modem"
+
+#: ../extensions/deviceicon/network.py:276
+msgid "Please wait..."
+msgstr "Please wait..."
+
+#: ../extensions/deviceicon/network.py:281
+#: ../src/jarabe/desktop/networkviews.py:129
+#: ../src/jarabe/desktop/networkviews.py:503
+#: ../src/jarabe/desktop/networkviews.py:644
+msgid "Connect"
+msgstr "Connect"
+
+#: ../extensions/deviceicon/network.py:282
+msgid "Disconnected"
+msgstr "Disconnected"
+
+#: ../extensions/deviceicon/network.py:289
+#: ../src/jarabe/controlpanel/toolbar.py:121
+#: ../src/jarabe/desktop/keydialog.py:101
+#: ../src/jarabe/frame/activitiestray.py:625
+#: ../src/jarabe/frame/activitiestray.py:746
+#: ../src/jarabe/frame/activitiestray.py:778
+#: ../src/jarabe/journal/expandedentry.py:159
+#: ../src/jarabe/journal/journaltoolbox.py:480
+#: ../src/jarabe/journal/palettes.py:159
+msgid "Cancel"
+msgstr "Cancel"
+
+#: ../extensions/deviceicon/network.py:328
+msgid "Try connection again"
+msgstr "Try connection again"
+
+#: ../extensions/deviceicon/network.py:331
+#, python-format
+msgid "Error: %s"
+msgstr "Error: %s"
+
+#: ../extensions/deviceicon/network.py:335
+#, python-format
+msgid "Suggestion: %s"
+msgstr "Suggestion: %s"
+
+#: ../extensions/deviceicon/network.py:344
+#, python-format
+msgid "Connected for %s"
+msgstr "Connected for %s"
+
+#: ../extensions/deviceicon/network.py:350
+#: ../extensions/deviceicon/network.py:351
+#, python-format
+msgid "%d KB"
+msgstr "%d KB"
+
+#: ../extensions/deviceicon/network.py:356
+msgid "Check your PIN/PUK configuration."
+msgstr "Check your PIN/PUK configuration."
+
+#: ../extensions/deviceicon/network.py:359
+msgid "Check your Access Point Name (APN) configuration"
+msgstr "Check your Access Point Name (APN) configuration"
+
+#: ../extensions/deviceicon/network.py:363
+msgid "Check the Number configuration."
+msgstr "Check the Number configuration."
+
+#: ../extensions/deviceicon/network.py:365
+msgid "Check your configuration."
+msgstr "Check your configuration."
+
+#: ../extensions/deviceicon/network.py:621
+msgid "Mesh Network"
+msgstr "Mesh Network"
+
+#: ../extensions/deviceicon/network.py:668
+#, python-format
+msgid "Mesh Network %s"
+msgstr "Mesh Network %s"
+
+#: ../extensions/deviceicon/network.py:788
+msgid "No GSM connection available."
+msgstr "No GSM connection available."
+
+#: ../extensions/deviceicon/network.py:789
+msgid "Create a connection in the control panel."
+msgstr "Create a connection in the control panel."
+
+#: ../extensions/deviceicon/speech.py:52
+msgid "Speech"
+msgstr "Speech"
+
+#: ../extensions/deviceicon/speech.py:76
+#: ../extensions/deviceicon/speech.py:150
+#: ../extensions/deviceicon/speech.py:155
+msgid "Say selected text"
+msgstr "Say selected text"
+
+#: ../extensions/deviceicon/speech.py:83
+msgid "Stop playback"
+msgstr "Stop playback"
+
+#: ../extensions/deviceicon/speech.py:92
+msgid "Pitch"
+msgstr "Pitch"
+
+#: ../extensions/deviceicon/speech.py:107
+msgid "Rate"
+msgstr "Rate"
+
+#: ../extensions/deviceicon/speech.py:145
+msgid "Pause playback"
+msgstr "Pause playback"
+
+#: ../extensions/deviceicon/speaker.py:61
+msgid "My Speakers"
+msgstr "My Speakers"
+
+#: ../extensions/deviceicon/speaker.py:136
+msgid "Unmute"
+msgstr "Unmute"
+
+#: ../extensions/deviceicon/speaker.py:139
+msgid "Mute"
+msgstr "Mute"
+
+#: ../extensions/deviceicon/touchpad.py:38
+msgid "finger"
+msgstr "finger"
+
+#: ../extensions/deviceicon/touchpad.py:38
+msgid "stylus"
+msgstr "stylus"
+
+#: ../extensions/deviceicon/touchpad.py:64
+msgid "My touchpad"
+msgstr "My touchpad"
+
+#: ../extensions/deviceicon/volume.py:72 ../src/jarabe/view/palettes.py:184
+msgid "Show contents"
+msgstr "Show contents"
+
+#: ../extensions/globalkey/screenshot.py:61
+msgid "Mesh"
+msgstr "Mesh"
+
+#: ../extensions/globalkey/screenshot.py:63
+#: ../src/jarabe/desktop/homewindow.py:221
+#: ../src/jarabe/frame/zoomtoolbar.py:53
+msgid "Group"
+msgstr "Group"
+
+#: ../extensions/globalkey/screenshot.py:65
+#: ../src/jarabe/desktop/homewindow.py:214
+#: ../src/jarabe/desktop/viewtoolbar.py:73
+#: ../src/jarabe/frame/zoomtoolbar.py:57
+msgid "Home"
+msgstr "Home"
+
+#: ../extensions/globalkey/screenshot.py:71
+#: ../src/jarabe/frame/zoomtoolbar.py:62
+msgid "Activity"
+msgstr "Activity"
+
+#: ../extensions/globalkey/screenshot.py:74
+msgid "Screenshot"
+msgstr "Screenshot"
+
+#: ../extensions/globalkey/screenshot.py:76
+#, python-format
+msgid "Screenshot of \"%s\""
+msgstr "Screenshot of \"%s\""
+
+#: ../data/sugar.schemas.in.h:1
+msgid ""
+"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account "
+"long name."
+msgstr ""
+"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account "
+"long name."
+
+#: ../data/sugar.schemas.in.h:2
+msgid ""
+"A unix timestamp (seconds since epoch) of the last successful activity "
+"update."
+msgstr ""
+"A unix timestamp (seconds since epoch) of the last successful activity "
+"update."
+
+#: ../data/sugar.schemas.in.h:3
+msgid ""
+"Activity update backend module, followed by a period, followed by the class "
+"name."
+msgstr ""
+"Activity update backend module, followed by a period, followed by the class "
+"name."
+
+#: ../data/sugar.schemas.in.h:4
+msgid "Activity update backend."
+msgstr "Activity update backend."
+
+#: ../data/sugar.schemas.in.h:6
+msgid "Automatic update frequency."
+msgstr "Automatic update frequency."
+
+#: ../data/sugar.schemas.in.h:7
+msgid "Backup URL"
+msgstr "Backup URL"
+
+#: ../data/sugar.schemas.in.h:8
+msgid "Bundle IDs of protected activities"
+msgstr "Bundle IDs of protected activities"
+
+#: ../data/sugar.schemas.in.h:9
+msgid ""
+"Color for the XO icon that is used throughout the desktop. The string is "
+"composed of the stroke color and fill color, format is that of rgb colors. "
+"Example: #AC32FF,#9A5200"
+msgstr ""
+"Color for the XO icon that is used throughout the desktop. The string is "
+"composed of the stroke color and fill color, format is that of rgb colors. "
+"Example: #AC32FF,#9A5200"
+
+#: ../data/sugar.schemas.in.h:10
+msgid "Corner Delay"
+msgstr "Corner Delay"
+
+#: ../data/sugar.schemas.in.h:11
+msgid "Default font face"
+msgstr "Default font face"
+
+#: ../data/sugar.schemas.in.h:12
+msgid "Default font size"
+msgstr "Default font size"
+
+#: ../data/sugar.schemas.in.h:13
+msgid "Default nick"
+msgstr "Default nick"
+
+#: ../data/sugar.schemas.in.h:14
+msgid "Delay for the activation of the frame using the corners."
+msgstr "Delay for the activation of the frame using the corners."
+
+#: ../data/sugar.schemas.in.h:15
+msgid "Delay for the activation of the frame using the edges."
+msgstr "Delay for the activation of the frame using the edges."
+
+#: ../data/sugar.schemas.in.h:16
+msgid "Edge Delay"
+msgstr "Edge Delay"
+
+#: ../data/sugar.schemas.in.h:17
+msgid ""
+"Extreme power management (disables wireless radio, increases battery life)"
+msgstr ""
+"Extreme power management (disables wireless radio, increases battery life)"
+
+#: ../data/sugar.schemas.in.h:18
+msgid "Favorites Layout"
+msgstr "Favorites Layout"
+
+#: ../data/sugar.schemas.in.h:19
+msgid "Favorites resume mode"
+msgstr "Favorites resume mode"
+
+#: ../data/sugar.schemas.in.h:20
+msgid "Font face that is used throughout the desktop."
+msgstr "Font face that is used throughout the desktop."
+
+#: ../data/sugar.schemas.in.h:21
+msgid "Font size that is used throughout the desktop."
+msgstr "Font size that is used throughout the desktop."
+
+#: ../data/sugar.schemas.in.h:22
+msgid ""
+"Frequency of automatic activity updates, measured in days. 0 means disabled."
+msgstr ""
+"Frequency of automatic activity updates, measured in days. 0 means disabled."
+
+#: ../data/sugar.schemas.in.h:23
+msgid "GSM network APN (DEPRECATED/UNUSED)"
+msgstr "GSM network APN (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:24
+msgid "GSM network PIN (DEPRECATED/UNUSED)"
+msgstr "GSM network PIN (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:25
+msgid "GSM network PUK (DEPRECATED/UNUSED)"
+msgstr "GSM network PUK (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:26
+msgid "GSM network access point name configuration (DEPRECATED/UNUSED)"
+msgstr "GSM network access point name configuration (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:27
+msgid "GSM network number (DEPRECATED/UNUSED)"
+msgstr "GSM network number (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:28
+msgid "GSM network password (DEPRECATED/UNUSED)"
+msgstr "GSM network password (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:29
+msgid "GSM network password configuration (DEPRECATED/UNUSED)"
+msgstr "GSM network password configuration (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:30
+msgid ""
+"GSM network personal identification number configuration (DEPRECATED/UNUSED)"
+msgstr ""
+"GSM network personal identification number configuration (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:31
+msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)"
+msgstr "GSM network personal unlock key configuration (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:32
+msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)"
+msgstr "GSM network telephone number configuration (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:33
+msgid "GSM network username (DEPRECATED/UNUSED)"
+msgstr "GSM network username (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:34
+msgid "GSM network username configuration (DEPRECATED/UNUSED)"
+msgstr "GSM network username configuration (DEPRECATED/UNUSED)"
+
+#: ../data/sugar.schemas.in.h:35
+msgid ""
+"If TRUE, Sugar will make us searchable for the other users of the Jabber "
+"server."
+msgstr ""
+"If TRUE, Sugar will make us searchable for the other users of the Jabber "
+"server."
+
+#: ../data/sugar.schemas.in.h:36
+msgid "If TRUE, Sugar will show a \"Log out\" option."
+msgstr "If TRUE, Sugar will show a \"Log out\" option."
+
+#: ../data/sugar.schemas.in.h:37
+msgid "If TRUE, Sugar will show a \"Restart\" option."
+msgstr "If TRUE, Sugar will show a \"Restart\" option."
+
+#: ../data/sugar.schemas.in.h:38
+msgid ""
+"If TRUE, Sugar will show default Ad-hoc networks for channel 1,6 and 11. If "
+"Sugar sees no \"known\" network when it starts, it does autoconnect to an Ad-"
+"hoc network."
+msgstr ""
+"If TRUE, Sugar will show default Ad-hoc networks for channel 1,6 and 11. If "
+"Sugar sees no \"known\" network when it starts, it does autoconnect to an Ad-"
+"hoc network."
+
+#: ../data/sugar.schemas.in.h:39
+msgid "Jabber Server"
+msgstr "Jabber Server"
+
+#: ../data/sugar.schemas.in.h:40
+msgid "Keyboard layouts"
+msgstr "Keyboard layouts"
+
+#: ../data/sugar.schemas.in.h:41
+msgid "Keyboard model"
+msgstr "Keyboard model"
+
+#: ../data/sugar.schemas.in.h:42
+msgid "Keyboard options"
+msgstr "Keyboard options"
+
+#: ../data/sugar.schemas.in.h:43
+msgid "Layout of the favorites view."
+msgstr "Layout of the favorites view."
+
+#: ../data/sugar.schemas.in.h:44
+msgid ""
+"List of keyboard layouts. Each entry should be in the form layout(variant)"
+msgstr ""
+"List of keyboard layouts. Each entry should be in the form layout(variant)"
+
+#: ../data/sugar.schemas.in.h:45
+msgid "List of keyboard options."
+msgstr "List of keyboard options."
+
+#: ../data/sugar.schemas.in.h:46
+msgid "Microformat update URL."
+msgstr "Microformat update URL."
+
+#: ../data/sugar.schemas.in.h:47
+msgid "Pitch value for the speech sugar service"
+msgstr "Pitch value for the speech sugar service"
+
+#: ../data/sugar.schemas.in.h:48
+msgid "Pitch value used by the speech service in Sugar"
+msgstr "Pitch value used by the speech service in Sugar"
+
+#: ../data/sugar.schemas.in.h:49
+msgid "Power Automatic"
+msgstr "Power Automatic"
+
+#: ../data/sugar.schemas.in.h:50
+msgid "Power Extreme"
+msgstr "Power Extreme"
+
+#: ../data/sugar.schemas.in.h:51
+msgid "Publish to Gadget"
+msgstr "Publish to Gadget"
+
+#: ../data/sugar.schemas.in.h:52
+msgid "Rate value for the speech sugar service"
+msgstr "Rate value for the speech sugar service"
+
+#: ../data/sugar.schemas.in.h:53
+msgid "Rate value used by the speech service in Sugar"
+msgstr "Rate value used by the speech service in Sugar"
+
+#: ../data/sugar.schemas.in.h:54
+msgid "Setting for muting the sound device."
+msgstr "Setting for muting the sound device."
+
+#: ../data/sugar.schemas.in.h:55
+msgid "Show Log out"
+msgstr "Show Log out"
+
+#: ../data/sugar.schemas.in.h:56
+msgid "Show Restart"
+msgstr "Show Restart"
+
+#: ../data/sugar.schemas.in.h:57
+msgid "Show Sugar Ad-hoc networks"
+msgstr "Show Sugar Ad-hoc networks"
+
+#: ../data/sugar.schemas.in.h:58
+msgid "Sound Muted"
+msgstr "Sound Muted"
+
+#: ../data/sugar.schemas.in.h:59
+msgid "The keyboard model to be used"
+msgstr "The keyboard model to be used"
+
+#: ../data/sugar.schemas.in.h:60
+msgid "Timestamp of last activity update."
+msgstr "Timestamp of last activity update."
+
+#: ../data/sugar.schemas.in.h:62
+msgid "Timezone setting for the system."
+msgstr "Timezone setting for the system."
+
+#: ../data/sugar.schemas.in.h:63
+msgid "URL of the jabber server to use."
+msgstr "URL of the jabber server to use."
+
+#: ../data/sugar.schemas.in.h:64
+msgid ""
+"URL used by the microformat update backend for activity update information."
+msgstr ""
+"URL used by the microformat update backend for activity update information."
+
+#: ../data/sugar.schemas.in.h:65
+msgid "URL where the backup is saved to."
+msgstr "URL where the backup is saved to."
+
+#: ../data/sugar.schemas.in.h:66
+msgid "User Color"
+msgstr "User Color"
+
+#: ../data/sugar.schemas.in.h:67
+msgid "User Name"
+msgstr "User Name"
+
+#: ../data/sugar.schemas.in.h:68
+msgid "User name that is used throughout the desktop."
+msgstr "User name that is used throughout the desktop."
+
+#: ../data/sugar.schemas.in.h:69
+msgid ""
+"Users will not be allowed to erase these activities through the list view."
+msgstr ""
+"Users will not be allowed to erase these activities through the list view."
+
+#: ../data/sugar.schemas.in.h:70
+msgid "Volume Level"
+msgstr "Volume Level"
+
+#: ../data/sugar.schemas.in.h:71
+msgid "Volume level for the sound device."
+msgstr "Volume level for the sound device."
+
+#: ../data/sugar.schemas.in.h:72
+msgid ""
+"When in resume mode, clicking on a favorite icon will cause the last entry "
+"for that activity to be resumed."
+msgstr ""
+"When in resume mode, clicking on a favorite icon will cause the last entry "
+"for that activity to be resumed."
+
+#: ../src/jarabe/controlpanel/cmd.py:28
+#, python-format
+msgid ""
+"sugar-control-panel: WARNING, found more than one option with the same name: "
+"%s module: %r"
+msgstr ""
+"sugar-control-panel: WARNING, found more than one option with the same name: "
+"%s module: %r"
+
+#: ../src/jarabe/controlpanel/cmd.py:30
+#, python-format
+msgid "sugar-control-panel: key=%s not an available option"
+msgstr "sugar-control-panel: key=%s not an available option"
+
+#: ../src/jarabe/controlpanel/cmd.py:31
+#, python-format
+msgid "sugar-control-panel: %s"
+msgstr "sugar-control-panel: %s"
+
+#. TRANS: Translators, there's a empty line at the end of this string,
+#. which must appear in the translated string (msgstr) as well.
+#: ../src/jarabe/controlpanel/cmd.py:38
+msgid ""
+"Usage: sugar-control-panel [ option ] key [ args ... ] \n"
+" Control for the sugar environment. \n"
+" Options: \n"
+" -h show this help message and exit \n"
+" -l list all the available options \n"
+" -h key show information about this key \n"
+" -g key get the current value of the key \n"
+" -s key set the current value for the key \n"
+" -c key clear the current value for the key \n"
+" "
+msgstr ""
+"Usage: sugar-control-panel [ option ] key [ args ... ] \n"
+" Control for the sugar environment. \n"
+" Options: \n"
+" -h show this help message and exit \n"
+" -l list all the available options \n"
+" -h key show information about this key \n"
+" -g key get the current value of the key \n"
+" -s key set the current value for the key \n"
+" -c key clear the current value for the key \n"
+" "
+
+#: ../src/jarabe/controlpanel/cmd.py:52
+msgid "To apply your changes you have to restart Sugar.\n"
+msgstr "To apply your changes you have to restart Sugar.\n"
+
+#: ../src/jarabe/controlpanel/gui.py:323 ../src/jarabe/journal/palettes.py:187
+#: ../src/jarabe/journal/palettes.py:350 ../src/jarabe/journal/palettes.py:410
+#: ../src/jarabe/journal/volumestoolbar.py:302
+msgid "Warning"
+msgstr "Warning"
+
+#: ../src/jarabe/controlpanel/gui.py:324
+#: ../src/jarabe/controlpanel/sectionview.py:41
+msgid "Changes require restart"
+msgstr "Changes require restart"
+
+#: ../src/jarabe/controlpanel/gui.py:328
+msgid "Cancel changes"
+msgstr "Cancel changes"
+
+#: ../src/jarabe/controlpanel/gui.py:333
+msgid "Later"
+msgstr "Later"
+
+#: ../src/jarabe/controlpanel/gui.py:337
+msgid "Restart now"
+msgstr "Restart now"
+
+#: ../src/jarabe/controlpanel/toolbar.py:56
+#: ../src/jarabe/desktop/viewtoolbar.py:129
+#: ../src/jarabe/journal/journaltoolbox.py:89
+#, python-format
+msgid "Search in %s"
+msgstr "Search in %s"
+
+#: ../src/jarabe/controlpanel/toolbar.py:56
+msgid "Settings"
+msgstr "Settings"
+
+#: ../src/jarabe/controlpanel/toolbar.py:65 ../src/jarabe/intro/window.py:211
+msgid "Done"
+msgstr "Done"
+
+#: ../src/jarabe/controlpanel/toolbar.py:127
+#: ../src/jarabe/desktop/favoritesview.py:374
+#: ../src/jarabe/desktop/keydialog.py:105
+msgid "Ok"
+msgstr "Ok"
+
+#: ../src/jarabe/desktop/activitieslist.py:282
+#, python-format
+msgid "Version %s"
+msgstr "Version %s"
+
+#: ../src/jarabe/desktop/activitieslist.py:385
+#: ../src/jarabe/journal/listview.py:475 ../src/jarabe/journal/iconview.py:299
+msgid "Clear search"
+msgstr "Clear search"
+
+#: ../src/jarabe/desktop/activitieslist.py:469
+msgid "No matching activities"
+msgstr "No matching activities"
+
+#: ../src/jarabe/desktop/activitieslist.py:505
+msgid "Confirm erase"
+msgstr "Confirm erase"
+
+#: ../src/jarabe/desktop/activitieslist.py:507
+#, python-format
+msgid "Confirm erase: Do you want to permanently erase %s?"
+msgstr "Confirm erase: Do you want to permanently erase %s?"
+
+#: ../src/jarabe/desktop/activitieslist.py:511
+#: ../src/jarabe/frame/clipboardmenu.py:65
+#: ../src/jarabe/view/viewsource.py:288
+msgid "Keep"
+msgstr "Keep"
+
+#: ../src/jarabe/desktop/activitieslist.py:514
+#: ../src/jarabe/desktop/activitieslist.py:578
+#: ../src/jarabe/journal/expandedentry.py:153
+#: ../src/jarabe/journal/journaltoolbox.py:443
+#: ../src/jarabe/journal/journaltoolbox.py:475
+#: ../src/jarabe/journal/journaltoolbox.py:689
+#: ../src/jarabe/journal/journaltoolbox.py:695
+#: ../src/jarabe/journal/palettes.py:132 ../src/jarabe/journal/palettes.py:154
+msgid "Erase"
+msgstr "Erase"
+
+#: ../src/jarabe/desktop/activitieslist.py:594
+msgid "Remove favorite"
+msgstr "Remove favorite"
+
+#: ../src/jarabe/desktop/activitieslist.py:598
+msgid "Make favorite"
+msgstr "Make favorite"
+
+#. TRANS: label for the freeform layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:199
+msgid "Freeform"
+msgstr "Freeform"
+
+#. TRANS: label for the ring layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:295
+msgid "Ring"
+msgstr "Ring"
+
+#. TRANS: label for the spiral layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:459
+msgid "Spiral"
+msgstr "Spiral"
+
+#. TRANS: label for the box layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:527
+msgid "Box"
+msgstr "Box"
+
+#. TRANS: label for the box layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:570
+msgid "Triangle"
+msgstr "Triangle"
+
+#: ../src/jarabe/desktop/favoritesview.py:365
+msgid "Registration Failed"
+msgstr "Registration Failed"
+
+#: ../src/jarabe/desktop/favoritesview.py:368
+msgid "Registration Successful"
+msgstr "Registration Successful"
+
+#: ../src/jarabe/desktop/favoritesview.py:369
+msgid "You are now registered with your school server."
+msgstr "You are now registered with your school server."
+
+#: ../src/jarabe/desktop/favoritesview.py:653
+msgid "Register"
+msgstr "Register"
+
+#: ../src/jarabe/desktop/favoritesview.py:656
+#: ../src/jarabe/desktop/favoritesview.py:672
+msgid "Register again"
+msgstr "Register again"
+
+#: ../src/jarabe/desktop/homewindow.py:228
+#: ../src/jarabe/frame/zoomtoolbar.py:49
+msgid "Neighborhood"
+msgstr "Neighborhood"
+
+#: ../src/jarabe/desktop/keydialog.py:94
+#, python-format
+msgid ""
+"A wireless encryption key is required for\n"
+" the wireless network '%s'."
+msgstr ""
+"A wireless encryption key is required for\n"
+" the wireless network '%s'."
+
+#: ../src/jarabe/desktop/keydialog.py:150
+msgid "Key Type:"
+msgstr "Key Type:"
+
+#: ../src/jarabe/desktop/keydialog.py:170
+msgid "Authentication Type:"
+msgstr "Authentication Type:"
+
+#: ../src/jarabe/desktop/keydialog.py:233
+msgid "WPA & WPA2 Personal"
+msgstr "WPA & WPA2 Personal"
+
+#: ../src/jarabe/desktop/keydialog.py:242
+msgid "Wireless Security:"
+msgstr "Wireless Security:"
+
+#. TRANS: Action label for resuming an activity.
+#: ../src/jarabe/desktop/meshbox.py:82
+#: ../src/jarabe/journal/journaltoolbox.py:548
+#: ../src/jarabe/journal/palettes.py:77 ../src/jarabe/view/palettes.py:96
+msgid "Resume"
+msgstr "Resume"
+
+#: ../src/jarabe/desktop/meshbox.py:89
+#: ../src/jarabe/frame/activitiestray.py:190
+msgid "Join"
+msgstr "Join"
+
+#: ../src/jarabe/desktop/networkviews.py:497
+#, python-format
+msgid "Ad-hoc Network %d"
+msgstr "Ad-hoc Network %d"
+
+#: ../src/jarabe/desktop/networkviews.py:639
+#, python-format
+msgid "Mesh Network %d"
+msgstr "Mesh Network %d"
+
+#: ../src/jarabe/desktop/schoolserver.py:144
+msgid "Cannot connect to the server."
+msgstr "Cannot connect to the server."
+
+#: ../src/jarabe/desktop/schoolserver.py:151
+msgid "The server could not complete the request."
+msgstr "The server could not complete the request."
+
+#: ../src/jarabe/desktop/viewtoolbar.py:95
+msgid "List view"
+msgstr "List view"
+
+#: ../src/jarabe/desktop/viewtoolbar.py:97
+#: ../src/jarabe/desktop/viewtoolbar.py:195
+#: ../src/jarabe/desktop/viewtoolbar.py:209
+#, python-format
+#, python-format,
+msgid "<Ctrl>%d"
+msgstr "<Ctrl>%d"
+
+#: ../src/jarabe/desktop/viewtoolbar.py:208
+#, python-format
+#, python-format,
+msgid "Favorites view %d"
+msgstr "Favorites view %d"
+
+#: ../src/jarabe/frame/activitiestray.py:195
+#: ../src/jarabe/frame/activitiestray.py:593
+msgid "Decline"
+msgstr "Decline"
+
+#: ../src/jarabe/frame/activitiestray.py:534
+#, python-format
+msgid "%dB"
+msgstr "%dB"
+
+#: ../src/jarabe/frame/activitiestray.py:536
+#, python-format
+msgid "%dKB"
+msgstr "%dKB"
+
+#: ../src/jarabe/frame/activitiestray.py:538
+#, python-format
+msgid "%dMB"
+msgstr "%dMB"
+
+#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024
+#: ../src/jarabe/frame/activitiestray.py:556
+#, python-format
+msgid "%s of %s"
+msgstr "%s of %s"
+
+#: ../src/jarabe/frame/activitiestray.py:570
+#, python-format
+#, python-format,
+msgid "Transfer from %s"
+msgstr "Transfer from %s"
+
+#: ../src/jarabe/frame/activitiestray.py:585
+msgid "Accept"
+msgstr "Accept"
+
+#: ../src/jarabe/frame/activitiestray.py:653
+#: ../src/jarabe/frame/activitiestray.py:666
+#: ../src/jarabe/frame/activitiestray.py:807
+msgid "Dismiss"
+msgstr "Dismiss"
+
+#: ../src/jarabe/frame/activitiestray.py:680
+msgid "The other participant canceled the file transfer"
+msgstr "The other participant canceled the file transfer"
+
+#: ../src/jarabe/frame/activitiestray.py:730
+#, python-format
+#, python-format,
+msgid "Transfer to %s"
+msgstr "Transfer to %s"
+
+#: ../src/jarabe/frame/clipboardmenu.py:54
+msgctxt "Clipboard"
+msgid "Remove"
+msgstr "Remove"
+
+#: ../src/jarabe/frame/clipboardmenu.py:60
+#: ../src/jarabe/frame/clipboardmenu.py:83
+msgid "Open"
+msgstr "Open"
+
+#: ../src/jarabe/frame/clipboardmenu.py:88
+msgid "Open with"
+msgstr "Open with"
+
+#: ../src/jarabe/frame/clipboardobject.py:50
+#, python-format
+msgid "%s clipping"
+msgstr "%s clipping"
+
+#: ../src/jarabe/frame/zoomtoolbar.py:50
+msgid "F1"
+msgstr "F1"
+
+#: ../src/jarabe/frame/zoomtoolbar.py:54
+msgid "F2"
+msgstr "F2"
+
+#: ../src/jarabe/frame/zoomtoolbar.py:58
+msgid "F3"
+msgstr "F3"
+
+#: ../src/jarabe/frame/zoomtoolbar.py:63
+msgid "F4"
+msgstr "F4"
+
+#: ../src/jarabe/intro/window.py:106
+msgid "Name:"
+msgstr "Name:"
+
+#: ../src/jarabe/intro/window.py:136
+msgid "Click to change color:"
+msgstr "Click to change color:"
+
+#: ../src/jarabe/intro/window.py:200 ../src/jarabe/journal/detailview.py:95
+msgid "Back"
+msgstr "Back"
+
+#: ../src/jarabe/intro/window.py:214
+msgid "Next"
+msgstr "Next"
+
+#: ../src/jarabe/journal/expandedentry.py:155
+#: ../src/jarabe/journal/journaltoolbox.py:477
+#: ../src/jarabe/journal/palettes.py:156
+#, python-format
+msgid "Do you want to permanently erase \"%s\"?"
+msgstr "Do you want to permanently erase \"%s\"?"
+
+#: ../src/jarabe/journal/expandedentry.py:296
+#: ../src/jarabe/journal/listmodel.py:159 ../src/jarabe/journal/model.py:721
+#: ../src/jarabe/journal/palettes.py:70 ../src/jarabe/journal/palettes.py:597
+#: ../src/jarabe/journal/volumestoolbar.py:131
+#: ../src/jarabe/journal/iconmodel.py:110
+msgid "Untitled"
+msgstr "Untitled"
+
+#: ../src/jarabe/journal/expandedentry.py:367
+msgid "No preview"
+msgstr "No preview"
+
+#: ../src/jarabe/journal/expandedentry.py:382
+#, python-format
+msgid "Kind: %s"
+msgstr "Kind: %s"
+
+#: ../src/jarabe/journal/expandedentry.py:382
+#: ../src/jarabe/journal/listmodel.py:165
+#: ../src/jarabe/journal/listmodel.py:173
+msgid "Unknown"
+msgstr "Unknown"
+
+#: ../src/jarabe/journal/expandedentry.py:383
+#, python-format
+msgid "Date: %s"
+msgstr "Date: %s"
+
+#: ../src/jarabe/journal/expandedentry.py:384
+#, python-format
+msgid "Size: %s"
+msgstr "Size: %s"
+
+#: ../src/jarabe/journal/expandedentry.py:411
+#: ../src/jarabe/journal/misc.py:109
+msgid "No date"
+msgstr "No date"
+
+#: ../src/jarabe/journal/expandedentry.py:420
+msgid "Participants:"
+msgstr "Participants:"
+
+#: ../src/jarabe/journal/expandedentry.py:458
+msgid "Description:"
+msgstr "Description:"
+
+#: ../src/jarabe/journal/expandedentry.py:464
+msgid "Tags:"
+msgstr "Tags:"
+
+#: ../src/jarabe/journal/expandedentry.py:469
+msgid "Comments:"
+msgstr "Comments:"
+
+#: ../src/jarabe/journal/journalactivity.py:140
+#: ../src/jarabe/journal/journaltoolbox.py:89
+#: ../src/jarabe/journal/palettes.py:248
+#: ../src/jarabe/journal/volumestoolbar.py:363
+msgid "Journal"
+msgstr "Journal"
+
+#: ../src/jarabe/journal/journaltoolbox.py:98
+msgid "Favorite entries"
+msgstr "Favorite entries"
+
+#: ../src/jarabe/journal/journaltoolbox.py:134
+msgid "Anytime"
+msgstr "Anytime"
+
+#: ../src/jarabe/journal/journaltoolbox.py:136
+msgid "Today"
+msgstr "Today"
+
+#: ../src/jarabe/journal/journaltoolbox.py:138
+msgid "Since yesterday"
+msgstr "Since yesterday"
+
+#. TRANS: Filter entries modified during the last 7 days.
+#: ../src/jarabe/journal/journaltoolbox.py:140
+msgid "Past week"
+msgstr "Past week"
+
+#. TRANS: Filter entries modified during the last 30 days.
+#: ../src/jarabe/journal/journaltoolbox.py:142
+msgid "Past month"
+msgstr "Past month"
+
+#. TRANS: Filter entries modified during the last 356 days.
+#: ../src/jarabe/journal/journaltoolbox.py:144
+msgid "Past year"
+msgstr "Past year"
+
+#: ../src/jarabe/journal/journaltoolbox.py:151
+msgid "Anyone"
+msgstr "Anyone"
+
+#: ../src/jarabe/journal/journaltoolbox.py:153
+msgid "My friends"
+msgstr "My friends"
+
+#: ../src/jarabe/journal/journaltoolbox.py:154
+msgid "My class"
+msgstr "My class"
+
+#: ../src/jarabe/journal/journaltoolbox.py:327
+msgid "Anything"
+msgstr "Anything"
+
+#: ../src/jarabe/journal/journaltoolbox.py:419
+#: ../src/jarabe/journal/palettes.py:99
+msgid "Copy to"
+msgstr "Copy to"
+
+#: ../src/jarabe/journal/journaltoolbox.py:427
+#: ../src/jarabe/journal/palettes.py:110 ../src/jarabe/view/viewsource.py:282
+msgid "Duplicate"
+msgstr "Duplicate"
+
+#: ../src/jarabe/journal/journaltoolbox.py:433
+msgid "Refresh"
+msgstr "Refresh"
+
+#: ../src/jarabe/journal/journaltoolbox.py:470
+#: ../src/jarabe/journal/palettes.py:149 ../src/jarabe/journal/palettes.py:360
+#: ../src/jarabe/journal/volumestoolbar.py:310
+#, python-format
+msgid "Error while copying the entry. %s"
+msgstr "Error while copying the entry. %s"
+
+#: ../src/jarabe/journal/journaltoolbox.py:471
+#: ../src/jarabe/journal/palettes.py:150 ../src/jarabe/journal/palettes.py:361
+#: ../src/jarabe/journal/volumestoolbar.py:311
+msgid "Error"
+msgstr "Error"
+
+#. TRANS: Action label for starting an entry.
+#: ../src/jarabe/journal/journaltoolbox.py:551
+#: ../src/jarabe/journal/palettes.py:80
+msgid "Start"
+msgstr "Start"
+
+#: ../src/jarabe/journal/journaltoolbox.py:579
+msgid "Sort by date modified"
+msgstr "Sort by date modified"
+
+#: ../src/jarabe/journal/journaltoolbox.py:580
+msgid "Sort by date created"
+msgstr "Sort by date created"
+
+#: ../src/jarabe/journal/journaltoolbox.py:581
+msgid "Sort by size"
+msgstr "Sort by size"
+
+#: ../src/jarabe/journal/journaltoolbox.py:590
+msgid "Sort view"
+msgstr "Sort view"
+
+#: ../src/jarabe/journal/journaltoolbox.py:661
+msgid "Deselect all"
+msgstr "Deselect all"
+
+#: ../src/jarabe/journal/journaltoolbox.py:674
+msgid "Select all"
+msgstr "Select all"
+
+#: ../src/jarabe/journal/journaltoolbox.py:700
+#, python-format
+msgid "Do you want to erase %d entry?"
+msgid_plural "Do you want to erase %d entries?"
+msgstr[0] "Do you want to erase %d entry?"
+msgstr[1] "Do you want to erase %d entries?"
+
+#: ../src/jarabe/journal/journaltoolbox.py:714
+#: ../src/jarabe/journal/palettes.py:364
+msgid "Copy"
+msgstr "Copy"
+
+#. TRANS: Do not translate %(selected)d and %(total)d.
+#: ../src/jarabe/journal/journaltoolbox.py:759
+#, python-format
+msgid "Selected %(selected)d of %(total)d"
+msgstr "Selected %(selected)d of %(total)d"
+
+#: ../src/jarabe/journal/listview.py:387 ../src/jarabe/journal/iconview.py:211
+msgid "Your Journal is empty"
+msgstr "Your Journal is empty"
+
+#: ../src/jarabe/journal/listview.py:390 ../src/jarabe/journal/iconview.py:214
+msgid "Your documents folder is empty"
+msgstr "Your documents folder is empty"
+
+#: ../src/jarabe/journal/listview.py:392 ../src/jarabe/journal/iconview.py:216
+msgid "The device is empty"
+msgstr "The device is empty"
+
+#: ../src/jarabe/journal/listview.py:394 ../src/jarabe/journal/iconview.py:218
+msgid "No matching entries"
+msgstr "No matching entries"
+
+#: ../src/jarabe/journal/misc.py:252
+#, python-format
+msgid "Older Version Of %s Activity"
+msgstr "Older Version Of %s Activity"
+
+#: ../src/jarabe/journal/misc.py:253
+#, python-format
+msgid "Do you want to downgrade to version %s"
+msgstr "Do you want to downgrade to version %s"
+
+#: ../src/jarabe/journal/modalalert.py:65
+msgid "Your Journal is full"
+msgstr "Your Journal is full"
+
+#: ../src/jarabe/journal/modalalert.py:70
+msgid "Please delete some old Journal entries to make space for new ones."
+msgstr "Please delete some old Journal entries to make space for new ones."
+
+#: ../src/jarabe/journal/modalalert.py:84
+msgid "Show Journal"
+msgstr "Show Journal"
+
+#: ../src/jarabe/journal/objectchooser.py:170
+msgid "Choose an object"
+msgstr "Choose an object"
+
+#: ../src/jarabe/journal/objectchooser.py:175
+#, python-format
+msgid "Choose an object to open with %s activity"
+msgstr "Choose an object to open with %s activity"
+
+#: ../src/jarabe/journal/objectchooser.py:183
+#: ../src/jarabe/view/viewsource.py:418
+msgid "Close"
+msgstr "Close"
+
+#: ../src/jarabe/journal/palettes.py:78
+msgid "Resume with"
+msgstr "Resume with"
+
+#: ../src/jarabe/journal/palettes.py:81
+msgid "Start with"
+msgstr "Start with"
+
+#: ../src/jarabe/journal/palettes.py:94 ../src/jarabe/journal/palettes.py:489
+msgid "No activity to start entry"
+msgstr "No activity to start entry"
+
+#: ../src/jarabe/journal/palettes.py:118
+msgid "Send to"
+msgstr "Send to"
+
+#: ../src/jarabe/journal/palettes.py:127
+msgid "View Details"
+msgstr "View Details"
+
+#: ../src/jarabe/journal/palettes.py:186
+msgid "Entries without a file cannot be sent."
+msgstr "Entries without a file cannot be sent."
+
+#: ../src/jarabe/journal/palettes.py:260
+#: ../src/jarabe/journal/volumestoolbar.py:211
+msgid "Documents"
+msgstr "Documents"
+
+#: ../src/jarabe/journal/palettes.py:349 ../src/jarabe/journal/palettes.py:409
+#: ../src/jarabe/journal/volumestoolbar.py:301
+msgid "Entries without a file cannot be copied."
+msgstr "Entries without a file cannot be copied."
+
+#: ../src/jarabe/journal/palettes.py:369
+#, python-format
+msgid "Do you want to copy %d entry?"
+msgid_plural "Do you want to copy %d entries?"
+msgstr[0] "Do you want to copy %d entry?"
+msgstr[1] "Do you want to copy %d entries?"
+
+#: ../src/jarabe/journal/palettes.py:394
+msgid "Clipboard"
+msgstr "Clipboard"
+
+#: ../src/jarabe/journal/palettes.py:454
+msgid "No friends present"
+msgstr "No friends present"
+
+#: ../src/jarabe/journal/palettes.py:459
+msgid "No valid connection found"
+msgstr "No valid connection found"
+
+#: ../src/jarabe/journal/palettes.py:487
+msgid "No activity to resume entry"
+msgstr "No activity to resume entry"
+
+#: ../src/jarabe/journal/palettes.py:556 ../src/jarabe/view/palettes.py:110
+msgid "Stop"
+msgstr "Stop"
+
+#: ../src/jarabe/journal/palettes.py:561
+msgid "Continue"
+msgstr "Continue"
+
+#: ../src/jarabe/journal/palettes.py:598
+#, python-format
+msgid "%(index)d of %(total)d : %(object_title)s"
+msgstr "%(index)d of %(total)d : %(object_title)s"
+
+#: ../src/jarabe/journal/volumestoolbar.py:386
+#: ../src/jarabe/view/palettes.py:225 ../src/jarabe/view/palettes.py:292
+#, python-format
+msgid "%(free_space)d MB Free"
+msgstr "%(free_space)d MB Free"
+
+#: ../src/jarabe/model/network.py:214
+msgid "The reason for the device state change is unknown."
+msgstr "The reason for the device state change is unknown."
+
+#: ../src/jarabe/model/network.py:216
+msgid "The state change is normal."
+msgstr "The state change is normal."
+
+#: ../src/jarabe/model/network.py:218
+msgid "The device is now managed."
+msgstr "The device is now managed."
+
+#: ../src/jarabe/model/network.py:220
+msgid "The device is no longer managed."
+msgstr "The device is no longer managed."
+
+#: ../src/jarabe/model/network.py:222
+msgid "The device could not be readied for configuration."
+msgstr "The device could not be readied for configuration."
+
+#: ../src/jarabe/model/network.py:224
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc)."
+msgstr ""
+"IP configuration could not be reserved (no available address, timeout, etc)."
+
+#: ../src/jarabe/model/network.py:227
+msgid "The IP configuration is no longer valid."
+msgstr "The IP configuration is no longer valid."
+
+#: ../src/jarabe/model/network.py:229
+msgid "Secrets were required, but not provided."
+msgstr "Secrets were required, but not provided."
+
+#: ../src/jarabe/model/network.py:231
+msgid ""
+"The 802.1X supplicant disconnected from the access point or authentication "
+"server."
+msgstr ""
+"The 802.1X supplicant disconnected from the access point or authentication "
+"server."
+
+#: ../src/jarabe/model/network.py:234
+msgid "Configuration of the 802.1X supplicant failed."
+msgstr "Configuration of the 802.1X supplicant failed."
+
+#: ../src/jarabe/model/network.py:236
+msgid "The 802.1X supplicant quit or failed unexpectedly."
+msgstr "The 802.1X supplicant quit or failed unexpectedly."
+
+#: ../src/jarabe/model/network.py:238
+msgid "The 802.1X supplicant took too long to authenticate."
+msgstr "The 802.1X supplicant took too long to authenticate."
+
+#: ../src/jarabe/model/network.py:240
+msgid "The PPP service failed to start within the allowed time."
+msgstr "The PPP service failed to start within the allowed time."
+
+#: ../src/jarabe/model/network.py:242
+msgid "The PPP service disconnected unexpectedly."
+msgstr "The PPP service disconnected unexpectedly."
+
+#: ../src/jarabe/model/network.py:244
+msgid "The PPP service quit or failed unexpectedly."
+msgstr "The PPP service quit or failed unexpectedly."
+
+#: ../src/jarabe/model/network.py:246
+msgid "The DHCP service failed to start within the allowed time."
+msgstr "The DHCP service failed to start within the allowed time."
+
+#: ../src/jarabe/model/network.py:248
+msgid "The DHCP service reported an unexpected error."
+msgstr "The DHCP service reported an unexpected error."
+
+#: ../src/jarabe/model/network.py:250
+msgid "The DHCP service quit or failed unexpectedly."
+msgstr "The DHCP service quit or failed unexpectedly."
+
+#: ../src/jarabe/model/network.py:252
+msgid "The shared connection service failed to start."
+msgstr "The shared connection service failed to start."
+
+#: ../src/jarabe/model/network.py:254
+msgid "The shared connection service quit or failed unexpectedly."
+msgstr "The shared connection service quit or failed unexpectedly."
+
+#: ../src/jarabe/model/network.py:257
+msgid "The AutoIP service failed to start."
+msgstr "The AutoIP service failed to start."
+
+#: ../src/jarabe/model/network.py:259
+msgid "The AutoIP service reported an unexpected error."
+msgstr "The AutoIP service reported an unexpected error."
+
+#: ../src/jarabe/model/network.py:261
+msgid "The AutoIP service quit or failed unexpectedly."
+msgstr "The AutoIP service quit or failed unexpectedly."
+
+#: ../src/jarabe/model/network.py:263
+msgid "Dialing failed because the line was busy."
+msgstr "Dialing failed because the line was busy."
+
+#: ../src/jarabe/model/network.py:265
+msgid "Dialing failed because there was no dial tone."
+msgstr "Dialing failed because there was no dial tone."
+
+#: ../src/jarabe/model/network.py:267
+msgid "Dialing failed because there was no carrier."
+msgstr "Dialing failed because there was no carrier."
+
+#: ../src/jarabe/model/network.py:269
+msgid "Dialing timed out."
+msgstr "Dialing timed out."
+
+#: ../src/jarabe/model/network.py:271
+msgid "Dialing failed."
+msgstr "Dialing failed."
+
+#: ../src/jarabe/model/network.py:273
+msgid "Modem initialization failed."
+msgstr "Modem initialization failed."
+
+#: ../src/jarabe/model/network.py:275
+msgid "Failed to select the specified GSM APN"
+msgstr "Failed to select the specified GSM APN"
+
+#: ../src/jarabe/model/network.py:277
+msgid "Not searching for networks."
+msgstr "Not searching for networks."
+
+#: ../src/jarabe/model/network.py:279
+msgid "Network registration was denied."
+msgstr "Network registration was denied."
+
+#: ../src/jarabe/model/network.py:281
+msgid "Network registration timed out."
+msgstr "Network registration timed out."
+
+#: ../src/jarabe/model/network.py:283
+msgid "Failed to register with the requested GSM network."
+msgstr "Failed to register with the requested GSM network."
+
+#: ../src/jarabe/model/network.py:285
+msgid "PIN check failed."
+msgstr "PIN check failed."
+
+#: ../src/jarabe/model/network.py:287
+msgid "Necessary firmware for the device may be missing."
+msgstr "Necessary firmware for the device may be missing."
+
+#: ../src/jarabe/model/network.py:289
+msgid "The device was removed."
+msgstr "The device was removed."
+
+#: ../src/jarabe/model/network.py:291
+msgid "NetworkManager went to sleep."
+msgstr "NetworkManager went to sleep."
+
+#: ../src/jarabe/model/network.py:293
+msgid "The device's active connection was removed or disappeared."
+msgstr "The device's active connection was removed or disappeared."
+
+#: ../src/jarabe/model/network.py:296
+msgid "A user or client requested the disconnection."
+msgstr "A user or client requested the disconnection."
+
+#: ../src/jarabe/model/network.py:298
+msgid "The device's carrier/link changed."
+msgstr "The device's carrier/link changed."
+
+#: ../src/jarabe/model/network.py:300
+msgid "The device's existing connection was assumed."
+msgstr "The device's existing connection was assumed."
+
+#: ../src/jarabe/model/network.py:302
+msgid "The supplicant is now available."
+msgstr "The supplicant is now available."
+
+#: ../src/jarabe/model/network.py:304
+msgid "The modem could not be found."
+msgstr "The modem could not be found."
+
+#: ../src/jarabe/model/network.py:306
+msgid "The Bluetooth connection failed or timed out."
+msgstr "The Bluetooth connection failed or timed out."
+
+#: ../src/jarabe/model/network.py:308
+msgid "Unused."
+msgstr "Unused."
+
+#: ../src/jarabe/view/buddymenu.py:72
+msgid "Remove friend"
+msgstr "Remove friend"
+
+#: ../src/jarabe/view/buddymenu.py:75
+msgid "Make friend"
+msgstr "Make friend"
+
+#: ../src/jarabe/view/buddymenu.py:91
+msgid "Shutdown"
+msgstr "Shutdown"
+
+#: ../src/jarabe/view/buddymenu.py:98
+msgid "Restart"
+msgstr "Restart"
+
+#: ../src/jarabe/view/buddymenu.py:104
+msgid "Logout"
+msgstr "Logout"
+
+#: ../src/jarabe/view/buddymenu.py:109
+msgid "My Settings"
+msgstr "My Settings"
+
+#: ../src/jarabe/view/buddymenu.py:149
+#, python-format
+msgid "Invite to %s"
+msgstr "Invite to %s"
+
+#: ../src/jarabe/view/launcher.py:144
+#, python-format
+msgid "<b>%s</b> failed to start."
+msgstr "<b>%s</b> failed to start."
+
+#: ../src/jarabe/view/palettes.py:51
+msgid "Starting..."
+msgstr "Starting..."
+
+#: ../src/jarabe/view/palettes.py:61
+msgid "Activity failed to start"
+msgstr "Activity failed to start"
+
+#. TODO: share-with, keep
+#: ../src/jarabe/view/palettes.py:102
+msgid "View Source"
+msgstr "View Source"
+
+#: ../src/jarabe/view/palettes.py:153
+msgid "Start new"
+msgstr "Start new"
+
+#: ../src/jarabe/view/palettes.py:241
+msgctxt "Volume"
+msgid "Remove"
+msgstr "Remove"
+
+#: ../src/jarabe/view/viewsource.py:271
+msgid "Instance Source"
+msgstr "Instance Source"
+
+#: ../src/jarabe/view/viewsource.py:320
+msgid "Source"
+msgstr "Source"
+
+#: ../src/jarabe/view/viewsource.py:382
+msgid "Activity Bundle Source"
+msgstr "Activity Bundle Source"
+
+#: ../src/jarabe/view/viewsource.py:401
+msgid "Sugar Toolkit Source"
+msgstr "Sugar Toolkit Source"
+
+#: ../src/jarabe/view/viewsource.py:408
+#, python-format
+#, python-format,
+msgid "View source: %s"
+msgstr "View source: %s"
+
+#: ../src/jarabe/view/viewsource.py:409
+#, python-format
+msgid "View source: %r"
+msgstr "View source: %r"
+
+#~ msgid "<Ctrl>1"
+#~ msgstr "<Ctrl>1"
+
+#~ msgid "Update your activities to ensure compatibility with your new software"
+#~ msgstr "Update your activities to ensure compatibility with your new software"
+
+#~ msgid "Check now"
+#~ msgstr "Check now"
+
+#~ msgid "Sugar in a window"
+#~ msgstr "Sugar in a window"
+
+#~ msgid "Software update"
+#~ msgstr "Software update"
+
+#~ msgid "Search"
+#~ msgstr "Search"
+
+#~ msgid "Additional directories which can contain updated translations."
+#~ msgstr "Additional directories which can contain updated translations."
+
+#~ msgid "Directory to search for translations"
+#~ msgstr "Directory to search for translations"
+
+#~ msgid "Error in extreme pm argument, use on/off."
+#~ msgstr "Error in extreme pm argument, use on/off."
diff --git b/po/kab.po a/po/kab.po
new file mode 100644
index 0000000..66c4bee
--- /dev/null
+++ a/po/kab.po
@@ -0,0 +1,2414 @@
+# 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: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2016-01-30 14:24+0000\n"
+"PO-Revision-Date: 2017-10-15 20:28+0000\n"
+"Last-Translator: Yacine-Bouklif <yacine_tizi2003@yahoo.fr>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: kab\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 2.5.1.1\n"
+"X-POOTLE-MTIME: 1508099328.000000\n"
+
+#: ../data/org.sugarlabs.gschema.xml.h:1
+msgid "Migrated to GSettings"
+msgstr "Yuneg ar GSettings"
+
+#: ../data/org.sugarlabs.gschema.xml.h:2
+msgid "This key shows whether or not GConf values were migrated to GSettings"
+msgstr ""
+"Tasarutt-agi teskan-d ma yella neɣ ala azalen n GConf unagen ar GSettings"
+
+#: ../data/org.sugarlabs.gschema.xml.h:3 ../data/sugar.schemas.in.h:11
+msgid "Backup URL"
+msgstr "Asekles n URL"
+
+#: ../data/org.sugarlabs.gschema.xml.h:4 ../data/sugar.schemas.in.h:12
+msgid "URL where the backup is saved to."
+msgstr "Tansa URL n usekles n uḥraz."
+
+#: ../data/org.sugarlabs.gschema.xml.h:5 ../data/sugar.schemas.in.h:31
+msgid "Show Log out"
+msgstr "Sken tuffɣa"
+
+#: ../data/org.sugarlabs.gschema.xml.h:6 ../data/sugar.schemas.in.h:32
+msgid "If TRUE, Sugar will show a \"Log out\" option."
+msgstr "Ma IH, Sugar ad d-yesken asefran \"Ffeɣ\"."
+
+#: ../data/org.sugarlabs.gschema.xml.h:7 ../data/sugar.schemas.in.h:33
+msgid "Show Restart"
+msgstr "Sken Ales Asenker"
+
+#: ../data/org.sugarlabs.gschema.xml.h:8 ../data/sugar.schemas.in.h:34
+msgid "If TRUE, Sugar will show a \"Restart\" option."
+msgstr "Ma IH, Sugar ad d-yesken asefran \"Ales Asenker\"."
+
+#: ../data/org.sugarlabs.gschema.xml.h:9 ../data/sugar.schemas.in.h:35
+msgid "Show Shutdown"
+msgstr "Sken Sens"
+
+#: ../data/org.sugarlabs.gschema.xml.h:10 ../data/sugar.schemas.in.h:36
+msgid "If TRUE, Sugar will show a \"Shutdown\" option."
+msgstr "Ma IH, Sugar ad d-yesken asefran \"Sens\"."
+
+#: ../data/org.sugarlabs.gschema.xml.h:11 ../data/sugar.schemas.in.h:37
+msgid "Show Register"
+msgstr "Sken ajerred"
+
+#: ../data/org.sugarlabs.gschema.xml.h:12 ../data/sugar.schemas.in.h:38
+msgid "If TRUE, Sugar will show a \"Register\" option in the buddy palette."
+msgstr "Ma IH, Sugar ad d-yesken asefran \"Ajerred\"."
+
+#: ../data/org.sugarlabs.gschema.xml.h:13 ../data/sugar.schemas.in.h:63
+msgid "Bundle IDs of protected activities"
+msgstr "Isulayen n iukemmes n irmuden yettwammestnen"
+
+#: ../data/org.sugarlabs.gschema.xml.h:14 ../data/sugar.schemas.in.h:64
+msgid ""
+"Users will not be allowed to erase these activities through the list view."
+msgstr "Iseqdacen ur ttwasirgen ara ad kksen irmuden-agi seg tmeẓri tabdart."
+
+#: ../data/org.sugarlabs.gschema.xml.h:15 ../data/sugar.schemas.in.h:79
+msgid "A limit to the number of simultaneously open activities."
+msgstr "Talast n umḍan n urmud yeldin akken."
+
+#: ../data/org.sugarlabs.gschema.xml.h:16 ../data/sugar.schemas.in.h:80
+msgid ""
+"This int is used to set a limit to the number of open activities. By default "
+"(0), there is no limit."
+msgstr ""
+"Umḍan-agi ummid yettwaseqdec i usbadu n talast n umḍan n irmuden yeldin. "
+"Azal amezwer d (0), ulac talast."
+
+#: ../data/org.sugarlabs.gschema.xml.h:17 ../data/sugar.schemas.in.h:1
+msgid "User Name"
+msgstr "Isem n useqdac"
+
+#: ../data/org.sugarlabs.gschema.xml.h:18 ../data/sugar.schemas.in.h:2
+msgid "User name that is used throughout the desktop."
+msgstr "Isem n useqdac yettwaseqdacen deg tnarit."
+
+#: ../data/org.sugarlabs.gschema.xml.h:19 ../data/sugar.schemas.in.h:3
+msgid "Default nick"
+msgstr "Meffer isem amezwer"
+
+#: ../data/org.sugarlabs.gschema.xml.h:20 ../data/sugar.schemas.in.h:4
+msgid ""
+"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account "
+"long name."
+msgstr ""
+"\"yensa\" i usuter deg uwennez; \"anagraw\" i useqdec n yisem aɣezfan n "
+"umiḍan UNIX."
+
+#: ../data/org.sugarlabs.gschema.xml.h:21 ../data/sugar.schemas.in.h:5
+msgid "User Color"
+msgstr "Ini n useqdac"
+
+#: ../data/org.sugarlabs.gschema.xml.h:22 ../data/sugar.schemas.in.h:6
+msgid ""
+"Color for the XO icon that is used throughout the desktop. The string is "
+"composed of the stroke color and fill color, format is that of rgb colors. "
+"Example: #AC32FF,#9A5200"
+msgstr ""
+"Ini n tignit XO yettwaseqdacen deg tnarit. Azrir n isekkilen yegber initen n "
+"ujerriḍ akked tačcart. Amasal icudd ar yiniten rgb, Amedya: #AC32FF,#9A5200"
+
+#: ../data/org.sugarlabs.gschema.xml.h:23
+msgid "User Gender"
+msgstr "Tuzuft n useqdac"
+
+#: ../data/org.sugarlabs.gschema.xml.h:24
+msgid "Gender of the Sugar user, either male, female, or unassigned"
+msgstr "Tuzuft n useqdac n Sugar, amalay, unti, neɣ ulac"
+
+#: ../data/org.sugarlabs.gschema.xml.h:25
+msgid "User Birth Timestamp"
+msgstr "Azemzakudn tlalit n useqdac"
+
+#: ../data/org.sugarlabs.gschema.xml.h:26
+msgid "Birth timestamp (seconds since the epoch)"
+msgstr "Azemzakud n tlalit (tasinin deg epoch n unagraw)"
+
+#: ../data/org.sugarlabs.gschema.xml.h:27
+msgid "Group Label"
+msgstr "Tacreṭ n ugraw"
+
+#: ../data/org.sugarlabs.gschema.xml.h:28
+msgid "Label associated with age, e.g., '2nd Grade'"
+msgstr "Tacreṭ icudden ar tneɣrit n tɣuri, amedya 'Aseggas wis 2'"
+
+#: ../data/org.sugarlabs.gschema.xml.h:29
+msgid "Background image path"
+msgstr "Abrid n unekcum ar tugna n tugna n ugilal"
+
+#: ../data/org.sugarlabs.gschema.xml.h:30
+msgid "Path to the image to be used as a background."
+msgstr "Abrid n unekcum n tugna yettwaseqdacen d agilal."
+
+#: ../data/org.sugarlabs.gschema.xml.h:31
+msgid "Background alpha level"
+msgstr "Aswir n tefrawant n ubadu alpha i tugna n ugilal"
+
+#: ../data/org.sugarlabs.gschema.xml.h:32
+msgid "The opacity of the background image."
+msgstr "Aswir n tebrek n tugna n ugilal."
+
+#: ../data/org.sugarlabs.gschema.xml.h:33
+msgid "Mimetype registry"
+msgstr "Anaw MIME (azmam IANA)"
+
+#: ../data/org.sugarlabs.gschema.xml.h:34
+msgid "Consists of key-value pairs mimetypes and their corresponding activity"
+msgstr ""
+"Yettwammel s tyugiwin tasarutt-azalen n wanawen MIME akked irmuden-nsen "
+"imenṭaḍen"
+
+#: ../data/org.sugarlabs.gschema.xml.h:35 ../data/sugar.schemas.in.h:7
+msgid "Volume Level"
+msgstr "Aswir n ubleɣ"
+
+#: ../data/org.sugarlabs.gschema.xml.h:36 ../data/sugar.schemas.in.h:8
+msgid "Volume level for the sound device."
+msgstr "Aswir n ubleɣ n yibenk ameslaw."
+
+#: ../data/org.sugarlabs.gschema.xml.h:37 ../data/sugar.schemas.in.h:9
+msgid "Sound Muted"
+msgstr "Ameslaw yensa"
+
+#: ../data/org.sugarlabs.gschema.xml.h:38 ../data/sugar.schemas.in.h:10
+msgid "Setting for muting the sound device."
+msgstr "Aseggem n usexsi n yibenk ameslaw."
+
+#: ../data/org.sugarlabs.gschema.xml.h:39
+msgid "Brightness Level"
+msgstr "Aswir n ubruṛeq"
+
+#: ../data/org.sugarlabs.gschema.xml.h:40
+msgid "Brightness level for the computer screen."
+msgstr "Aswir n tafat n ugdil n uselkim."
+
+#: ../data/org.sugarlabs.gschema.xml.h:41
+#: ../extensions/cpsection/datetime/view.py:66 ../data/sugar.schemas.in.h:13
+msgid "Timezone"
+msgstr "Izdi usrig"
+
+#: ../data/org.sugarlabs.gschema.xml.h:42 ../data/sugar.schemas.in.h:14
+msgid "Timezone setting for the system."
+msgstr "Tawila n izḍi usrig n unagraw."
+
+#: ../data/org.sugarlabs.gschema.xml.h:43
+msgid "Home views"
+msgstr "Timeẓriyin tigejdanin"
+
+#: ../data/org.sugarlabs.gschema.xml.h:44
+msgid ""
+"List of home views, including the view icon, the favorite icon and the layout"
+msgstr ""
+"Tubdarin n tmeẓriyin tigejdanin, igebren timeẓri tabdart, timeẓri tanurift "
+"akked d tmeẓri anarag"
+
+#: ../data/org.sugarlabs.gschema.xml.h:45
+msgid "Launcher animation interval"
+msgstr "Azilal n umray n umsenker"
+
+#: ../data/org.sugarlabs.gschema.xml.h:46
+msgid ""
+"Delay in milliseconds between animation updates for launcher pulsing icon."
+msgstr "Tansagt s tmilisinin gar usmiren n imrayen i yiwen n umseker. "
+
+#: ../data/org.sugarlabs.gschema.xml.h:47 ../data/sugar.schemas.in.h:19
+msgid "Edge Delay"
+msgstr "Tanzagt n rrif"
+
+#: ../data/org.sugarlabs.gschema.xml.h:48 ../data/sugar.schemas.in.h:20
+msgid "Delay for the activation of the frame using the edges."
+msgstr "Tanzagt n tilmi iseqdacen lerryuf n tmeẓri."
+
+#: ../data/org.sugarlabs.gschema.xml.h:49 ../data/sugar.schemas.in.h:21
+msgid "Corner Delay"
+msgstr "Tanzagt n tiɣmert"
+
+#: ../data/org.sugarlabs.gschema.xml.h:50 ../data/sugar.schemas.in.h:22
+msgid "Delay for the activation of the frame using the corners."
+msgstr "Tanzagt n urmad n tilmi iseqdacen tiɣmar n tmeẓri"
+
+#: ../data/org.sugarlabs.gschema.xml.h:51
+msgid "Trigger Size"
+msgstr "Teɣzi n temnaḍt n urmad"
+
+#: ../data/org.sugarlabs.gschema.xml.h:52
+msgid "Size of the frame trigger area, in px from the corner/edge."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:53 ../data/sugar.schemas.in.h:23
+msgid "Jabber Server"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:54 ../data/sugar.schemas.in.h:24
+msgid "URL of the jabber server to use."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:55 ../data/sugar.schemas.in.h:29
+msgid "Publish to Gadget"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:56 ../data/sugar.schemas.in.h:30
+msgid ""
+"If TRUE, Sugar will make us searchable for the other users of the Jabber "
+"server."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:57
+msgid "Social Help Server"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:58
+msgid "URL of the social help server to use with protocol."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:59 ../data/sugar.schemas.in.h:25
+msgid "Power Automatic"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:60
+#: ../extensions/cpsection/power/view.py:55 ../data/sugar.schemas.in.h:26
+msgid "Automatic power management (increases battery life)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:61 ../data/sugar.schemas.in.h:27
+msgid "Power Extreme"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:62 ../data/sugar.schemas.in.h:28
+msgid ""
+"Extreme power management (disables wireless radio, increases battery life)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:63 ../data/sugar.schemas.in.h:39
+msgid "Keyboard layouts"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:64 ../data/sugar.schemas.in.h:40
+msgid ""
+"List of keyboard layouts. Each entry should be in the form layout(variant)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:65 ../data/sugar.schemas.in.h:41
+msgid "Keyboard options"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:66 ../data/sugar.schemas.in.h:42
+msgid "List of keyboard options."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:67 ../data/sugar.schemas.in.h:43
+msgid "Keyboard model"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:68 ../data/sugar.schemas.in.h:44
+msgid "The keyboard model to be used"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:69 ../data/sugar.schemas.in.h:45
+msgid "Default font face"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:70 ../data/sugar.schemas.in.h:46
+msgid "Font face that is used throughout the desktop."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:71 ../data/sugar.schemas.in.h:47
+msgid "Default font size"
+msgstr "Tiddi n lexṣas"
+
+#: ../data/org.sugarlabs.gschema.xml.h:72 ../data/sugar.schemas.in.h:48
+msgid "Font size that is used throughout the desktop."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:73 ../data/sugar.schemas.in.h:61
+msgid "Show Sugar Ad-hoc networks"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:74 ../data/sugar.schemas.in.h:62
+msgid ""
+"If TRUE, Sugar will show default Ad-hoc networks for channel 1,6 and 11. If "
+"Sugar sees no \"known\" network when it starts, it does autoconnect to an Ad-"
+"hoc network."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:75
+msgid "Enable Ad-hoc autoconnect"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:76
+msgid "If TRUE, Sugar will autoconnect to Ad-hoc networks."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:77 ../data/sugar.schemas.in.h:49
+msgid "GSM network username (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:78 ../data/sugar.schemas.in.h:50
+msgid "GSM network username configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:79 ../data/sugar.schemas.in.h:51
+msgid "GSM network password (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:80 ../data/sugar.schemas.in.h:52
+msgid "GSM network password configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:81 ../data/sugar.schemas.in.h:53
+msgid "GSM network number (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:82 ../data/sugar.schemas.in.h:54
+msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:83 ../data/sugar.schemas.in.h:55
+msgid "GSM network APN (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:84 ../data/sugar.schemas.in.h:56
+msgid "GSM network access point name configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:85 ../data/sugar.schemas.in.h:57
+msgid "GSM network PIN (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:86 ../data/sugar.schemas.in.h:58
+msgid ""
+"GSM network personal identification number configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:87 ../data/sugar.schemas.in.h:59
+msgid "GSM network PUK (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:88 ../data/sugar.schemas.in.h:60
+msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:89
+msgid "TODO: add summary"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:90
+msgid "TODO: add description"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:91 ../data/sugar.schemas.in.h:65
+msgid "Pitch value for the speech sugar service"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:92 ../data/sugar.schemas.in.h:66
+msgid "Pitch value used by the speech service in Sugar"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:93 ../data/sugar.schemas.in.h:67
+msgid "Rate value for the speech sugar service"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:94 ../data/sugar.schemas.in.h:68
+msgid "Rate value used by the speech service in Sugar"
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:95 ../data/sugar.schemas.in.h:69
+msgid "Activity update backend."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:96 ../data/sugar.schemas.in.h:70
+msgid ""
+"Activity update backend module, followed by a period, followed by the class "
+"name."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:97 ../data/sugar.schemas.in.h:71
+msgid "Microformat update URL."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:98 ../data/sugar.schemas.in.h:72
+msgid ""
+"URL used by the microformat update backend for activity update information."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:99 ../data/sugar.schemas.in.h:73
+msgid "Automatic update frequency."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:100 ../data/sugar.schemas.in.h:74
+msgid ""
+"Frequency of automatic activity updates, measured in days. 0 means disabled."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:101 ../data/sugar.schemas.in.h:75
+msgid "Timestamp of last activity update."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:102 ../data/sugar.schemas.in.h:76
+msgid ""
+"A unix timestamp (seconds since epoch) of the last successful activity "
+"update."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:103
+msgid "New ASLO update.json URL."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:104
+msgid "URL used by the new ASLO updater to download activity data."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:105 ../data/sugar.schemas.in.h:77
+msgid "A description of the hardware available to the user."
+msgstr ""
+
+#: ../data/org.sugarlabs.gschema.xml.h:106 ../data/sugar.schemas.in.h:78
+msgid "This string is displayed in the control panel, about computer section."
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/__init__.py:23
+msgid "About Me"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:51
+msgid "You must enter a name."
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:83
+#, python-format
+msgid "stroke: color=%s hue=%s"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:86
+#, python-format
+msgid "stroke: %s"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:88
+#, python-format
+msgid "fill: color=%s hue=%s"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:90
+#, python-format
+msgid "fill: %s"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:102
+msgid "Error in specified color modifiers."
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:105
+msgid "Error in specified colors."
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/view.py:243
+msgid "Click to change your color:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/view.py:294
+#: ../src/jarabe/intro/window.py:203
+msgid "Select gender:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/__init__.py:21
+msgid "About my Computer"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/model.py:37
+msgid "Not available"
+msgstr "Ulac"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:76
+msgid "Identity"
+msgstr "Tamagit"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:87
+msgid "Model:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:91
+msgid "Serial Number:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:103
+msgid "Software"
+msgstr "Aseɣẓan"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:112
+msgid "Build:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:117
+msgid "Sugar:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:122
+msgid "Firmware:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:127
+msgid "Wireless Firmware:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:134
+#, python-format
+msgid "%d days ago"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:136
+#: ../src/jarabe/journal/journaltoolbox.py:169
+msgid "Today"
+msgstr "Ass-a"
+
+#: ../extensions/cpsection/aboutcomputer/view.py:139
+msgid "Last system update:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:150
+msgid "Copyright and License"
+msgstr "Izerfan n umeskar d turagt"
+
+#. TRANS: The word "Sugar" should not be translated.
+#: ../extensions/cpsection/aboutcomputer/view.py:169
+msgid ""
+"Sugar is the graphical user interface that you are looking at. Sugar is free "
+"software, covered by the GNU General Public License, and you are welcome to "
+"change it and/or distribute copies of it under certain conditions described "
+"therein."
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:181
+msgid "Full license:"
+msgstr ""
+
+#: ../extensions/cpsection/background/__init__.py:21
+msgid "Background"
+msgstr "Agilal"
+
+#: ../extensions/cpsection/background/view.py:48
+msgid "Select a background:"
+msgstr "Fren agilal:"
+
+#: ../extensions/cpsection/background/view.py:57
+msgid "Clear background"
+msgstr "Sfeḍ agilal"
+
+#: ../extensions/cpsection/datetime/__init__.py:21
+msgid "Date & Time"
+msgstr "Azemz akked usrag"
+
+#: ../extensions/cpsection/datetime/model.py:100
+msgid "Error: timezone does not exist."
+msgstr "Tuccḍa: tamnaḍt tasragant ulac-itt."
+
+#: ../extensions/cpsection/frame/__init__.py:21
+msgid "Frame"
+msgstr "Akatar"
+
+#: ../extensions/cpsection/frame/view.py:26
+msgid "never"
+msgstr "werǧin"
+
+#: ../extensions/cpsection/frame/view.py:27
+msgid "instantaneous"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:28
+#, python-format
+msgid "%s seconds"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:52
+msgid "Activation Delay"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:68
+msgid "Activation Area"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:85
+msgid "Corner"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:104
+msgid "Edge"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:123
+msgid "Size"
+msgstr "Tiddi (bytes/octets)"
+
+#: ../extensions/cpsection/frame/view.py:221
+msgid "toolbar size"
+msgstr "Tiddi n tfeggagt n ifecka"
+
+#: ../extensions/cpsection/frame/view.py:226
+msgid "exact corner or edge"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:228
+msgid "exact corner"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:230
+msgid "exact edge"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:232
+msgid "ignored"
+msgstr "yettwanef"
+
+#. TRANS: px as in pixels
+#: ../extensions/cpsection/frame/view.py:235
+msgid "{}px"
+msgstr ""
+
+#: ../extensions/cpsection/keyboard/__init__.py:21
+#: ../extensions/cpsection/keyboard/view.py:38
+msgid "Keyboard"
+msgstr "Anasiw"
+
+#: ../extensions/cpsection/keyboard/view.py:240
+msgid "Keyboard Model"
+msgstr ""
+
+#: ../extensions/cpsection/keyboard/view.py:301
+msgid "Key(s) to change layout"
+msgstr ""
+
+#: ../extensions/cpsection/keyboard/view.py:369
+msgid "Keyboard Layout(s)"
+msgstr ""
+
+#: ../extensions/cpsection/language/__init__.py:21
+#: ../extensions/cpsection/language/view.py:39
+msgid "Language"
+msgstr "Tutlayt"
+
+#: ../extensions/cpsection/language/model.py:29
+msgid "Could not access ~/.i18n. Create standard settings."
+msgstr ""
+
+#: ../extensions/cpsection/language/model.py:156
+#, python-format
+msgid "Language for code=%s could not be determined."
+msgstr ""
+
+#: ../extensions/cpsection/language/model.py:179
+#, python-format
+msgid "Sorry I do not speak '%s'."
+msgstr ""
+
+#: ../extensions/cpsection/language/view.py:75
+msgid ""
+"Add languages in the order you prefer. If a translation is not available, "
+"the next in the list will be used."
+msgstr ""
+
+#: ../extensions/cpsection/language/view.py:383
+#, python-format
+msgid "Error writting language configuration (%s)"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/__init__.py:21
+msgid "Modem"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:94
+msgid ""
+"You will need to provide the following information to set up a mobile "
+"broadband connection to a cellular (3G) network."
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:117
+msgid "Country:"
+msgstr "Tamurt:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:118
+msgid "Provider:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:119
+msgid "Plan:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:160
+msgid "Username:"
+msgstr "Isem n wemseqdac:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:167
+msgid "Password:"
+msgstr "Awal n tbaḍnit:"
+
+#: ../extensions/cpsection/modemconfiguration/view.py:174
+msgid "Number:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:181
+msgid "Access Point Name (APN):"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:188
+msgid "Personal Identity Number (PIN):"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/model.py:162
+#, python-format
+msgid "Plan #%s"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/model.py:292
+#, python-format
+msgid "Provider %s"
+msgstr ""
+
+#: ../extensions/cpsection/network/__init__.py:21
+#: ../extensions/cpsection/network/view.py:30
+msgid "Network"
+msgstr "Azeṭṭa"
+
+#: ../extensions/cpsection/network/model.py:88
+msgid "State is unknown."
+msgstr ""
+
+#: ../extensions/cpsection/network/model.py:104
+msgid "Error in specified radio argument use on/off."
+msgstr ""
+
+#: ../extensions/cpsection/network/model.py:197
+msgid "Error in specified argument use 0/1."
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:65
+msgid "Wireless"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:73
+msgid "The wireless radio may be turned off to save battery life."
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:86
+msgid "Radio"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:103
+msgid ""
+"Discard wireless connections if you have trouble connecting to the network"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:113
+msgid "Discard wireless connections"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:129
+msgid "Collaboration"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:137
+msgid ""
+"The server is the equivalent of what room you are in; people on the same "
+"server will be able to see each other, even when they aren't on the same "
+"network."
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:147
+msgid "Server:"
+msgstr "Aqeddac:"
+
+#: ../extensions/cpsection/network/view.py:163
+msgid ""
+"Social Help is a forum that lets you connect with developers and discuss "
+"Sugar Activities. Changing servers means discussions will happen in a "
+"different place with different people."
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:173
+msgid "Social Help Server:"
+msgstr ""
+
+#: ../extensions/cpsection/power/__init__.py:24
+msgid "Power"
+msgstr ""
+
+#: ../extensions/cpsection/power/model.py:90
+msgid "Error in automatic pm argument, use on/off."
+msgstr ""
+
+#: ../extensions/cpsection/power/view.py:45
+msgid "Power management"
+msgstr ""
+
+#: ../extensions/cpsection/updater/__init__.py:21
+msgid "Software Update"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:70
+msgid ""
+"Software updates correct errors, eliminate security vulnerabilities, and "
+"provide new features."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:84
+msgid "Update in progress..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:119
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:121
+msgid "Installing updates..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:150
+#, python-format
+msgid "Checking %s..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:152
+msgid "Looking for updates..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:154
+#, python-format
+msgid "Downloading %s..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:156
+#, python-format
+msgid "Updating %s..."
+msgstr "Amucceḍ %s..."
+
+#: ../extensions/cpsection/updater/view.py:166
+msgid "Your software is up-to-date"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:168
+#, python-format
+msgid "You can install %s update"
+msgid_plural "You can install %s updates"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../extensions/cpsection/updater/view.py:183
+msgid "Can't connect to the activity server"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:186
+msgid "Verify your connection to internet and try again, or try again later"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:206
+#, python-format
+msgid "%s update was installed"
+msgid_plural "%s updates were installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../extensions/cpsection/updater/view.py:288
+msgid "Install selected"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:307
+#, python-format
+msgid "Download size: %s"
+msgstr "Tiddi n usider: %s"
+
+#: ../extensions/cpsection/updater/view.py:399
+#, python-format
+msgid "From version %(current)s to %(new)s (Size: %(size)s)"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:406
+#, python-format
+msgid "Version %(version)s (Size: %(size)s)"
+msgstr ""
+
+#. TRANS: download size is 0
+#: ../extensions/cpsection/updater/view.py:423
+msgid "None"
+msgstr "Aucun"
+
+#. TRANS: download size of very small updates
+#: ../extensions/cpsection/updater/view.py:426
+msgid "1 KB"
+msgstr ""
+
+#. TRANS: download size of small updates, e.g. '250 KB'
+#: ../extensions/cpsection/updater/view.py:429
+#, python-format
+msgid "%.0f KB"
+msgstr ""
+
+#. TRANS: download size of updates, e.g. '2.3 MB'
+#: ../extensions/cpsection/updater/view.py:432
+#, python-format
+msgid "%.1f MB"
+msgstr "%.1f MAṬ"
+
+#: ../extensions/cpsection/webaccount/__init__.py:24
+msgid "Web Services"
+msgstr "Imeẓla Web"
+
+#: ../extensions/cpsection/webaccount/view.py:65
+#, python-format
+msgid ""
+"No web services are installed.\n"
+"Please visit %s for more details."
+msgstr ""
+
+#: ../extensions/deviceicon/audio.py:69
+msgid "My Audio"
+msgstr "Ameslaw-iw"
+
+#: ../extensions/deviceicon/audio.py:330
+msgid "Speaker"
+msgstr ""
+
+#: ../extensions/deviceicon/audio.py:331
+msgid "Microphone"
+msgstr "Asawaḍ"
+
+#: ../extensions/deviceicon/battery.py:69
+msgid "My Battery"
+msgstr ""
+
+#: ../extensions/deviceicon/battery.py:151
+msgid "Removed"
+msgstr ""
+
+#: ../extensions/deviceicon/battery.py:154
+msgid "Charging"
+msgstr "Asali"
+
+#: ../extensions/deviceicon/battery.py:157
+msgid "Very little power remaining"
+msgstr ""
+
+#. TRANS: do not translate %(hour)d:%(min).2d it is a variable,
+#. only translate the word "remaining"
+#: ../extensions/deviceicon/battery.py:164
+#, python-format
+msgid "%(hour)d:%(min).2d remaining"
+msgstr ""
+
+#: ../extensions/deviceicon/battery.py:167
+msgid "Charged"
+msgstr "Yuli"
+
+#: ../extensions/deviceicon/display.py:187
+msgid "My Display"
+msgstr "Agdil-iw"
+
+#: ../extensions/deviceicon/display.py:189
+msgid "Take a screenshot"
+msgstr "Ṭṭef agdil"
+
+#: ../extensions/deviceicon/display.py:211
+msgid "Brightness"
+msgstr ""
+
+#: ../extensions/deviceicon/display.py:239
+msgid "Display"
+msgstr "Sken"
+
+#: ../extensions/deviceicon/frame.py:53
+msgid "Show my keyboard"
+msgstr "Sken anasiw-iw"
+
+#: ../extensions/deviceicon/network.py:48
+#, python-format
+msgid "IP address: %s"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:80
+#: ../extensions/deviceicon/network.py:297
+#: ../src/jarabe/desktop/networkviews.py:134
+#: ../src/jarabe/desktop/networkviews.py:510
+msgid "Disconnect"
+msgstr "Ffeɣ"
+
+#: ../extensions/deviceicon/network.py:106
+#: ../extensions/deviceicon/network.py:290
+#: ../src/jarabe/desktop/networkviews.py:250
+#: ../src/jarabe/desktop/networkviews.py:552
+#: ../src/jarabe/desktop/networkviews.py:696
+msgid "Connecting..."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:110
+#: ../extensions/deviceicon/network.py:181
+#: ../src/jarabe/desktop/networkviews.py:257
+#: ../src/jarabe/desktop/networkviews.py:558
+#: ../src/jarabe/desktop/networkviews.py:702
+msgid "Connected"
+msgstr "Iqqen"
+
+#: ../extensions/deviceicon/network.py:123
+msgid "No wireless connection"
+msgstr "Tuqqna war tinelli"
+
+#: ../extensions/deviceicon/network.py:137
+#: ../extensions/deviceicon/network.py:140
+msgid "Channel"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:138
+#: ../src/jarabe/journal/expandedentry.py:386
+#: ../src/jarabe/journal/listmodel.py:191
+#: ../src/jarabe/journal/listmodel.py:199
+msgid "Unknown"
+msgstr "Arussin"
+
+#: ../extensions/deviceicon/network.py:156
+msgid "Wired Network"
+msgstr "Aẓeṭṭa n tnelli"
+
+#: ../extensions/deviceicon/network.py:184
+msgid "Speed"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:209
+msgid "Wireless modem"
+msgstr "Atrar war tinelli"
+
+#: ../extensions/deviceicon/network.py:278
+msgid "Please wait..."
+msgstr "Ttxil-k arǧu..."
+
+#: ../extensions/deviceicon/network.py:282
+#: ../src/jarabe/desktop/networkviews.py:128
+#: ../src/jarabe/desktop/networkviews.py:504
+#: ../src/jarabe/desktop/networkviews.py:647
+msgid "Connect"
+msgstr "Qqen"
+
+#: ../extensions/deviceicon/network.py:283
+#, fuzzy
+msgid "Disconnected"
+msgstr "Yenser"
+
+#: ../extensions/deviceicon/network.py:289
+#: ../src/jarabe/controlpanel/toolbar.py:121
+#: ../src/jarabe/frame/activitiestray.py:693
+#: ../src/jarabe/frame/activitiestray.py:815
+#: ../src/jarabe/frame/activitiestray.py:848
+#: ../src/jarabe/journal/expandedentry.py:157
+#: ../src/jarabe/journal/journaltoolbox.py:587
+#: ../src/jarabe/journal/palettes.py:166
+msgid "Cancel"
+msgstr "Sesfex"
+
+#: ../extensions/deviceicon/network.py:327
+msgid "Try connection again"
+msgstr "Ɛreḍ tikelt nniḍen tuqqna"
+
+#: ../extensions/deviceicon/network.py:330
+#, python-format
+msgid "Error: %s"
+msgstr "Tuccḍa: %s"
+
+#: ../extensions/deviceicon/network.py:334
+#, python-format
+msgid "Suggestion: %s"
+msgstr "Asumer: %s"
+
+#: ../extensions/deviceicon/network.py:344
+#, python-format
+msgid "Connected for %s"
+msgstr "Iqqen ɣer %s"
+
+#: ../extensions/deviceicon/network.py:349
+#: ../extensions/deviceicon/network.py:350
+#, python-format
+msgid "%d KB"
+msgstr "%d KAṬ"
+
+#: ../extensions/deviceicon/network.py:355
+msgid "Check your PIN/PUK configuration."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:358
+msgid "Check your Access Point Name (APN) configuration"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:362
+msgid "Check the Number configuration."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:364
+msgid "Check your configuration."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:619
+msgid "Mesh Network"
+msgstr "Azeṭṭa Mesh"
+
+#: ../extensions/deviceicon/network.py:665
+#, python-format
+msgid "Mesh Network %s"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:782
+msgid "No GSM connection available."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:783
+msgid "Create a connection in My Settings."
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:49
+msgid "Speech"
+msgstr "Ameslay"
+
+#: ../extensions/deviceicon/speech.py:72
+#: ../extensions/deviceicon/speech.py:147
+#: ../extensions/deviceicon/speech.py:152
+msgid "Say selected text"
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:80
+msgid "Stop playback"
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:89
+msgid "Pitch"
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:104
+msgid "Rate"
+msgstr "Afmiḍi"
+
+#: ../extensions/deviceicon/speech.py:142
+msgid "Pause playback"
+msgstr ""
+
+#: ../extensions/deviceicon/touchpad.py:36
+msgid "finger"
+msgstr ""
+
+#: ../extensions/deviceicon/touchpad.py:36
+msgid "stylus"
+msgstr ""
+
+#: ../extensions/deviceicon/touchpad.py:61
+msgid "My touchpad"
+msgstr ""
+
+#: ../extensions/deviceicon/volume.py:62 ../src/jarabe/view/palettes.py:210
+msgid "Show contents"
+msgstr "Sken Igburen"
+
+#: ../data/sugar.schemas.in.h:15
+msgid "Favorites Layout"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:16
+msgid "Layout of the favorites view."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:17
+msgid "Favorites resume mode"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:18
+msgid ""
+"When in resume mode, clicking on a favorite icon will cause the last entry "
+"for that activity to be resumed."
+msgstr ""
+
+#: ../src/jarabe/controlpanel/cmd.py:28
+#, python-format
+msgid ""
+"sugar-control-panel: WARNING, found more than one option with the same name: "
+"%s module: %r"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/cmd.py:30
+#, python-format
+msgid "sugar-control-panel: key=%s not an available option"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/cmd.py:31
+#, python-format
+msgid "sugar-control-panel: %s"
+msgstr ""
+
+#. TRANS: Translators, there's a empty line at the end of this string,
+#. which must appear in the translated string (msgstr) as well.
+#: ../src/jarabe/controlpanel/cmd.py:38
+msgid ""
+"Usage: sugar-control-panel [ option ] key [ args ... ] \n"
+" Control for the sugar environment. \n"
+" Options: \n"
+" -h show this help message and exit \n"
+" -l list all the available options \n"
+" -h key show information about this key \n"
+" -g key get the current value of the key \n"
+" -s key set the current value for the key \n"
+" -c key clear the current value for the key \n"
+" "
+msgstr ""
+
+#: ../src/jarabe/controlpanel/cmd.py:52
+msgid ""
+"To apply your changes you have to restart Sugar.\n"
+"Hit ctrl+alt+erase on the keyboard to trigger a restart."
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:373 ../src/jarabe/journal/palettes.py:194
+#: ../src/jarabe/journal/palettes.py:364 ../src/jarabe/journal/palettes.py:424
+#: ../src/jarabe/journal/volumestoolbar.py:304
+msgid "Warning"
+msgstr "Ɣur-k"
+
+#: ../src/jarabe/controlpanel/gui.py:374
+#: ../src/jarabe/controlpanel/sectionview.py:45
+msgid "Changes require restart"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:379
+msgid "Cancel changes"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:384
+msgid "Later"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:388
+msgid "Restart now"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:419 ../src/jarabe/view/buddymenu.py:137
+msgid "An activity is not responding."
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:420 ../src/jarabe/view/buddymenu.py:138
+msgid "You may lose unsaved work if you continue."
+msgstr ""
+
+#: ../src/jarabe/controlpanel/toolbar.py:56
+#: ../src/jarabe/desktop/viewtoolbar.py:129
+#: ../src/jarabe/journal/journaltoolbox.py:94
+#, python-format
+msgid "Search in %s"
+msgstr "Nadi di %s"
+
+#: ../src/jarabe/controlpanel/toolbar.py:56
+msgid "Settings"
+msgstr "Iγewwaṛen"
+
+#: ../src/jarabe/controlpanel/toolbar.py:65 ../src/jarabe/intro/window.py:349
+msgid "Done"
+msgstr "Immed"
+
+#: ../src/jarabe/controlpanel/toolbar.py:127
+msgid "Ok"
+msgstr "Ih"
+
+#: ../src/jarabe/desktop/activitieslist.py:340
+#, python-format
+msgid "Version %s"
+msgstr "Lqem %s"
+
+#: ../src/jarabe/desktop/activitieslist.py:424
+#: ../src/jarabe/journal/listview.py:566 ../src/jarabe/journal/iconview.py:301
+msgid "Clear search"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:510
+msgid "No matching activities"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:546
+msgid "Confirm erase"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:548
+#, python-format
+msgid "Confirm erase: Do you want to permanently erase %s?"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:552
+#: ../src/jarabe/frame/clipboardmenu.py:65
+#: ../src/jarabe/view/viewsource.py:383
+msgid "Keep"
+msgstr "Eǧǧ"
+
+#: ../src/jarabe/desktop/activitieslist.py:555
+#: ../src/jarabe/desktop/activitieslist.py:625
+#: ../src/jarabe/journal/expandedentry.py:151
+#: ../src/jarabe/journal/journaltoolbox.py:545
+#: ../src/jarabe/journal/journaltoolbox.py:582
+#: ../src/jarabe/journal/journaltoolbox.py:806
+#: ../src/jarabe/journal/journaltoolbox.py:812
+#: ../src/jarabe/journal/palettes.py:138 ../src/jarabe/journal/palettes.py:161
+msgid "Erase"
+msgstr "Sfeḍ"
+
+#: ../src/jarabe/desktop/activitieslist.py:641
+msgid "Remove favorite"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:645
+msgid "Make favorite"
+msgstr ""
+
+#. TRANS: label for the freeform layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:209
+msgid "Freeform"
+msgstr ""
+
+#. TRANS: label for the ring layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:305
+msgid "Ring"
+msgstr ""
+
+#. TRANS: label for the spiral layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:469
+msgid "Spiral"
+msgstr ""
+
+#. TRANS: label for the box layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:537
+msgid "Box"
+msgstr ""
+
+#. TRANS: label for the box layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:580
+msgid "Triangle"
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:376
+msgid "Registration"
+msgstr "Ajerred"
+
+#: ../src/jarabe/desktop/favoritesview.py:377
+msgid "Please wait, searching for your school server."
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:387
+msgid "Registration Failed"
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:390
+msgid "Registration Successful"
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:391
+msgid "You are now registered with your school server."
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:680
+msgid "Register"
+msgstr "Sekles"
+
+#: ../src/jarabe/desktop/favoritesview.py:682
+msgid "Register again"
+msgstr ""
+
+#: ../src/jarabe/desktop/homewindow.py:255
+#: ../src/jarabe/desktop/viewtoolbar.py:73
+#: ../src/jarabe/frame/zoomtoolbar.py:57 ../src/jarabe/model/screenshot.py:63
+#: ../src/jarabe/view/viewhelp.py:76
+msgid "Home"
+msgstr "Agejdan"
+
+#: ../src/jarabe/desktop/homewindow.py:262
+#: ../src/jarabe/frame/zoomtoolbar.py:53 ../src/jarabe/model/screenshot.py:61
+#: ../src/jarabe/view/viewhelp.py:73
+msgid "Group"
+msgstr "Agraw"
+
+#: ../src/jarabe/desktop/homewindow.py:269
+#: ../src/jarabe/frame/zoomtoolbar.py:49
+msgid "Neighborhood"
+msgstr "Anarag-iw"
+
+#: ../src/jarabe/desktop/keydialog.py:92
+#, python-format
+msgid ""
+"A wireless encryption key is required for\n"
+" the wireless network '%s'."
+msgstr ""
+
+#: ../src/jarabe/desktop/keydialog.py:141
+msgid "Key Type:"
+msgstr "Anaw n tsarutt:"
+
+#: ../src/jarabe/desktop/keydialog.py:161
+msgid "Authentication Type:"
+msgstr ""
+
+#: ../src/jarabe/desktop/keydialog.py:224
+msgid "WPA & WPA2 Personal"
+msgstr ""
+
+#: ../src/jarabe/desktop/keydialog.py:233
+msgid "Wireless Security:"
+msgstr ""
+
+#. TRANS: Action label for resuming an activity.
+#: ../src/jarabe/desktop/meshbox.py:82
+#: ../src/jarabe/journal/journaltoolbox.py:659
+#: ../src/jarabe/journal/palettes.py:83 ../src/jarabe/view/palettes.py:98
+msgid "Resume"
+msgstr ""
+
+#: ../src/jarabe/desktop/meshbox.py:89
+#: ../src/jarabe/frame/activitiestray.py:208
+msgid "Join"
+msgstr "Asemlil"
+
+#: ../src/jarabe/desktop/networkviews.py:499
+#, python-format
+msgid "Ad-hoc Network %d"
+msgstr ""
+
+#: ../src/jarabe/desktop/networkviews.py:643
+#, python-format
+msgid "Mesh Network %d"
+msgstr ""
+
+#: ../src/jarabe/desktop/schoolserver.py:144
+msgid "Cannot connect to the server."
+msgstr ""
+
+#: ../src/jarabe/desktop/schoolserver.py:151
+msgid "The server could not complete the request."
+msgstr ""
+
+#: ../src/jarabe/desktop/viewtoolbar.py:95
+msgid "List view"
+msgstr "Timeẓri n tebdart"
+
+#: ../src/jarabe/desktop/viewtoolbar.py:97
+#: ../src/jarabe/desktop/viewtoolbar.py:196
+#: ../src/jarabe/desktop/viewtoolbar.py:210
+#, python-format
+msgid "<Ctrl>%d"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:213
+#: ../src/jarabe/frame/activitiestray.py:657
+msgid "Decline"
+msgstr "Agwi"
+
+#: ../src/jarabe/frame/activitiestray.py:598
+#, python-format
+msgid "%dB"
+msgstr "%dAṬ"
+
+#: ../src/jarabe/frame/activitiestray.py:600
+#, python-format
+msgid "%dKB"
+msgstr "%dKAṬ"
+
+#: ../src/jarabe/frame/activitiestray.py:602
+#, python-format
+msgid "%dMB"
+msgstr "%dMAṬ"
+
+#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024
+#: ../src/jarabe/frame/activitiestray.py:620
+#, python-format
+msgid "%s of %s"
+msgstr "%s, si %s"
+
+#: ../src/jarabe/frame/activitiestray.py:634
+#, python-format
+msgid "Transfer from %s"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:648
+#: ../extensions/cpsection/backup/view.py:324
+msgid "Accept"
+msgstr "Qbel"
+
+#: ../src/jarabe/frame/activitiestray.py:722
+#: ../src/jarabe/frame/activitiestray.py:736
+#: ../src/jarabe/frame/activitiestray.py:878
+msgid "Dismiss"
+msgstr "Kkes"
+
+#: ../src/jarabe/frame/activitiestray.py:750
+msgid "The other participant canceled the file transfer"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:800
+#, python-format
+msgid "Transfer to %s"
+msgstr ""
+
+#: ../src/jarabe/frame/clipboardmenu.py:54
+msgctxt "Clipboard"
+msgid "Remove"
+msgstr "Kkes"
+
+#: ../src/jarabe/frame/clipboardmenu.py:60
+#: ../src/jarabe/frame/clipboardmenu.py:83
+msgid "Open"
+msgstr "Ldi"
+
+#: ../src/jarabe/frame/clipboardmenu.py:88
+msgid "Open with"
+msgstr "Ldi s"
+
+#: ../src/jarabe/frame/clipboardobject.py:50
+#, python-format
+msgid "%s clipping"
+msgstr ""
+
+#: ../src/jarabe/frame/zoomtoolbar.py:50
+msgid "F1"
+msgstr ""
+
+#: ../src/jarabe/frame/zoomtoolbar.py:54
+msgid "F2"
+msgstr ""
+
+#: ../src/jarabe/frame/zoomtoolbar.py:58
+msgid "F3"
+msgstr ""
+
+#: ../src/jarabe/frame/zoomtoolbar.py:62 ../src/jarabe/model/screenshot.py:69
+msgid "Activity"
+msgstr "Armud"
+
+#: ../src/jarabe/frame/zoomtoolbar.py:63
+msgid "F4"
+msgstr ""
+
+#: ../src/jarabe/intro/window.py:135
+msgid "Name:"
+msgstr "Isem :"
+
+#: ../src/jarabe/intro/window.py:174
+msgid "Click to change color:"
+msgstr ""
+
+#: ../src/jarabe/intro/window.py:337 ../src/jarabe/journal/detailview.py:95
+msgid "Back"
+msgstr "Uɣal"
+
+#: ../src/jarabe/intro/window.py:352
+msgid "Next"
+msgstr "Ar zdat"
+
+#: ../src/jarabe/intro/agepicker.py:38
+msgid "Select grade:"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:39
+msgid "Preschool"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:39
+msgid "Kindergarten"
+msgstr "Aɣerbaz n warrac"
+
+#: ../src/jarabe/intro/agepicker.py:39
+msgid "1st Grade"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:40
+msgid "2nd Grade"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:40
+msgid "3rd Grade"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:40
+msgid "4th Grade"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:41
+msgid "5th Grade"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:41
+msgid "6th Grade"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:41
+msgid "7th Grade"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:42
+msgid "High School"
+msgstr ""
+
+#: ../src/jarabe/intro/agepicker.py:42
+msgid "Adult"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:153
+#: ../src/jarabe/journal/journaltoolbox.py:584
+#: ../src/jarabe/journal/palettes.py:163
+#, python-format
+msgid "Do you want to permanently erase \"%s\"?"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:296
+#: ../src/jarabe/journal/listmodel.py:185 ../src/jarabe/journal/model.py:794
+#: ../src/jarabe/journal/palettes.py:72 ../src/jarabe/journal/palettes.py:621
+#: ../src/jarabe/journal/volumestoolbar.py:134
+#: ../src/jarabe/journal/iconmodel.py:110
+msgid "Untitled"
+msgstr "War azwel"
+
+#: ../src/jarabe/journal/expandedentry.py:366
+msgid "No preview"
+msgstr "Ulac taskant"
+
+#: ../src/jarabe/journal/expandedentry.py:386
+#, python-format
+msgid "Kind: %s"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:387
+#, python-format
+msgid "Date: %s"
+msgstr "Azmez: %s"
+
+#: ../src/jarabe/journal/expandedentry.py:388
+#, python-format
+msgid "Size: %s"
+msgstr "Taɣzi : %s."
+
+#: ../src/jarabe/journal/expandedentry.py:412
+#: ../src/jarabe/journal/misc.py:131
+msgid "No date"
+msgstr "Ulac azemz"
+
+#: ../src/jarabe/journal/expandedentry.py:421
+msgid "Participants:"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:459
+msgid "Description:"
+msgstr "Aglam"
+
+#: ../src/jarabe/journal/expandedentry.py:465
+msgid "Tags:"
+msgstr "Ticraḍ:"
+
+#: ../src/jarabe/journal/expandedentry.py:470
+msgid "Comments:"
+msgstr "Iwenniten:"
+
+#: ../src/jarabe/journal/journalactivity.py:182
+#: ../src/jarabe/journal/journaltoolbox.py:94
+#: ../src/jarabe/journal/palettes.py:260
+#: ../src/jarabe/journal/volumestoolbar.py:349
+#: ../src/jarabe/view/viewhelp.py:79
+msgid "Journal"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:103
+msgid "Favorite entries"
+msgstr ""
+
+#. TRANS: Item on a palette that filters by entry type.
+#: ../src/jarabe/journal/journaltoolbox.py:112
+#: ../src/jarabe/journal/journaltoolbox.py:403
+#: ../src/jarabe/journal/journaltoolbox.py:479
+msgid "Anything"
+msgstr "Yal taɣawsa"
+
+#: ../src/jarabe/journal/journaltoolbox.py:118
+#: ../src/jarabe/journal/journaltoolbox.py:165
+#: ../src/jarabe/journal/journaltoolbox.py:483
+msgid "Anytime"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:172
+msgid "Since yesterday"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:175
+msgid "Past week"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:178
+msgid "Past month"
+msgstr "Aggur yezrin"
+
+#: ../src/jarabe/journal/journaltoolbox.py:181
+msgid "Past year"
+msgstr "Aseggas yezrin"
+
+#: ../src/jarabe/journal/journaltoolbox.py:521
+#: ../src/jarabe/journal/palettes.py:105
+msgid "Copy to"
+msgstr "Nɣel ar"
+
+#: ../src/jarabe/journal/journaltoolbox.py:529
+#: ../src/jarabe/journal/palettes.py:116 ../src/jarabe/view/viewsource.py:379
+msgid "Duplicate"
+msgstr "Sleg"
+
+#: ../src/jarabe/journal/journaltoolbox.py:535
+msgid "Refresh"
+msgstr "Sismeḍ"
+
+#: ../src/jarabe/journal/journaltoolbox.py:577
+#: ../src/jarabe/journal/palettes.py:156 ../src/jarabe/journal/palettes.py:374
+#: ../src/jarabe/journal/volumestoolbar.py:312
+#, python-format
+msgid "Error while copying the entry. %s"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:578
+#: ../src/jarabe/journal/palettes.py:157 ../src/jarabe/journal/palettes.py:375
+#: ../src/jarabe/journal/volumestoolbar.py:313
+msgid "Error"
+msgstr "Tuccḍa"
+
+#. TRANS: Action label for starting an entry.
+#: ../src/jarabe/journal/journaltoolbox.py:662
+#: ../src/jarabe/journal/palettes.py:86
+msgid "Start"
+msgstr "Exécuté le"
+
+#: ../src/jarabe/journal/journaltoolbox.py:682
+#: ../src/jarabe/journal/palettes.py:100 ../src/jarabe/journal/palettes.py:513
+msgid "No activity to start entry"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:700
+msgid "Sort view"
+msgstr "Smizzwer timeẓri"
+
+#: ../src/jarabe/journal/journaltoolbox.py:711
+msgid "Sort by date modified"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:712
+msgid "Sort by date created"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:713
+msgid "Sort by size"
+msgstr "Smizzwer s"
+
+#: ../src/jarabe/journal/journaltoolbox.py:778
+msgid "Deselect all"
+msgstr "Kkes afran i meṛṛa"
+
+#: ../src/jarabe/journal/journaltoolbox.py:791
+msgid "Select all"
+msgstr "Fren kulec"
+
+#: ../src/jarabe/journal/journaltoolbox.py:817
+#, python-format
+msgid "Do you want to erase %d entry?"
+msgid_plural "Do you want to erase %d entries?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:831
+#: ../src/jarabe/journal/palettes.py:378
+msgid "Copy"
+msgstr "Nɣel"
+
+#. TRANS: Do not translate %(selected)d and %(total)d.
+#: ../src/jarabe/journal/journaltoolbox.py:882
+#, python-format
+msgid "Selected %(selected)d of %(total)d"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:917
+msgid "Select filter"
+msgstr ""
+
+#: ../src/jarabe/journal/listview.py:473 ../src/jarabe/journal/iconview.py:212
+msgid "Your Journal is empty"
+msgstr ""
+
+#: ../src/jarabe/journal/listview.py:476 ../src/jarabe/journal/iconview.py:215
+msgid "Your documents folder is empty"
+msgstr ""
+
+#: ../src/jarabe/journal/listview.py:478 ../src/jarabe/journal/iconview.py:217
+msgid "The device is empty"
+msgstr ""
+
+#: ../src/jarabe/journal/listview.py:480 ../src/jarabe/journal/iconview.py:220
+msgid "No matching entries"
+msgstr ""
+
+#: ../src/jarabe/journal/misc.py:313
+#, python-format
+msgid "Older Version Of %s Activity"
+msgstr ""
+
+#: ../src/jarabe/journal/misc.py:314
+#, python-format
+msgid "Do you want to downgrade to version %s"
+msgstr ""
+
+#: ../src/jarabe/journal/modalalert.py:63
+msgid "Your Journal is full"
+msgstr ""
+
+#: ../src/jarabe/journal/modalalert.py:68
+msgid "Please delete some old Journal entries to make space for new ones."
+msgstr ""
+
+#: ../src/jarabe/journal/modalalert.py:82
+msgid "Show Journal"
+msgstr ""
+
+#: ../src/jarabe/journal/objectchooser.py:171
+msgid "Choose an object"
+msgstr ""
+
+#: ../src/jarabe/journal/objectchooser.py:176
+#, python-format
+msgid "Choose an object to open with %s activity"
+msgstr ""
+
+#: ../src/jarabe/journal/objectchooser.py:184
+#: ../src/jarabe/view/viewhelp.py:335 ../src/jarabe/view/viewsource.py:579
+msgid "Close"
+msgstr "Mdel"
+
+#: ../src/jarabe/journal/palettes.py:84
+msgid "Resume with"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:87
+msgid "Start with"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:124
+msgid "Send to"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:133
+msgid "View Details"
+msgstr "Wali talqayt"
+
+#: ../src/jarabe/journal/palettes.py:193
+msgid "Entries without a file cannot be sent."
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:272
+#: ../src/jarabe/journal/volumestoolbar.py:214
+msgid "Documents"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:363 ../src/jarabe/journal/palettes.py:423
+#: ../src/jarabe/journal/volumestoolbar.py:303
+msgid "Entries without a file cannot be copied."
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:383
+#, python-format
+msgid "Do you want to copy %d entry?"
+msgid_plural "Do you want to copy %d entries?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: ../src/jarabe/journal/palettes.py:408
+msgid "Clipboard"
+msgstr "Ɣef afus"
+
+#: ../src/jarabe/journal/palettes.py:478
+msgid "No friends present"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:483
+msgid "No valid connection found"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:511
+msgid "No activity to resume entry"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:580 ../src/jarabe/view/palettes.py:133
+msgid "Stop"
+msgstr "Seḥbes"
+
+#: ../src/jarabe/journal/palettes.py:585
+#: ../extensions/cpsection/backup/view.py:212
+#: ../extensions/cpsection/backup/view.py:265
+msgid "Continue"
+msgstr "Kemmel"
+
+#: ../src/jarabe/journal/palettes.py:622
+#, python-format
+msgid "%(index)d of %(total)d : %(object_title)s"
+msgstr ""
+
+#: ../src/jarabe/journal/volumestoolbar.py:375
+#: ../src/jarabe/view/palettes.py:251 ../src/jarabe/view/palettes.py:317
+#, python-format
+msgid "%(free_space)d MB Free"
+msgstr ""
+
+#: ../src/jarabe/model/desktop.py:85
+#, python-format
+msgid "Favorites view %d"
+msgstr ""
+
+#: ../src/jarabe/model/network.py:217
+msgid "The reason for the device state change is unknown."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:219
+msgid "The state change is normal."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:221
+msgid "The device is now managed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:223
+msgid "The device is no longer managed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:225
+msgid "The device could not be readied for configuration."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:227
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc)."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:230
+msgid "The IP configuration is no longer valid."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:232
+msgid "Secrets were required, but not provided."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:234
+msgid ""
+"The 802.1X supplicant disconnected from the access point or authentication "
+"server."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:237
+msgid "Configuration of the 802.1X supplicant failed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:239
+msgid "The 802.1X supplicant quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:241
+msgid "The 802.1X supplicant took too long to authenticate."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:243
+msgid "The PPP service failed to start within the allowed time."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:245
+msgid "The PPP service disconnected unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:247
+msgid "The PPP service quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:249
+msgid "The DHCP service failed to start within the allowed time."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:251
+msgid "The DHCP service reported an unexpected error."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:253
+msgid "The DHCP service quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:255
+msgid "The shared connection service failed to start."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:257
+msgid "The shared connection service quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:260
+msgid "The AutoIP service failed to start."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:262
+msgid "The AutoIP service reported an unexpected error."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:264
+msgid "The AutoIP service quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:266
+msgid "Dialing failed because the line was busy."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:268
+msgid "Dialing failed because there was no dial tone."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:270
+msgid "Dialing failed because there was no carrier."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:272
+msgid "Dialing timed out."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:274
+msgid "Dialing failed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:276
+msgid "Modem initialization failed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:278
+msgid "Failed to select the specified GSM APN"
+msgstr ""
+
+#: ../src/jarabe/model/network.py:280
+msgid "Not searching for networks."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:282
+msgid "Network registration was denied."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:284
+msgid "Network registration timed out."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:286
+msgid "Failed to register with the requested GSM network."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:288
+msgid "PIN check failed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:290
+msgid "Necessary firmware for the device may be missing."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:292
+msgid "The device was removed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:294
+msgid "NetworkManager went to sleep."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:296
+msgid "The device's active connection was removed or disappeared."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:299
+msgid "A user or client requested the disconnection."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:301
+msgid "The device's carrier/link changed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:303
+msgid "The device's existing connection was assumed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:305
+msgid "The supplicant is now available."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:307
+msgid "The modem could not be found."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:309
+msgid "The Bluetooth connection failed or timed out."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:311
+msgid "Unused."
+msgstr ""
+
+#: ../src/jarabe/model/screenshot.py:59 ../src/jarabe/view/viewhelp.py:70
+msgid "Mesh"
+msgstr ""
+
+#: ../src/jarabe/model/screenshot.py:72
+msgid "Screenshot"
+msgstr "Tuṭṭfa n ugdil"
+
+#: ../src/jarabe/model/screenshot.py:74
+#, python-format
+msgid "Screenshot of \"%s\""
+msgstr ""
+
+#: ../src/jarabe/view/alerts.py:38 ../src/jarabe/view/alerts.py:48
+msgid "Activity launcher"
+msgstr ""
+
+#: ../src/jarabe/view/alerts.py:39
+#, python-format
+msgid "%s is already running. Please stop %s before launching it again."
+msgstr ""
+
+#: ../src/jarabe/view/alerts.py:49
+msgid ""
+"The maximum number of open activities has been reached. Please close an "
+"activity before launching a new one."
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:73
+msgid "Remove friend"
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:76
+msgid "Make friend"
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:108
+msgid "Shutdown"
+msgstr "Sexsi"
+
+#: ../src/jarabe/view/buddymenu.py:113
+msgid "Restart"
+msgstr "Ales tanekra"
+
+#: ../src/jarabe/view/buddymenu.py:119
+msgid "Logout"
+msgstr "Tuffɣa"
+
+#: ../src/jarabe/view/buddymenu.py:124
+msgid "My Settings"
+msgstr "Iɣewwaṛen-iw"
+
+#: ../src/jarabe/view/buddymenu.py:183
+#, python-format
+msgid "Invite to %s"
+msgstr ""
+
+#: ../src/jarabe/view/launcher.py:159
+#, python-format
+msgid "<b>%s</b> failed to start."
+msgstr ""
+
+#: ../src/jarabe/view/palettes.py:53
+msgid "Starting..."
+msgstr "Tanekra..."
+
+#: ../src/jarabe/view/palettes.py:63
+msgid "Activity failed to start"
+msgstr ""
+
+#. TODO: share-with, keep
+#: ../src/jarabe/view/palettes.py:105
+msgid "View Source"
+msgstr "Sken aɣbalu"
+
+#: ../src/jarabe/view/palettes.py:112
+msgid "View Help"
+msgstr "Wali asebter n tallelt"
+
+#: ../src/jarabe/view/palettes.py:179
+msgid "Start new"
+msgstr ""
+
+#: ../src/jarabe/view/palettes.py:266
+msgctxt "Volume"
+msgid "Remove"
+msgstr "Kkes"
+
+#: ../src/jarabe/view/viewhelp.py:304
+msgid "Help Manual"
+msgstr ""
+
+#: ../src/jarabe/view/viewhelp.py:318
+msgid "Social Help"
+msgstr ""
+
+#: ../src/jarabe/view/viewhelp.py:326
+#, python-format
+msgid "Help: %s"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:364
+msgid "Instance Source"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:392
+#, python-format
+msgid "Do you want to duplicate %s Activity?"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:394
+msgid "This may take a few minutes"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:408
+msgid "Duplicating activity..."
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:447
+msgid "Duplicated"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:448
+msgid "The activity has been duplicated"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:462
+msgid "Duplicated activity already exists"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:463
+msgid "Delete your copy before trying to duplicate the activity again"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:478
+msgid "Source"
+msgstr "Aqbalu"
+
+#: ../src/jarabe/view/viewsource.py:542
+msgid "Activity Bundle Source"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:561
+msgid "Sugar Toolkit Source"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:568
+#, python-format
+msgid "View source: %s"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:569
+#, python-format
+msgid "View source: %r"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:809
+msgid "Please select a file in the left panel."
+msgstr ""
+
+#: ../extensions/cpsection/backup/__init__.py:22
+msgid "Backup"
+msgstr "Sekles"
+
+#: ../extensions/cpsection/backup/backends/volume.py:61
+#: ../extensions/cpsection/backup/backends/volume.py:171
+msgid "Please connect a device to continue"
+msgstr ""
+
+#: ../extensions/cpsection/backup/backends/volume.py:69
+#: ../extensions/cpsection/backup/backends/volume.py:178
+msgid "Select your volume"
+msgstr ""
+
+#: ../extensions/cpsection/backup/backends/volume.py:78
+msgid "Not enough space in volume"
+msgstr ""
+
+#: ../extensions/cpsection/backup/backends/volume.py:122
+#, python-format
+msgid "Backup from user %s"
+msgstr ""
+
+#: ../extensions/cpsection/backup/backends/volume.py:191
+msgid "No checkpoints found in the device"
+msgstr ""
+
+#: ../extensions/cpsection/backup/backends/volume.py:199
+msgid "Select your checkpoint"
+msgstr ""
+
+#: ../extensions/cpsection/backup/backends/volume.py:210
+msgid "Not enough space in disk"
+msgstr ""
+
+#: ../extensions/cpsection/backup/backends/volume.py:329
+msgid "Local Device Backup"
+msgstr ""
+
+#: ../extensions/cpsection/backup/view.py:133
+msgid "Save the contents of your Journal"
+msgstr ""
+
+#: ../extensions/cpsection/backup/view.py:141
+msgid "Restore the contents of your Journal"
+msgstr ""
+
+#: ../extensions/cpsection/backup/view.py:223
+msgid "Please close all the activities, and start again"
+msgstr ""
+
+#: ../extensions/cpsection/backup/view.py:229
+msgid "Select where you want create your backup"
+msgstr ""
+
+#: ../extensions/cpsection/backup/view.py:231
+msgid "Select where you want retrieve your restore"
+msgstr ""
+
+#: ../extensions/cpsection/backup/view.py:271
+msgid "Retry"
+msgstr "Ɛref̣ tikelt-nniḍen"
+
+#: ../extensions/cpsection/backup/view.py:290
+msgid "Starting backup..."
+msgstr "Asenker n uḥraz..."
+
+#: ../extensions/cpsection/backup/view.py:294
+msgid "Starting restore..."
+msgstr "Asenker n tririt..."
+
+#: ../extensions/cpsection/backup/view.py:321
+msgid ""
+"I want to restore the content of my Journal. In order to do this, my Journal "
+"will first be emptied of all its content; then the restored content will be "
+"added."
+msgstr ""
+
+#: ../extensions/cpsection/backup/view.py:327
+msgid "Confirm"
+msgstr "Sentem"
+
+#: ../extensions/cpsection/backup/view.py:365
+msgid "Operation started"
+msgstr "Tamhelt tebda"
+
+#: ../extensions/cpsection/backup/view.py:377
+msgid "Backup finished successfully"
+msgstr ""
+
+#: ../extensions/cpsection/backup/view.py:379
+msgid "Restore realized successfully."
+msgstr ""
+
+#: ../src/jarabe/frame/notification.py:62
+msgid "Clear notifications"
+msgstr "Sfeḍ ilɣa"
diff --git b/po/sr@latin.po a/po/sr@latin.po
new file mode 100644
index 0000000..669d03d
--- /dev/null
+++ a/po/sr@latin.po
@@ -0,0 +1,1935 @@
+# 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: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-07-31 00:33-0400\n"
+"PO-Revision-Date: 2013-06-18 20:00+0200\n"
+"Last-Translator: Chris <cjl@laptop.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: sr@latin\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Pootle 2.0.5\n"
+
+#: ../extensions/cpsection/aboutme/__init__.py:24
+msgid "About Me"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:48
+msgid "You must enter a name."
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:75
+#, python-format
+msgid "stroke: color=%s hue=%s"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:78
+#, python-format
+msgid "stroke: %s"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:80
+#, python-format
+msgid "fill: color=%s hue=%s"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:82
+#, python-format
+msgid "fill: %s"
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:94
+msgid "Error in specified color modifiers."
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/model.py:97
+msgid "Error in specified colors."
+msgstr ""
+
+#: ../extensions/cpsection/aboutme/view.py:212
+msgid "Click to change your color:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/__init__.py:21
+msgid "About my Computer"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/model.py:42
+msgid "Not available"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:60
+msgid "Identity"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:69
+msgid "Serial Number:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:91
+msgid "Software"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:100
+msgid "Build:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:115
+msgid "Sugar:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:130
+msgid "Firmware:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:145
+msgid "Wireless Firmware:"
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:168
+msgid "Copyright and License"
+msgstr ""
+
+#. TRANS: The word "Sugar" should not be translated.
+#: ../extensions/cpsection/aboutcomputer/view.py:187
+msgid ""
+"Sugar is the graphical user interface that you are looking at. Sugar is free "
+"software, covered by the GNU General Public License, and you are welcome to "
+"change it and/or distribute copies of it under certain conditions described "
+"therein."
+msgstr ""
+
+#: ../extensions/cpsection/aboutcomputer/view.py:199
+msgid "Full license:"
+msgstr ""
+
+#: ../extensions/cpsection/background/__init__.py:21
+msgid "Background"
+msgstr "Pozadina"
+
+#: ../extensions/cpsection/background/view.py:39
+msgid "Select a background:"
+msgstr ""
+
+#: ../extensions/cpsection/background/view.py:46
+msgid "Clear background"
+msgstr ""
+
+#: ../extensions/cpsection/datetime/__init__.py:21
+msgid "Date & Time"
+msgstr ""
+
+#: ../extensions/cpsection/datetime/model.py:92
+msgid "Error timezone does not exist."
+msgstr ""
+
+#: ../extensions/cpsection/datetime/view.py:66 ../data/sugar.schemas.in.h:61
+msgid "Timezone"
+msgstr ""
+
+#: ../extensions/cpsection/frame/__init__.py:21
+msgid "Frame"
+msgstr ""
+
+#: ../extensions/cpsection/frame/model.py:41
+#: ../extensions/cpsection/frame/model.py:66
+msgid "Value must be an integer."
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:27
+msgid "never"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:28
+msgid "instantaneous"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:29
+#, python-format
+msgid "%s seconds"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:54
+msgid "Activation Delay"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:78
+msgid "Corner"
+msgstr ""
+
+#: ../extensions/cpsection/frame/view.py:114
+msgid "Edge"
+msgstr ""
+
+#: ../extensions/cpsection/keyboard/__init__.py:21
+#: ../extensions/cpsection/keyboard/view.py:38
+msgid "Keyboard"
+msgstr ""
+
+#: ../extensions/cpsection/keyboard/view.py:240
+msgid "Keyboard Model"
+msgstr ""
+
+#: ../extensions/cpsection/keyboard/view.py:301
+msgid "Key(s) to change layout"
+msgstr ""
+
+#: ../extensions/cpsection/keyboard/view.py:369
+msgid "Keyboard Layout(s)"
+msgstr ""
+
+#: ../extensions/cpsection/language/__init__.py:21
+#: ../extensions/cpsection/language/view.py:33
+msgid "Language"
+msgstr ""
+
+#: ../extensions/cpsection/language/model.py:30
+msgid "Could not access ~/.i18n. Create standard settings."
+msgstr ""
+
+#: ../extensions/cpsection/language/model.py:129
+#, python-format
+msgid "Language for code=%s could not be determined."
+msgstr ""
+
+#: ../extensions/cpsection/language/model.py:152
+#, python-format
+msgid "Sorry I do not speak '%s'."
+msgstr ""
+
+#: ../extensions/cpsection/language/view.py:57
+msgid ""
+"Add languages in the order you prefer. If a translation is not available, "
+"the next in the list will be used."
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/__init__.py:21
+msgid "Modem Configuration"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:94
+msgid ""
+"You will need to provide the following information to set up a mobile "
+"broadband connection to a cellular (3G) network."
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:117
+msgid "Country:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:118
+msgid "Provider:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:119
+msgid "Plan:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:160
+msgid "Username:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:167
+msgid "Password:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:174
+msgid "Number:"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:181
+msgid "Access Point Name (APN):"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/view.py:188
+msgid "Personal Identity Number (PIN):"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/model.py:161
+#, python-format
+msgid "Plan #%s"
+msgstr ""
+
+#: ../extensions/cpsection/modemconfiguration/model.py:291
+#, python-format
+msgid "Provider %s"
+msgstr ""
+
+#: ../extensions/cpsection/network/__init__.py:21
+#: ../extensions/cpsection/network/view.py:30
+msgid "Network"
+msgstr ""
+
+#: ../extensions/cpsection/network/model.py:73
+msgid "State is unknown."
+msgstr ""
+
+#: ../extensions/cpsection/network/model.py:101
+msgid "Error in specified radio argument use on/off."
+msgstr ""
+
+#: ../extensions/cpsection/network/model.py:152
+msgid "Error in specified argument use 0/1."
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:68
+msgid "Wireless"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:77
+msgid "Turn off the wireless radio to save battery life"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:90
+msgid "Radio"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:106
+msgid "Discard network history if you have trouble connecting to the network"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:115
+msgid "Discard network history"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:131
+msgid "Collaboration"
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:139
+msgid ""
+"The server is the equivalent of what room you are in; people on the same "
+"server will be able to see each other, even when they aren't on the same "
+"network."
+msgstr ""
+
+#: ../extensions/cpsection/network/view.py:149
+msgid "Server:"
+msgstr ""
+
+#: ../extensions/cpsection/power/__init__.py:21
+msgid "Power"
+msgstr ""
+
+#: ../extensions/cpsection/power/model.py:90
+msgid "Error in automatic pm argument, use on/off."
+msgstr ""
+
+#: ../extensions/cpsection/power/view.py:45
+msgid "Power management"
+msgstr ""
+
+#: ../extensions/cpsection/power/view.py:55 ../data/sugar.schemas.in.h:5
+msgid "Automatic power management (increases battery life)"
+msgstr ""
+
+#: ../extensions/cpsection/updater/__init__.py:21
+msgid "Software Update"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:65
+msgid ""
+"Software updates correct errors, eliminate security vulnerabilities, and "
+"provide new features."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:79
+msgid "Update in progress..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:106
+msgid "Checking for updates..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:108
+msgid "Installing updates..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:137
+#, python-format
+msgid "Checking %s..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:139
+msgid "Looking for updates..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:141
+#, python-format
+msgid "Downloading %s..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:143
+#, python-format
+msgid "Updating %s..."
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:153
+msgid "Your software is up-to-date"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:155
+#, python-format
+msgid "You can install %s update"
+msgid_plural "You can install %s updates"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../extensions/cpsection/updater/view.py:184
+#, python-format
+msgid "%s update was installed"
+msgid_plural "%s updates were installed"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../extensions/cpsection/updater/view.py:266
+msgid "Install selected"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:284
+#, python-format
+msgid "Download size: %s"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:373
+#, python-format
+msgid "From version %(current)s to %(new)s (Size: %(size)s)"
+msgstr ""
+
+#: ../extensions/cpsection/updater/view.py:380
+#, python-format
+msgid "Version %(version)s (Size: %(size)s)"
+msgstr ""
+
+#. TRANS: download size is 0
+#: ../extensions/cpsection/updater/view.py:397
+msgid "None"
+msgstr ""
+
+#. TRANS: download size of very small updates
+#: ../extensions/cpsection/updater/view.py:400
+msgid "1 KB"
+msgstr ""
+
+#. TRANS: download size of small updates, e.g. '250 KB'
+#: ../extensions/cpsection/updater/view.py:403
+#, python-format
+msgid "%.0f KB"
+msgstr ""
+
+#. TRANS: download size of updates, e.g. '2.3 MB'
+#: ../extensions/cpsection/updater/view.py:406
+#, python-format
+msgid "%.1f MB"
+msgstr ""
+
+#: ../extensions/cpsection/webaccount/__init__.py:24
+msgid "Configure your Web Services"
+msgstr ""
+
+#: ../extensions/cpsection/webaccount/view.py:42
+#, python-format
+msgid ""
+"No web services are installed.\n"
+"Please visit %s for more details."
+msgstr ""
+
+#: ../extensions/deviceicon/battery.py:71
+msgid "My Battery"
+msgstr ""
+
+#: ../extensions/deviceicon/battery.py:153
+msgid "Removed"
+msgstr ""
+
+#: ../extensions/deviceicon/battery.py:156
+msgid "Charging"
+msgstr ""
+
+#: ../extensions/deviceicon/battery.py:159
+msgid "Very little power remaining"
+msgstr ""
+
+#. TRANS: do not translate %(hour)d:%(min).2d it is a variable,
+#. only translate the word "remaining"
+#: ../extensions/deviceicon/battery.py:166
+#, python-format
+msgid "%(hour)d:%(min).2d remaining"
+msgstr ""
+
+#: ../extensions/deviceicon/battery.py:169
+msgid "Charged"
+msgstr ""
+
+#: ../extensions/deviceicon/frame.py:56
+msgid "Show my keyboard"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:50
+#, python-format
+msgid "IP address: %s"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:82
+#: ../extensions/deviceicon/network.py:298
+#: ../src/jarabe/desktop/networkviews.py:135
+#: ../src/jarabe/desktop/networkviews.py:509
+msgid "Disconnect"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:107
+#: ../extensions/deviceicon/network.py:290
+#: ../src/jarabe/desktop/networkviews.py:251
+#: ../src/jarabe/desktop/networkviews.py:551
+#: ../src/jarabe/desktop/networkviews.py:693
+msgid "Connecting..."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:112
+#: ../extensions/deviceicon/network.py:180
+#: ../src/jarabe/desktop/networkviews.py:258
+#: ../src/jarabe/desktop/networkviews.py:557
+#: ../src/jarabe/desktop/networkviews.py:699
+msgid "Connected"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:125
+msgid "No wireless connection"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:139
+msgid "Channel"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:154
+msgid "Wired Network"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:183
+msgid "Speed"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:208
+msgid "Wireless modem"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:276
+msgid "Please wait..."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:281
+#: ../src/jarabe/desktop/networkviews.py:129
+#: ../src/jarabe/desktop/networkviews.py:503
+#: ../src/jarabe/desktop/networkviews.py:644
+msgid "Connect"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:282
+msgid "Disconnected"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:289
+#: ../src/jarabe/controlpanel/toolbar.py:121
+#: ../src/jarabe/desktop/keydialog.py:101
+#: ../src/jarabe/frame/activitiestray.py:625
+#: ../src/jarabe/frame/activitiestray.py:746
+#: ../src/jarabe/frame/activitiestray.py:778
+#: ../src/jarabe/journal/expandedentry.py:159
+#: ../src/jarabe/journal/journaltoolbox.py:480
+#: ../src/jarabe/journal/palettes.py:159
+msgid "Cancel"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:328
+msgid "Try connection again"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:331
+#, python-format
+msgid "Error: %s"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:335
+#, python-format
+msgid "Suggestion: %s"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:344
+#, python-format
+msgid "Connected for %s"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:350
+#: ../extensions/deviceicon/network.py:351
+#, python-format
+msgid "%d KB"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:356
+msgid "Check your PIN/PUK configuration."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:359
+msgid "Check your Access Point Name (APN) configuration"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:363
+msgid "Check the Number configuration."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:365
+msgid "Check your configuration."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:621
+msgid "Mesh Network"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:668
+#, python-format
+msgid "Mesh Network %s"
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:788
+msgid "No GSM connection available."
+msgstr ""
+
+#: ../extensions/deviceicon/network.py:789
+msgid "Create a connection in the control panel."
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:52
+msgid "Speech"
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:76
+#: ../extensions/deviceicon/speech.py:150
+#: ../extensions/deviceicon/speech.py:155
+msgid "Say selected text"
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:83
+msgid "Stop playback"
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:92
+msgid "Pitch"
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:107
+msgid "Rate"
+msgstr ""
+
+#: ../extensions/deviceicon/speech.py:145
+msgid "Pause playback"
+msgstr ""
+
+#: ../extensions/deviceicon/speaker.py:61
+msgid "My Speakers"
+msgstr ""
+
+#: ../extensions/deviceicon/speaker.py:136
+msgid "Unmute"
+msgstr ""
+
+#: ../extensions/deviceicon/speaker.py:139
+msgid "Mute"
+msgstr ""
+
+#: ../extensions/deviceicon/touchpad.py:38
+msgid "finger"
+msgstr ""
+
+#: ../extensions/deviceicon/touchpad.py:38
+msgid "stylus"
+msgstr ""
+
+#: ../extensions/deviceicon/touchpad.py:64
+msgid "My touchpad"
+msgstr ""
+
+#: ../extensions/deviceicon/volume.py:72 ../src/jarabe/view/palettes.py:184
+msgid "Show contents"
+msgstr ""
+
+#: ../extensions/globalkey/screenshot.py:61
+msgid "Mesh"
+msgstr ""
+
+#: ../extensions/globalkey/screenshot.py:63
+#: ../src/jarabe/desktop/homewindow.py:221
+#: ../src/jarabe/frame/zoomtoolbar.py:53
+msgid "Group"
+msgstr ""
+
+#: ../extensions/globalkey/screenshot.py:65
+#: ../src/jarabe/desktop/homewindow.py:214
+#: ../src/jarabe/desktop/viewtoolbar.py:73
+#: ../src/jarabe/frame/zoomtoolbar.py:57
+msgid "Home"
+msgstr ""
+
+#: ../extensions/globalkey/screenshot.py:71
+#: ../src/jarabe/frame/zoomtoolbar.py:62
+msgid "Activity"
+msgstr ""
+
+#: ../extensions/globalkey/screenshot.py:74
+msgid "Screenshot"
+msgstr ""
+
+#: ../extensions/globalkey/screenshot.py:76
+#, python-format
+msgid "Screenshot of \"%s\""
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:1
+msgid ""
+"\"disabled\" to ask nick on initialization; \"system\" to reuse UNIX account "
+"long name."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:2
+msgid ""
+"A unix timestamp (seconds since epoch) of the last successful activity "
+"update."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:3
+msgid ""
+"Activity update backend module, followed by a period, followed by the class "
+"name."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:4
+msgid "Activity update backend."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:6
+msgid "Automatic update frequency."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:7
+msgid "Backup URL"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:8
+msgid "Bundle IDs of protected activities"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:9
+msgid ""
+"Color for the XO icon that is used throughout the desktop. The string is "
+"composed of the stroke color and fill color, format is that of rgb colors. "
+"Example: #AC32FF,#9A5200"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:10
+msgid "Corner Delay"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:11
+msgid "Default font face"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:12
+msgid "Default font size"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:13
+msgid "Default nick"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:14
+msgid "Delay for the activation of the frame using the corners."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:15
+msgid "Delay for the activation of the frame using the edges."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:16
+msgid "Edge Delay"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:17
+msgid ""
+"Extreme power management (disables wireless radio, increases battery life)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:18
+msgid "Favorites Layout"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:19
+msgid "Favorites resume mode"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:20
+msgid "Font face that is used throughout the desktop."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:21
+msgid "Font size that is used throughout the desktop."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:22
+msgid ""
+"Frequency of automatic activity updates, measured in days. 0 means disabled."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:23
+msgid "GSM network APN (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:24
+msgid "GSM network PIN (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:25
+msgid "GSM network PUK (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:26
+msgid "GSM network access point name configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:27
+msgid "GSM network number (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:28
+msgid "GSM network password (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:29
+msgid "GSM network password configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:30
+msgid ""
+"GSM network personal identification number configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:31
+msgid "GSM network personal unlock key configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:32
+msgid "GSM network telephone number configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:33
+msgid "GSM network username (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:34
+msgid "GSM network username configuration (DEPRECATED/UNUSED)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:35
+msgid ""
+"If TRUE, Sugar will make us searchable for the other users of the Jabber "
+"server."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:36
+msgid "If TRUE, Sugar will show a \"Log out\" option."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:37
+msgid "If TRUE, Sugar will show a \"Restart\" option."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:38
+msgid ""
+"If TRUE, Sugar will show default Ad-hoc networks for channel 1,6 and 11. If "
+"Sugar sees no \"known\" network when it starts, it does autoconnect to an Ad-"
+"hoc network."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:39
+msgid "Jabber Server"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:40
+msgid "Keyboard layouts"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:41
+msgid "Keyboard model"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:42
+msgid "Keyboard options"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:43
+msgid "Layout of the favorites view."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:44
+msgid ""
+"List of keyboard layouts. Each entry should be in the form layout(variant)"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:45
+msgid "List of keyboard options."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:46
+msgid "Microformat update URL."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:47
+msgid "Pitch value for the speech sugar service"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:48
+msgid "Pitch value used by the speech service in Sugar"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:49
+msgid "Power Automatic"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:50
+msgid "Power Extreme"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:51
+msgid "Publish to Gadget"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:52
+msgid "Rate value for the speech sugar service"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:53
+msgid "Rate value used by the speech service in Sugar"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:54
+msgid "Setting for muting the sound device."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:55
+msgid "Show Log out"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:56
+msgid "Show Restart"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:57
+msgid "Show Sugar Ad-hoc networks"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:58
+msgid "Sound Muted"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:59
+msgid "The keyboard model to be used"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:60
+msgid "Timestamp of last activity update."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:62
+msgid "Timezone setting for the system."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:63
+msgid "URL of the jabber server to use."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:64
+msgid ""
+"URL used by the microformat update backend for activity update information."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:65
+msgid "URL where the backup is saved to."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:66
+msgid "User Color"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:67
+msgid "User Name"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:68
+msgid "User name that is used throughout the desktop."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:69
+msgid ""
+"Users will not be allowed to erase these activities through the list view."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:70
+msgid "Volume Level"
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:71
+msgid "Volume level for the sound device."
+msgstr ""
+
+#: ../data/sugar.schemas.in.h:72
+msgid ""
+"When in resume mode, clicking on a favorite icon will cause the last entry "
+"for that activity to be resumed."
+msgstr ""
+
+#: ../src/jarabe/controlpanel/cmd.py:28
+#, python-format
+msgid ""
+"sugar-control-panel: WARNING, found more than one option with the same name: "
+"%s module: %r"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/cmd.py:30
+#, python-format
+msgid "sugar-control-panel: key=%s not an available option"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/cmd.py:31
+#, python-format
+msgid "sugar-control-panel: %s"
+msgstr ""
+
+#. TRANS: Translators, there's a empty line at the end of this string,
+#. which must appear in the translated string (msgstr) as well.
+#: ../src/jarabe/controlpanel/cmd.py:38
+msgid ""
+"Usage: sugar-control-panel [ option ] key [ args ... ] \n"
+" Control for the sugar environment. \n"
+" Options: \n"
+" -h show this help message and exit \n"
+" -l list all the available options \n"
+" -h key show information about this key \n"
+" -g key get the current value of the key \n"
+" -s key set the current value for the key \n"
+" -c key clear the current value for the key \n"
+" "
+msgstr ""
+
+#: ../src/jarabe/controlpanel/cmd.py:52
+msgid "To apply your changes you have to restart Sugar.\n"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:323 ../src/jarabe/journal/palettes.py:187
+#: ../src/jarabe/journal/palettes.py:350 ../src/jarabe/journal/palettes.py:410
+#: ../src/jarabe/journal/volumestoolbar.py:302
+msgid "Warning"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:324
+#: ../src/jarabe/controlpanel/sectionview.py:41
+msgid "Changes require restart"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:328
+msgid "Cancel changes"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:333
+msgid "Later"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/gui.py:337
+msgid "Restart now"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/toolbar.py:56
+#: ../src/jarabe/desktop/viewtoolbar.py:129
+#: ../src/jarabe/journal/journaltoolbox.py:89
+#, python-format
+msgid "Search in %s"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/toolbar.py:56
+msgid "Settings"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/toolbar.py:65 ../src/jarabe/intro/window.py:211
+msgid "Done"
+msgstr ""
+
+#: ../src/jarabe/controlpanel/toolbar.py:127
+#: ../src/jarabe/desktop/favoritesview.py:374
+#: ../src/jarabe/desktop/keydialog.py:105
+msgid "Ok"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:282
+#, python-format
+msgid "Version %s"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:385
+#: ../src/jarabe/journal/listview.py:475 ../src/jarabe/journal/iconview.py:299
+msgid "Clear search"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:469
+msgid "No matching activities"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:505
+msgid "Confirm erase"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:507
+#, python-format
+msgid "Confirm erase: Do you want to permanently erase %s?"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:511
+#: ../src/jarabe/frame/clipboardmenu.py:65
+#: ../src/jarabe/view/viewsource.py:288
+msgid "Keep"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:514
+#: ../src/jarabe/desktop/activitieslist.py:578
+#: ../src/jarabe/journal/expandedentry.py:153
+#: ../src/jarabe/journal/journaltoolbox.py:443
+#: ../src/jarabe/journal/journaltoolbox.py:475
+#: ../src/jarabe/journal/journaltoolbox.py:689
+#: ../src/jarabe/journal/journaltoolbox.py:695
+#: ../src/jarabe/journal/palettes.py:132 ../src/jarabe/journal/palettes.py:154
+msgid "Erase"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:594
+msgid "Remove favorite"
+msgstr ""
+
+#: ../src/jarabe/desktop/activitieslist.py:598
+msgid "Make favorite"
+msgstr ""
+
+#. TRANS: label for the freeform layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:199
+msgid "Freeform"
+msgstr ""
+
+#. TRANS: label for the ring layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:295
+msgid "Ring"
+msgstr ""
+
+#. TRANS: label for the spiral layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:459
+msgid "Spiral"
+msgstr ""
+
+#. TRANS: label for the box layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:527
+msgid "Box"
+msgstr ""
+
+#. TRANS: label for the box layout in the favorites view
+#: ../src/jarabe/desktop/favoriteslayout.py:570
+msgid "Triangle"
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:365
+msgid "Registration Failed"
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:368
+msgid "Registration Successful"
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:369
+msgid "You are now registered with your school server."
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:653
+msgid "Register"
+msgstr ""
+
+#: ../src/jarabe/desktop/favoritesview.py:656
+#: ../src/jarabe/desktop/favoritesview.py:672
+msgid "Register again"
+msgstr ""
+
+#: ../src/jarabe/desktop/homewindow.py:228
+#: ../src/jarabe/frame/zoomtoolbar.py:49
+msgid "Neighborhood"
+msgstr ""
+
+#: ../src/jarabe/desktop/keydialog.py:94
+#, python-format
+msgid ""
+"A wireless encryption key is required for\n"
+" the wireless network '%s'."
+msgstr ""
+
+#: ../src/jarabe/desktop/keydialog.py:150
+msgid "Key Type:"
+msgstr ""
+
+#: ../src/jarabe/desktop/keydialog.py:170
+msgid "Authentication Type:"
+msgstr ""
+
+#: ../src/jarabe/desktop/keydialog.py:233
+msgid "WPA & WPA2 Personal"
+msgstr ""
+
+#: ../src/jarabe/desktop/keydialog.py:242
+msgid "Wireless Security:"
+msgstr ""
+
+#. TRANS: Action label for resuming an activity.
+#: ../src/jarabe/desktop/meshbox.py:82
+#: ../src/jarabe/journal/journaltoolbox.py:548
+#: ../src/jarabe/journal/palettes.py:77 ../src/jarabe/view/palettes.py:96
+msgid "Resume"
+msgstr ""
+
+#: ../src/jarabe/desktop/meshbox.py:89
+#: ../src/jarabe/frame/activitiestray.py:190
+msgid "Join"
+msgstr ""
+
+#: ../src/jarabe/desktop/networkviews.py:497
+#, python-format
+msgid "Ad-hoc Network %d"
+msgstr ""
+
+#: ../src/jarabe/desktop/networkviews.py:639
+#, python-format
+msgid "Mesh Network %d"
+msgstr ""
+
+#: ../src/jarabe/desktop/schoolserver.py:144
+msgid "Cannot connect to the server."
+msgstr ""
+
+#: ../src/jarabe/desktop/schoolserver.py:151
+msgid "The server could not complete the request."
+msgstr ""
+
+#: ../src/jarabe/desktop/viewtoolbar.py:95
+msgid "List view"
+msgstr ""
+
+#: ../src/jarabe/desktop/viewtoolbar.py:97
+#: ../src/jarabe/desktop/viewtoolbar.py:195
+#: ../src/jarabe/desktop/viewtoolbar.py:209
+#, python-format
+msgid "<Ctrl>%d"
+msgstr ""
+
+#: ../src/jarabe/desktop/viewtoolbar.py:208
+#, python-format
+msgid "Favorites view %d"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:195
+#: ../src/jarabe/frame/activitiestray.py:593
+msgid "Decline"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:534
+#, python-format
+msgid "%dB"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:536
+#, python-format
+msgid "%dKB"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:538
+#, python-format
+msgid "%dMB"
+msgstr ""
+
+#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024
+#: ../src/jarabe/frame/activitiestray.py:556
+#, python-format
+msgid "%s of %s"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:570
+#, python-format
+msgid "Transfer from %s"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:585
+msgid "Accept"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:653
+#: ../src/jarabe/frame/activitiestray.py:666
+#: ../src/jarabe/frame/activitiestray.py:807
+msgid "Dismiss"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:680
+msgid "The other participant canceled the file transfer"
+msgstr ""
+
+#: ../src/jarabe/frame/activitiestray.py:730
+#, python-format
+msgid "Transfer to %s"
+msgstr ""
+
+#: ../src/jarabe/frame/clipboardmenu.py:54
+msgctxt "Clipboard"
+msgid "Remove"
+msgstr ""
+
+#: ../src/jarabe/frame/clipboardmenu.py:60
+#: ../src/jarabe/frame/clipboardmenu.py:83
+msgid "Open"
+msgstr ""
+
+#: ../src/jarabe/frame/clipboardmenu.py:88
+msgid "Open with"
+msgstr ""
+
+#: ../src/jarabe/frame/clipboardobject.py:50
+#, python-format
+msgid "%s clipping"
+msgstr ""
+
+#: ../src/jarabe/frame/zoomtoolbar.py:50
+msgid "F1"
+msgstr ""
+
+#: ../src/jarabe/frame/zoomtoolbar.py:54
+msgid "F2"
+msgstr ""
+
+#: ../src/jarabe/frame/zoomtoolbar.py:58
+msgid "F3"
+msgstr ""
+
+#: ../src/jarabe/frame/zoomtoolbar.py:63
+msgid "F4"
+msgstr ""
+
+#: ../src/jarabe/intro/window.py:106
+msgid "Name:"
+msgstr ""
+
+#: ../src/jarabe/intro/window.py:136
+msgid "Click to change color:"
+msgstr ""
+
+#: ../src/jarabe/intro/window.py:200 ../src/jarabe/journal/detailview.py:95
+msgid "Back"
+msgstr ""
+
+#: ../src/jarabe/intro/window.py:214
+msgid "Next"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:155
+#: ../src/jarabe/journal/journaltoolbox.py:477
+#: ../src/jarabe/journal/palettes.py:156
+#, python-format
+msgid "Do you want to permanently erase \"%s\"?"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:296
+#: ../src/jarabe/journal/listmodel.py:159 ../src/jarabe/journal/model.py:721
+#: ../src/jarabe/journal/palettes.py:70 ../src/jarabe/journal/palettes.py:597
+#: ../src/jarabe/journal/volumestoolbar.py:131
+#: ../src/jarabe/journal/iconmodel.py:110
+msgid "Untitled"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:367
+msgid "No preview"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:382
+#, python-format
+msgid "Kind: %s"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:382
+#: ../src/jarabe/journal/listmodel.py:165
+#: ../src/jarabe/journal/listmodel.py:173
+msgid "Unknown"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:383
+#, python-format
+msgid "Date: %s"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:384
+#, python-format
+msgid "Size: %s"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:411
+#: ../src/jarabe/journal/misc.py:109
+msgid "No date"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:420
+msgid "Participants:"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:458
+msgid "Description:"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:464
+msgid "Tags:"
+msgstr ""
+
+#: ../src/jarabe/journal/expandedentry.py:469
+msgid "Comments:"
+msgstr ""
+
+#: ../src/jarabe/journal/journalactivity.py:140
+#: ../src/jarabe/journal/journaltoolbox.py:89
+#: ../src/jarabe/journal/palettes.py:248
+#: ../src/jarabe/journal/volumestoolbar.py:363
+msgid "Journal"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:98
+msgid "Favorite entries"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:134
+msgid "Anytime"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:136
+msgid "Today"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:138
+msgid "Since yesterday"
+msgstr ""
+
+#. TRANS: Filter entries modified during the last 7 days.
+#: ../src/jarabe/journal/journaltoolbox.py:140
+msgid "Past week"
+msgstr ""
+
+#. TRANS: Filter entries modified during the last 30 days.
+#: ../src/jarabe/journal/journaltoolbox.py:142
+msgid "Past month"
+msgstr ""
+
+#. TRANS: Filter entries modified during the last 356 days.
+#: ../src/jarabe/journal/journaltoolbox.py:144
+msgid "Past year"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:151
+msgid "Anyone"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:153
+msgid "My friends"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:154
+msgid "My class"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:327
+msgid "Anything"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:419
+#: ../src/jarabe/journal/palettes.py:99
+msgid "Copy to"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:427
+#: ../src/jarabe/journal/palettes.py:110 ../src/jarabe/view/viewsource.py:282
+msgid "Duplicate"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:433
+msgid "Refresh"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:470
+#: ../src/jarabe/journal/palettes.py:149 ../src/jarabe/journal/palettes.py:360
+#: ../src/jarabe/journal/volumestoolbar.py:310
+#, python-format
+msgid "Error while copying the entry. %s"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:471
+#: ../src/jarabe/journal/palettes.py:150 ../src/jarabe/journal/palettes.py:361
+#: ../src/jarabe/journal/volumestoolbar.py:311
+msgid "Error"
+msgstr ""
+
+#. TRANS: Action label for starting an entry.
+#: ../src/jarabe/journal/journaltoolbox.py:551
+#: ../src/jarabe/journal/palettes.py:80
+msgid "Start"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:579
+msgid "Sort by date modified"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:580
+msgid "Sort by date created"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:581
+msgid "Sort by size"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:590
+msgid "Sort view"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:661
+msgid "Deselect all"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:674
+msgid "Select all"
+msgstr ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:700
+#, python-format
+msgid "Do you want to erase %d entry?"
+msgid_plural "Do you want to erase %d entries?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../src/jarabe/journal/journaltoolbox.py:714
+#: ../src/jarabe/journal/palettes.py:364
+msgid "Copy"
+msgstr ""
+
+#. TRANS: Do not translate %(selected)d and %(total)d.
+#: ../src/jarabe/journal/journaltoolbox.py:759
+#, python-format
+msgid "Selected %(selected)d of %(total)d"
+msgstr ""
+
+#: ../src/jarabe/journal/listview.py:387 ../src/jarabe/journal/iconview.py:211
+msgid "Your Journal is empty"
+msgstr ""
+
+#: ../src/jarabe/journal/listview.py:390 ../src/jarabe/journal/iconview.py:214
+msgid "Your documents folder is empty"
+msgstr ""
+
+#: ../src/jarabe/journal/listview.py:392 ../src/jarabe/journal/iconview.py:216
+msgid "The device is empty"
+msgstr ""
+
+#: ../src/jarabe/journal/listview.py:394 ../src/jarabe/journal/iconview.py:218
+msgid "No matching entries"
+msgstr ""
+
+#: ../src/jarabe/journal/misc.py:252
+#, python-format
+msgid "Older Version Of %s Activity"
+msgstr ""
+
+#: ../src/jarabe/journal/misc.py:253
+#, python-format
+msgid "Do you want to downgrade to version %s"
+msgstr ""
+
+#: ../src/jarabe/journal/modalalert.py:65
+msgid "Your Journal is full"
+msgstr ""
+
+#: ../src/jarabe/journal/modalalert.py:70
+msgid "Please delete some old Journal entries to make space for new ones."
+msgstr ""
+
+#: ../src/jarabe/journal/modalalert.py:84
+msgid "Show Journal"
+msgstr ""
+
+#: ../src/jarabe/journal/objectchooser.py:170
+msgid "Choose an object"
+msgstr ""
+
+#: ../src/jarabe/journal/objectchooser.py:175
+#, python-format
+msgid "Choose an object to open with %s activity"
+msgstr ""
+
+#: ../src/jarabe/journal/objectchooser.py:183
+#: ../src/jarabe/view/viewsource.py:418
+msgid "Close"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:78
+msgid "Resume with"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:81
+msgid "Start with"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:94 ../src/jarabe/journal/palettes.py:489
+msgid "No activity to start entry"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:118
+msgid "Send to"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:127
+msgid "View Details"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:186
+msgid "Entries without a file cannot be sent."
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:260
+#: ../src/jarabe/journal/volumestoolbar.py:211
+msgid "Documents"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:349 ../src/jarabe/journal/palettes.py:409
+#: ../src/jarabe/journal/volumestoolbar.py:301
+msgid "Entries without a file cannot be copied."
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:369
+#, python-format
+msgid "Do you want to copy %d entry?"
+msgid_plural "Do you want to copy %d entries?"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
+#: ../src/jarabe/journal/palettes.py:394
+msgid "Clipboard"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:454
+msgid "No friends present"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:459
+msgid "No valid connection found"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:487
+msgid "No activity to resume entry"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:556 ../src/jarabe/view/palettes.py:110
+msgid "Stop"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:561
+msgid "Continue"
+msgstr ""
+
+#: ../src/jarabe/journal/palettes.py:598
+#, python-format
+msgid "%(index)d of %(total)d : %(object_title)s"
+msgstr ""
+
+#: ../src/jarabe/journal/volumestoolbar.py:386
+#: ../src/jarabe/view/palettes.py:225 ../src/jarabe/view/palettes.py:292
+#, python-format
+msgid "%(free_space)d MB Free"
+msgstr ""
+
+#: ../src/jarabe/model/network.py:214
+msgid "The reason for the device state change is unknown."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:216
+msgid "The state change is normal."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:218
+msgid "The device is now managed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:220
+msgid "The device is no longer managed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:222
+msgid "The device could not be readied for configuration."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:224
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc)."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:227
+msgid "The IP configuration is no longer valid."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:229
+msgid "Secrets were required, but not provided."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:231
+msgid ""
+"The 802.1X supplicant disconnected from the access point or authentication "
+"server."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:234
+msgid "Configuration of the 802.1X supplicant failed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:236
+msgid "The 802.1X supplicant quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:238
+msgid "The 802.1X supplicant took too long to authenticate."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:240
+msgid "The PPP service failed to start within the allowed time."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:242
+msgid "The PPP service disconnected unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:244
+msgid "The PPP service quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:246
+msgid "The DHCP service failed to start within the allowed time."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:248
+msgid "The DHCP service reported an unexpected error."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:250
+msgid "The DHCP service quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:252
+msgid "The shared connection service failed to start."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:254
+msgid "The shared connection service quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:257
+msgid "The AutoIP service failed to start."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:259
+msgid "The AutoIP service reported an unexpected error."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:261
+msgid "The AutoIP service quit or failed unexpectedly."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:263
+msgid "Dialing failed because the line was busy."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:265
+msgid "Dialing failed because there was no dial tone."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:267
+msgid "Dialing failed because there was no carrier."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:269
+msgid "Dialing timed out."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:271
+msgid "Dialing failed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:273
+msgid "Modem initialization failed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:275
+msgid "Failed to select the specified GSM APN"
+msgstr ""
+
+#: ../src/jarabe/model/network.py:277
+msgid "Not searching for networks."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:279
+msgid "Network registration was denied."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:281
+msgid "Network registration timed out."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:283
+msgid "Failed to register with the requested GSM network."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:285
+msgid "PIN check failed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:287
+msgid "Necessary firmware for the device may be missing."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:289
+msgid "The device was removed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:291
+msgid "NetworkManager went to sleep."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:293
+msgid "The device's active connection was removed or disappeared."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:296
+msgid "A user or client requested the disconnection."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:298
+msgid "The device's carrier/link changed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:300
+msgid "The device's existing connection was assumed."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:302
+msgid "The supplicant is now available."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:304
+msgid "The modem could not be found."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:306
+msgid "The Bluetooth connection failed or timed out."
+msgstr ""
+
+#: ../src/jarabe/model/network.py:308
+msgid "Unused."
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:72
+msgid "Remove friend"
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:75
+msgid "Make friend"
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:91
+msgid "Shutdown"
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:98
+msgid "Restart"
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:104
+msgid "Logout"
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:109
+msgid "My Settings"
+msgstr ""
+
+#: ../src/jarabe/view/buddymenu.py:149
+#, python-format
+msgid "Invite to %s"
+msgstr ""
+
+#: ../src/jarabe/view/launcher.py:144
+#, python-format
+msgid "<b>%s</b> failed to start."
+msgstr ""
+
+#: ../src/jarabe/view/palettes.py:51
+msgid "Starting..."
+msgstr ""
+
+#: ../src/jarabe/view/palettes.py:61
+msgid "Activity failed to start"
+msgstr ""
+
+#. TODO: share-with, keep
+#: ../src/jarabe/view/palettes.py:102
+msgid "View Source"
+msgstr ""
+
+#: ../src/jarabe/view/palettes.py:153
+msgid "Start new"
+msgstr ""
+
+#: ../src/jarabe/view/palettes.py:241
+msgctxt "Volume"
+msgid "Remove"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:271
+msgid "Instance Source"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:320
+msgid "Source"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:382
+msgid "Activity Bundle Source"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:401
+msgid "Sugar Toolkit Source"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:408
+#, python-format
+msgid "View source: %s"
+msgstr ""
+
+#: ../src/jarabe/view/viewsource.py:409
+#, python-format
+msgid "View source: %r"
+msgstr ""
diff --git b/po/sugar.pot a/po/sugar.pot
new file mode 100644
index 0000000..3b96607
--- /dev/null
+++ a/po/sugar.pot
@@ -0,0 +1,1998 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-03-13 14:29+1100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: extensions/cpsection/aboutcomputer/__init__.py:20
+msgid "About my Computer"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/model.py:36
+msgid "Not available"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:76
+msgid "Identity"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:87
+msgid "Model:"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:91
+msgid "Serial Number:"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:103
+msgid "Software"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:112
+msgid "Build:"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:117
+msgid "Sugar:"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:122
+msgid "Firmware:"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:127
+msgid "Wireless Firmware:"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:134
+#, python-format
+msgid "%d days ago"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:136
+#: src/jarabe/journal/journaltoolbox.py:178
+msgid "Today"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:139
+msgid "Last system update:"
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:150
+msgid "Copyright and License"
+msgstr ""
+
+#. TRANS: The word "Sugar" should not be translated.
+#: extensions/cpsection/aboutcomputer/view.py:169
+msgid ""
+"Sugar is the graphical user interface that you are looking at. Sugar is free "
+"software, covered by the GNU General Public License, and you are welcome to "
+"change it and/or distribute copies of it under certain conditions described "
+"therein."
+msgstr ""
+
+#: extensions/cpsection/aboutcomputer/view.py:182
+msgid "Full license:"
+msgstr ""
+
+#: extensions/cpsection/aboutme/__init__.py:23
+msgid "About Me"
+msgstr ""
+
+#: extensions/cpsection/aboutme/model.py:50
+msgid "You must enter a name."
+msgstr ""
+
+#: extensions/cpsection/aboutme/model.py:96
+msgid "Error in specified color modifiers."
+msgstr ""
+
+#: extensions/cpsection/aboutme/model.py:99
+msgid "Error in specified colors."
+msgstr ""
+
+#: extensions/cpsection/aboutme/view.py:244
+msgid "Click to change your color:"
+msgstr ""
+
+#: extensions/cpsection/aboutme/view.py:295 src/jarabe/intro/window.py:195
+msgid "Select gender:"
+msgstr ""
+
+#: extensions/cpsection/background/__init__.py:21
+msgid "Background"
+msgstr ""
+
+#: extensions/cpsection/background/view.py:48
+msgid "Select a background:"
+msgstr ""
+
+#: extensions/cpsection/background/view.py:57
+msgid "Clear background"
+msgstr ""
+
+#: extensions/cpsection/backup/backends/volume.py:60
+#: extensions/cpsection/backup/backends/volume.py:170
+msgid "Please connect a device to continue"
+msgstr ""
+
+#: extensions/cpsection/backup/backends/volume.py:68
+#: extensions/cpsection/backup/backends/volume.py:177
+msgid "Select your volume"
+msgstr ""
+
+#: extensions/cpsection/backup/backends/volume.py:77
+msgid "Not enough space in volume"
+msgstr ""
+
+#: extensions/cpsection/backup/backends/volume.py:121
+#, python-format
+msgid "Backup from user %s"
+msgstr ""
+
+#: extensions/cpsection/backup/backends/volume.py:190
+msgid "No checkpoints found in the device"
+msgstr ""
+
+#: extensions/cpsection/backup/backends/volume.py:198
+msgid "Select your checkpoint"
+msgstr ""
+
+#: extensions/cpsection/backup/backends/volume.py:209
+msgid "Not enough space in disk"
+msgstr ""
+
+#: extensions/cpsection/backup/backends/volume.py:328
+msgid "Local Device Backup"
+msgstr ""
+
+#: extensions/cpsection/backup/__init__.py:21
+msgid "Backup"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:132
+msgid "Save the contents of your Journal"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:140
+msgid "Restore the contents of your Journal"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:211
+#: extensions/cpsection/backup/view.py:264 src/jarabe/journal/palettes.py:615
+msgid "Continue"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:222
+msgid "Please close all the activities, and start again"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:228
+msgid "Select where you want create your backup"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:230
+msgid "Select where you want retrieve your restore"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:270
+msgid "Retry"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:289
+msgid "Starting backup..."
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:293
+msgid "Starting restore..."
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:320
+msgid ""
+"I want to restore the content of my Journal. In order to do this, my Journal "
+"will first be emptied of all its content; then the restored content will be "
+"added."
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:323
+#: src/jarabe/frame/activitiestray.py:657
+msgid "Accept"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:326
+msgid "Confirm"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:364
+msgid "Operation started"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:376
+msgid "Backup finished successfully"
+msgstr ""
+
+#: extensions/cpsection/backup/view.py:378
+msgid "Restore realized successfully."
+msgstr ""
+
+#: extensions/cpsection/datetime/__init__.py:21
+msgid "Date & Time"
+msgstr ""
+
+#: extensions/cpsection/datetime/model.py:99
+msgid "Error: timezone does not exist."
+msgstr ""
+
+#: extensions/cpsection/datetime/view.py:67
+msgid "Timezone"
+msgstr ""
+
+#: extensions/cpsection/frame/__init__.py:21
+msgid "Frame"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:26
+msgid "never"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:27
+msgid "instantaneous"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:28
+#, python-format
+msgid "%s seconds"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:52
+msgid "Activation Delay"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:68
+msgid "Activation Area"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:85
+msgid "Corner"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:104
+msgid "Edge"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:123
+msgid "Size"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:221
+msgid "toolbar size"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:226
+msgid "exact corner or edge"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:228
+msgid "exact corner"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:230
+msgid "exact edge"
+msgstr ""
+
+#: extensions/cpsection/frame/view.py:232
+msgid "ignored"
+msgstr ""
+
+#. TRANS: px as in pixels
+#: extensions/cpsection/frame/view.py:235
+msgid "{}px"
+msgstr ""
+
+#: extensions/cpsection/keyboard/__init__.py:21
+#: extensions/cpsection/keyboard/view.py:39
+msgid "Keyboard"
+msgstr ""
+
+#: extensions/cpsection/keyboard/view.py:241
+msgid "Keyboard Model"
+msgstr ""
+
+#: extensions/cpsection/keyboard/view.py:302
+msgid "Key(s) to change layout"
+msgstr ""
+
+#: extensions/cpsection/keyboard/view.py:370
+msgid "Keyboard Layout(s)"
+msgstr ""
+
+#: extensions/cpsection/language/__init__.py:21
+#: extensions/cpsection/language/view.py:44
+msgid "Language"
+msgstr ""
+
+#: extensions/cpsection/language/model.py:28
+msgid "Could not access ~/.i18n. Create standard settings."
+msgstr ""
+
+#: extensions/cpsection/language/model.py:150
+#, python-format
+msgid "Language for code=%s could not be determined."
+msgstr ""
+
+#: extensions/cpsection/language/model.py:173
+#, python-format
+msgid "Sorry I do not speak '%s'."
+msgstr ""
+
+#: extensions/cpsection/language/view.py:81
+msgid ""
+"Add languages in the order you prefer. If a translation is not available, "
+"the next in the list will be used."
+msgstr ""
+
+#: extensions/cpsection/language/view.py:400
+#, python-format
+msgid "Error writing language configuration (%s)"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/__init__.py:20
+msgid "Modem"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/model.py:161
+#, python-format
+msgid "Plan #%s"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/model.py:291
+#, python-format
+msgid "Provider %s"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:93
+msgid ""
+"You will need to provide the following information to set up a mobile "
+"broadband connection to a cellular (3G) network."
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:116
+msgid "Country:"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:117
+msgid "Provider:"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:118
+msgid "Plan:"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:159
+#: extensions/cpsection/network/view.py:548
+msgid "Username:"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:166
+#: extensions/cpsection/network/view.py:554
+msgid "Password:"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:173
+msgid "Number:"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:180
+msgid "Access Point Name (APN):"
+msgstr ""
+
+#: extensions/cpsection/modemconfiguration/view.py:187
+msgid "Personal Identity Number (PIN):"
+msgstr ""
+
+#: extensions/cpsection/network/__init__.py:20
+#: extensions/cpsection/network/view.py:36
+msgid "Network"
+msgstr ""
+
+#: extensions/cpsection/network/model.py:81
+msgid "State is unknown."
+msgstr ""
+
+#: extensions/cpsection/network/model.py:96
+msgid "Error in specified radio argument. Use on/off."
+msgstr ""
+
+#: extensions/cpsection/network/model.py:133
+msgid "Error in specified argument. Use 0/1."
+msgstr ""
+
+#: extensions/cpsection/network/view.py:321
+msgid "Wireless"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:329
+msgid "The wireless radio may be turned off to save battery life."
+msgstr ""
+
+#: extensions/cpsection/network/view.py:342
+msgid "Radio"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:359
+msgid ""
+"Discard wireless connections if you have trouble connecting to the network"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:369
+msgid "Discard wireless connections"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:385
+msgid "Collaboration"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:393
+msgid ""
+"The server is the equivalent of what room you are in; people on the same "
+"server will be able to see each other, even when they aren't on the same "
+"network."
+msgstr ""
+
+#: extensions/cpsection/network/view.py:403
+msgid "Server:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:419
+msgid ""
+"Social Help is a forum that lets you connect with developers and discuss "
+"Sugar Activities. Changing servers means discussions will happen in a "
+"different place with different people."
+msgstr ""
+
+#: extensions/cpsection/network/view.py:429
+msgid "Social Help Server:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:458
+msgid "Proxy"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:470
+#: src/jarabe/journal/journaltoolbox.py:604 src/jarabe/journal/palettes.py:183
+#: src/jarabe/journal/palettes.py:404 src/jarabe/journal/volumestoolbar.py:312
+msgid "Error"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:471
+msgid "Proxy settings cannot be verified"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:507
+msgid "Method:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:514
+msgid "Configuration URL:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:522
+msgid ""
+"Web Proxy Autodiscovery is used when a Configuration URL is not provided. "
+"This is not recommended for untrusted public networks."
+msgstr ""
+
+#: extensions/cpsection/network/view.py:534
+msgid "HTTP Proxy:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:540
+msgid "Use authentication"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:563
+msgid "HTTPS Proxy:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:572
+msgid "FTP Proxy:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:581
+msgid "SOCKS Proxy:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:588
+msgid "Ignore Hosts:"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:645
+msgid "Please Wait!"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:646
+msgid "Proxy settings are being verified."
+msgstr ""
+
+#: extensions/cpsection/network/view.py:663
+msgid "Error!"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:664
+msgid ""
+"The following setting(s) seems to be incorrect and may break your internet "
+"connection"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:670
+msgid "Break my internet"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:674
+msgid "Reset"
+msgstr ""
+
+#: extensions/cpsection/network/view.py:692
+msgid "Proxy changes require restart"
+msgstr ""
+
+#: extensions/cpsection/power/__init__.py:24
+msgid "Power"
+msgstr ""
+
+#: extensions/cpsection/power/model.py:89
+msgid "Error in automatic pm argument, use on/off."
+msgstr ""
+
+#: extensions/cpsection/power/view.py:45
+msgid "Power management"
+msgstr ""
+
+#: extensions/cpsection/power/view.py:55
+msgid "Automatic power management (increases battery life)"
+msgstr ""
+
+#: extensions/cpsection/updater/__init__.py:21
+msgid "Software Update"
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:70
+msgid ""
+"Software updates correct errors, eliminate security vulnerabilities, and "
+"provide new features."
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:84
+msgid "Update in progress..."
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:119
+msgid "Checking for updates..."
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:121
+msgid "Installing updates..."
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:150
+#, python-format
+msgid "Checking %s..."
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:152
+msgid "Looking for updates..."
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:154
+#, python-format
+msgid "Downloading %s..."
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:156
+#, python-format
+msgid "Updating %s..."
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:166
+msgid "Your software is up-to-date"
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:168
+#, python-format
+msgid "You can install %s update"
+msgid_plural "You can install %s updates"
+msgstr[0] ""
+msgstr[1] ""
+
+#: extensions/cpsection/updater/view.py:183
+msgid "Can't connect to the activity server"
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:186
+msgid "Verify your connection to internet and try again, or try again later"
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:206
+#, python-format
+msgid "%s update was installed"
+msgid_plural "%s updates were installed"
+msgstr[0] ""
+msgstr[1] ""
+
+#: extensions/cpsection/updater/view.py:288
+msgid "Install selected"
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:307
+#, python-format
+msgid "Download size: %s"
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:399
+#, python-format
+msgid "From version %(current)s to %(new)s (Size: %(size)s)"
+msgstr ""
+
+#: extensions/cpsection/updater/view.py:406
+#, python-format
+msgid "Version %(version)s (Size: %(size)s)"
+msgstr ""
+
+#. TRANS: download size is 0
+#: extensions/cpsection/updater/view.py:423
+msgid "None"
+msgstr ""
+
+#. TRANS: download size of very small updates
+#: extensions/cpsection/updater/view.py:426
+msgid "1 KiB"
+msgstr ""
+
+#. TRANS: download size of small updates, e.g. '250 KiB'
+#: extensions/cpsection/updater/view.py:429
+#, python-format
+msgid "%.0f KiB"
+msgstr ""
+
+#. TRANS: download size of updates, e.g. '2.3 MiB'
+#: extensions/cpsection/updater/view.py:432
+#, python-format
+msgid "%.1f MiB"
+msgstr ""
+
+#: extensions/cpsection/webaccount/__init__.py:24
+msgid "Web Services"
+msgstr ""
+
+#: extensions/cpsection/webaccount/view.py:65
+#, python-format
+msgid ""
+"No web services are installed.\n"
+"Please visit %s for more details."
+msgstr ""
+
+#: extensions/deviceicon/audio.py:68
+msgid "My Audio"
+msgstr ""
+
+#: extensions/deviceicon/audio.py:330
+msgid "Speaker"
+msgstr ""
+
+#: extensions/deviceicon/audio.py:331
+msgid "Microphone"
+msgstr ""
+
+#: extensions/deviceicon/battery.py:78
+msgid "My Battery"
+msgstr ""
+
+#: extensions/deviceicon/battery.py:161
+msgid "Removed"
+msgstr ""
+
+#: extensions/deviceicon/battery.py:164
+msgid "Charging"
+msgstr ""
+
+#: extensions/deviceicon/battery.py:167
+msgid "Very little power remaining"
+msgstr ""
+
+#. TRANS: do not translate %(hour)d:%(min).2d it is a variable,
+#. only translate the word "remaining"
+#: extensions/deviceicon/battery.py:174
+#, python-format
+msgid "%(hour)d:%(min).2d remaining"
+msgstr ""
+
+#: extensions/deviceicon/battery.py:177
+msgid "Charged"
+msgstr ""
+
+#: extensions/deviceicon/display.py:185
+msgid "My Display"
+msgstr ""
+
+#: extensions/deviceicon/display.py:187
+msgid "Take a screenshot"
+msgstr ""
+
+#: extensions/deviceicon/display.py:209
+msgid "Brightness"
+msgstr ""
+
+#: extensions/deviceicon/display.py:237
+msgid "Display"
+msgstr ""
+
+#: extensions/deviceicon/frame.py:53
+msgid "Show my keyboard"
+msgstr ""
+
+#: extensions/deviceicon/network.py:47
+#, python-format
+msgid "IP address: %s"
+msgstr ""
+
+#: extensions/deviceicon/network.py:96 extensions/deviceicon/network.py:311
+#: src/jarabe/desktop/networkviews.py:135
+#: src/jarabe/desktop/networkviews.py:538
+msgid "Disconnect"
+msgstr ""
+
+#: extensions/deviceicon/network.py:122 extensions/deviceicon/network.py:304
+#: src/jarabe/desktop/networkviews.py:275
+#: src/jarabe/desktop/networkviews.py:580
+#: src/jarabe/desktop/networkviews.py:725
+msgid "Connecting..."
+msgstr ""
+
+#: extensions/deviceicon/network.py:126 extensions/deviceicon/network.py:196
+#: src/jarabe/desktop/networkviews.py:282
+#: src/jarabe/desktop/networkviews.py:586
+#: src/jarabe/desktop/networkviews.py:731
+msgid "Connected"
+msgstr ""
+
+#: extensions/deviceicon/network.py:139
+msgid "No wireless connection"
+msgstr ""
+
+#: extensions/deviceicon/network.py:153 extensions/deviceicon/network.py:156
+msgid "Channel"
+msgstr ""
+
+#: extensions/deviceicon/network.py:154 src/jarabe/journal/expandedentry.py:408
+#: src/jarabe/journal/listmodel.py:189 src/jarabe/journal/listmodel.py:197
+msgid "Unknown"
+msgstr ""
+
+#: extensions/deviceicon/network.py:171
+msgid "Wired Network"
+msgstr ""
+
+#: extensions/deviceicon/network.py:199
+msgid "Speed"
+msgstr ""
+
+#: extensions/deviceicon/network.py:223
+msgid "Wireless modem"
+msgstr ""
+
+#: extensions/deviceicon/network.py:292
+msgid "Please wait..."
+msgstr ""
+
+#: extensions/deviceicon/network.py:296 src/jarabe/desktop/networkviews.py:129
+#: src/jarabe/desktop/networkviews.py:532
+#: src/jarabe/desktop/networkviews.py:676
+msgid "Connect"
+msgstr ""
+
+#: extensions/deviceicon/network.py:297
+msgid "Disconnected"
+msgstr ""
+
+#: extensions/deviceicon/network.py:303 src/jarabe/controlpanel/toolbar.py:122
+#: src/jarabe/frame/activitiestray.py:702
+#: src/jarabe/frame/activitiestray.py:824
+#: src/jarabe/frame/activitiestray.py:857
+#: src/jarabe/journal/expandedentry.py:160
+#: src/jarabe/journal/journaltoolbox.py:613 src/jarabe/journal/palettes.py:192
+msgid "Cancel"
+msgstr ""
+
+#: extensions/deviceicon/network.py:341
+msgid "Try connection again"
+msgstr ""
+
+#: extensions/deviceicon/network.py:344
+#, python-format
+msgid "Error: %s"
+msgstr ""
+
+#: extensions/deviceicon/network.py:348
+#, python-format
+msgid "Suggestion: %s"
+msgstr ""
+
+#: extensions/deviceicon/network.py:358
+#, python-format
+msgid "Connected for %s"
+msgstr ""
+
+#: extensions/deviceicon/network.py:361 extensions/deviceicon/network.py:362
+#: src/jarabe/frame/activitiestray.py:607
+#, python-format
+msgid "%d KiB"
+msgstr ""
+
+#: extensions/deviceicon/network.py:367
+msgid "Check your PIN/PUK configuration."
+msgstr ""
+
+#: extensions/deviceicon/network.py:370
+msgid "Check your Access Point Name (APN) configuration"
+msgstr ""
+
+#: extensions/deviceicon/network.py:374
+msgid "Check the Number configuration."
+msgstr ""
+
+#: extensions/deviceicon/network.py:376
+msgid "Check your configuration."
+msgstr ""
+
+#: extensions/deviceicon/network.py:633
+msgid "Mesh Network"
+msgstr ""
+
+#: extensions/deviceicon/network.py:679
+#, python-format
+msgid "Mesh Network %s"
+msgstr ""
+
+#: extensions/deviceicon/network.py:799
+msgid "No GSM connection available."
+msgstr ""
+
+#: extensions/deviceicon/network.py:800
+msgid "Create a connection in My Settings."
+msgstr ""
+
+#: extensions/deviceicon/speech.py:48
+msgid "Speech"
+msgstr ""
+
+#: extensions/deviceicon/speech.py:71 extensions/deviceicon/speech.py:146
+#: extensions/deviceicon/speech.py:151
+msgid "Say selected text"
+msgstr ""
+
+#: extensions/deviceicon/speech.py:79
+msgid "Stop playback"
+msgstr ""
+
+#: extensions/deviceicon/speech.py:88
+msgid "Pitch"
+msgstr ""
+
+#: extensions/deviceicon/speech.py:103
+msgid "Rate"
+msgstr ""
+
+#: extensions/deviceicon/speech.py:141
+msgid "Pause playback"
+msgstr ""
+
+#: extensions/deviceicon/touchpad.py:35
+msgid "finger"
+msgstr ""
+
+#: extensions/deviceicon/touchpad.py:35
+msgid "stylus"
+msgstr ""
+
+#: extensions/deviceicon/touchpad.py:60
+msgid "My touchpad"
+msgstr ""
+
+#: extensions/deviceicon/volume.py:61 src/jarabe/view/palettes.py:222
+msgid "Show contents"
+msgstr ""
+
+#: src/jarabe/controlpanel/cmd.py:27
+#, python-format
+msgid ""
+"sugar-control-panel: WARNING, found more than one option with the same name: "
+"%(key)s module: %(module)r"
+msgstr ""
+
+#: src/jarabe/controlpanel/cmd.py:30
+#, python-format
+msgid "sugar-control-panel: key=%s not an available option"
+msgstr ""
+
+#. TRANS: Translators, there's a empty line at the end of this string,
+#. which must appear in the translated string (msgstr) as well.
+#: src/jarabe/controlpanel/cmd.py:38
+msgid ""
+"Usage: sugar-control-panel [ option ] key [ args ... ] \n"
+" Control for the sugar environment. \n"
+" Options: \n"
+" -h show this help message and exit \n"
+" -l list all the available options \n"
+" -h key show information about this key \n"
+" -g key get the current value of the key \n"
+" -s key set the current value for the key \n"
+" -c key clear the current value for the key \n"
+" "
+msgstr ""
+
+#: src/jarabe/controlpanel/cmd.py:52
+msgid ""
+"To apply your changes you have to restart Sugar.\n"
+"Hit ctrl+alt+erase on the keyboard to trigger a restart."
+msgstr ""
+
+#: src/jarabe/controlpanel/gui.py:397 src/jarabe/journal/palettes.py:224
+#: src/jarabe/journal/palettes.py:393 src/jarabe/journal/palettes.py:453
+#: src/jarabe/journal/volumestoolbar.py:303
+msgid "Warning"
+msgstr ""
+
+#: src/jarabe/controlpanel/gui.py:403
+msgid "Cancel changes"
+msgstr ""
+
+#: src/jarabe/controlpanel/gui.py:408
+msgid "Later"
+msgstr ""
+
+#: src/jarabe/controlpanel/gui.py:412
+msgid "Restart now"
+msgstr ""
+
+#: src/jarabe/controlpanel/gui.py:441 src/jarabe/view/buddymenu.py:138
+msgid "An activity is not responding."
+msgstr ""
+
+#: src/jarabe/controlpanel/gui.py:442 src/jarabe/view/buddymenu.py:139
+msgid "You may lose unsaved work if you continue."
+msgstr ""
+
+#: src/jarabe/controlpanel/sectionview.py:50
+msgid "Changes require restart"
+msgstr ""
+
+#: src/jarabe/controlpanel/toolbar.py:57 src/jarabe/desktop/viewtoolbar.py:129
+#: src/jarabe/journal/journaltoolbox.py:95
+#, python-format
+msgid "Search in %s"
+msgstr ""
+
+#: src/jarabe/controlpanel/toolbar.py:57
+msgid "Settings"
+msgstr ""
+
+#: src/jarabe/controlpanel/toolbar.py:66 src/jarabe/intro/window.py:349
+msgid "Done"
+msgstr ""
+
+#: src/jarabe/controlpanel/toolbar.py:128
+msgid "Ok"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:413
+#, python-format
+msgid "Version %s"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:498 src/jarabe/journal/iconview.py:300
+#: src/jarabe/journal/listview.py:610
+msgid "Clear search"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:585
+msgid "No matching activities"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:621
+msgid "Confirm erase"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:623
+#, python-format
+msgid "Confirm erase: Do you want to permanently erase %s?"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:627
+#: src/jarabe/frame/clipboardmenu.py:64 src/jarabe/view/viewsource.py:386
+msgid "Keep"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:630
+#: src/jarabe/desktop/activitieslist.py:700
+#: src/jarabe/journal/expandedentry.py:154
+#: src/jarabe/journal/journaltoolbox.py:571
+#: src/jarabe/journal/journaltoolbox.py:608
+#: src/jarabe/journal/journaltoolbox.py:838
+#: src/jarabe/journal/journaltoolbox.py:844 src/jarabe/journal/palettes.py:155
+#: src/jarabe/journal/palettes.py:187
+msgid "Erase"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:716
+msgid "Remove favorite"
+msgstr ""
+
+#: src/jarabe/desktop/activitieslist.py:720
+msgid "Make favorite"
+msgstr ""
+
+#. TRANS: label for the freeform layout in the favorites view
+#: src/jarabe/desktop/favoriteslayout.py:211
+msgid "Freeform"
+msgstr ""
+
+#. TRANS: label for the ring layout in the favorites view
+#: src/jarabe/desktop/favoriteslayout.py:305
+msgid "Ring"
+msgstr ""
+
+#. TRANS: label for the spiral layout in the favorites view
+#: src/jarabe/desktop/favoriteslayout.py:471
+msgid "Spiral"
+msgstr ""
+
+#. TRANS: label for the box layout in the favorites view
+#: src/jarabe/desktop/favoriteslayout.py:539
+msgid "Box"
+msgstr ""
+
+#. TRANS: label for the box layout in the favorites view
+#: src/jarabe/desktop/favoriteslayout.py:585
+msgid "Triangle"
+msgstr ""
+
+#: src/jarabe/desktop/favoritesview.py:381
+msgid "Registration"
+msgstr ""
+
+#: src/jarabe/desktop/favoritesview.py:382
+msgid "Please wait, searching for your school server."
+msgstr ""
+
+#: src/jarabe/desktop/favoritesview.py:392
+msgid "Registration Failed"
+msgstr ""
+
+#: src/jarabe/desktop/favoritesview.py:395
+msgid "Registration Successful"
+msgstr ""
+
+#: src/jarabe/desktop/favoritesview.py:396
+msgid "You are now registered with your school server."
+msgstr ""
+
+#: src/jarabe/desktop/favoritesview.py:688
+msgid "Register"
+msgstr ""
+
+#: src/jarabe/desktop/favoritesview.py:690
+msgid "Register again"
+msgstr ""
+
+#: src/jarabe/desktop/homewindow.py:277 src/jarabe/desktop/viewtoolbar.py:73
+#: src/jarabe/frame/zoomtoolbar.py:56 src/jarabe/model/screenshot.py:62
+#: src/jarabe/view/viewhelp.py:89
+msgid "Home"
+msgstr ""
+
+#: src/jarabe/desktop/homewindow.py:283 src/jarabe/frame/zoomtoolbar.py:52
+#: src/jarabe/model/screenshot.py:60 src/jarabe/view/viewhelp.py:86
+msgid "Group"
+msgstr ""
+
+#: src/jarabe/desktop/homewindow.py:289 src/jarabe/frame/zoomtoolbar.py:48
+msgid "Neighborhood"
+msgstr ""
+
+#: src/jarabe/desktop/keydialog.py:93
+#, python-format
+msgid ""
+"A wireless encryption key is required for\n"
+" the wireless network '%s'."
+msgstr ""
+
+#: src/jarabe/desktop/keydialog.py:109
+msgid "Show Password"
+msgstr ""
+
+#: src/jarabe/desktop/keydialog.py:153
+msgid "Key Type:"
+msgstr ""
+
+#: src/jarabe/desktop/keydialog.py:173
+msgid "Authentication Type:"
+msgstr ""
+
+#: src/jarabe/desktop/keydialog.py:237
+msgid "WPA & WPA2 Personal"
+msgstr ""
+
+#: src/jarabe/desktop/keydialog.py:246
+msgid "Wireless Security:"
+msgstr ""
+
+#. TRANS: Action label for resuming an activity.
+#: src/jarabe/desktop/meshbox.py:82 src/jarabe/journal/journaltoolbox.py:685
+#: src/jarabe/journal/palettes.py:87 src/jarabe/view/palettes.py:100
+msgid "Resume"
+msgstr ""
+
+#: src/jarabe/desktop/meshbox.py:89 src/jarabe/frame/activitiestray.py:208
+msgid "Join"
+msgstr ""
+
+#: src/jarabe/desktop/networkviews.py:142
+msgid "Forget"
+msgstr ""
+
+#: src/jarabe/desktop/networkviews.py:527
+#, python-format
+msgid "Ad-hoc Network %d"
+msgstr ""
+
+#: src/jarabe/desktop/networkviews.py:672
+#, python-format
+msgid "Mesh Network %d"
+msgstr ""
+
+#: src/jarabe/desktop/schoolserver.py:143
+msgid "Cannot connect to the server."
+msgstr ""
+
+#: src/jarabe/desktop/schoolserver.py:150
+msgid "The server could not complete the request."
+msgstr ""
+
+#: src/jarabe/desktop/viewtoolbar.py:95
+msgid "List view"
+msgstr ""
+
+#: src/jarabe/desktop/viewtoolbar.py:97 src/jarabe/desktop/viewtoolbar.py:196
+#: src/jarabe/desktop/viewtoolbar.py:210
+#, python-format
+msgid "<Ctrl>%d"
+msgstr ""
+
+#: src/jarabe/frame/activitiestray.py:213
+#: src/jarabe/frame/activitiestray.py:666
+msgid "Decline"
+msgstr ""
+
+#: src/jarabe/frame/activitiestray.py:605
+#, python-format
+msgid "%d B"
+msgstr ""
+
+#: src/jarabe/frame/activitiestray.py:609
+#, python-format
+msgid "%d MiB"
+msgstr ""
+
+#. TRANS: file transfer, bytes transferred, e.g. 128 of 1024
+#: src/jarabe/frame/activitiestray.py:628
+#, python-format
+msgid "%(transferred)s of %(total)s"
+msgstr ""
+
+#: src/jarabe/frame/activitiestray.py:643
+#, python-format
+msgid "Transfer from %s"
+msgstr ""
+
+#: src/jarabe/frame/activitiestray.py:731
+#: src/jarabe/frame/activitiestray.py:745
+#: src/jarabe/frame/activitiestray.py:887
+msgid "Dismiss"
+msgstr ""
+
+#: src/jarabe/frame/activitiestray.py:759
+msgid "The other participant canceled the file transfer"
+msgstr ""
+
+#: src/jarabe/frame/activitiestray.py:809
+#, python-format
+msgid "Transfer to %s"
+msgstr ""
+
+#: src/jarabe/frame/clipboardmenu.py:59 src/jarabe/frame/clipboardmenu.py:82
+#: src/jarabe/journal/palettes.py:104
+msgid "Open"
+msgstr ""
+
+#: src/jarabe/frame/clipboardmenu.py:87
+msgid "Open with"
+msgstr ""
+
+#: src/jarabe/frame/clipboardobject.py:49
+#, python-format
+msgid "%s clipping"
+msgstr ""
+
+#: src/jarabe/frame/notification.py:62
+msgid "Clear notifications"
+msgstr ""
+
+#: src/jarabe/frame/zoomtoolbar.py:49
+msgid "F1"
+msgstr ""
+
+#: src/jarabe/frame/zoomtoolbar.py:53
+msgid "F2"
+msgstr ""
+
+#: src/jarabe/frame/zoomtoolbar.py:57
+msgid "F3"
+msgstr ""
+
+#: src/jarabe/frame/zoomtoolbar.py:61 src/jarabe/model/screenshot.py:68
+msgid "Activity"
+msgstr ""
+
+#: src/jarabe/frame/zoomtoolbar.py:62
+msgid "F4"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:38
+msgid "Select grade:"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:39
+msgid "Preschool"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:39
+msgid "Kindergarten"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:39
+msgid "1st Grade"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:40
+msgid "2nd Grade"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:40
+msgid "3rd Grade"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:40
+msgid "4th Grade"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:41
+msgid "5th Grade"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:41
+msgid "6th Grade"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:41
+msgid "7th Grade"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:42
+msgid "High School"
+msgstr ""
+
+#: src/jarabe/intro/agepicker.py:42
+msgid "Adult"
+msgstr ""
+
+#: src/jarabe/intro/window.py:125
+msgid "Name:"
+msgstr ""
+
+#: src/jarabe/intro/window.py:165
+msgid "Click to change color:"
+msgstr ""
+
+#: src/jarabe/intro/window.py:337 src/jarabe/journal/detailview.py:95
+#: src/jarabe/view/viewhelp.py:305
+msgid "Back"
+msgstr ""
+
+#: src/jarabe/intro/window.py:352
+msgid "Next"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:156
+#: src/jarabe/journal/journaltoolbox.py:610 src/jarabe/journal/palettes.py:189
+#, python-format
+msgid "Do you want to permanently erase \"%s\"?"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:332 src/jarabe/journal/iconmodel.py:109
+#: src/jarabe/journal/listmodel.py:183 src/jarabe/journal/model.py:797
+#: src/jarabe/journal/palettes.py:76 src/jarabe/journal/palettes.py:644
+#: src/jarabe/journal/volumestoolbar.py:133
+msgid "Untitled"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:388
+msgid "No preview"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:408
+#, python-format
+msgid "Kind: %s"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:409
+#, python-format
+msgid "Date: %s"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:410
+#, python-format
+msgid "Size: %s"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:434 src/jarabe/journal/misc.py:139
+msgid "No date"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:443
+msgid "Participants:"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:481
+#: src/jarabe/journal/projectview.py:110
+msgid "Description:"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:487
+msgid "Tags:"
+msgstr ""
+
+#: src/jarabe/journal/expandedentry.py:492
+msgid "Comments:"
+msgstr ""
+
+#: src/jarabe/journal/iconview.py:211 src/jarabe/journal/listview.py:512
+msgid "Your Journal is empty"
+msgstr ""
+
+#: src/jarabe/journal/iconview.py:214 src/jarabe/journal/listview.py:515
+msgid "Your documents folder is empty"
+msgstr ""
+
+#: src/jarabe/journal/iconview.py:216 src/jarabe/journal/listview.py:517
+msgid "The device is empty"
+msgstr ""
+
+#: src/jarabe/journal/iconview.py:219 src/jarabe/journal/listview.py:519
+msgid "No matching entries"
+msgstr ""
+
+#: src/jarabe/journal/journalactivity.py:197
+#: src/jarabe/journal/journaltoolbox.py:95
+#: src/jarabe/journal/journalwindow.py:32 src/jarabe/journal/palettes.py:289
+#: src/jarabe/journal/volumestoolbar.py:350 src/jarabe/view/viewhelp.py:92
+msgid "Journal"
+msgstr ""
+
+#: src/jarabe/journal/journalactivity.py:285
+msgid "Add new project"
+msgstr ""
+
+#: src/jarabe/journal/journalactivity.py:364
+#, python-format
+msgid "Choose an activity to start '%s' with"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:104
+msgid "Favorite entries"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:111
+msgid "Projects"
+msgstr ""
+
+#. TRANS: Item on a palette that filters by entry type.
+#: src/jarabe/journal/journaltoolbox.py:121
+#: src/jarabe/journal/journaltoolbox.py:415
+#: src/jarabe/journal/journaltoolbox.py:500
+msgid "Anything"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:127
+#: src/jarabe/journal/journaltoolbox.py:174
+#: src/jarabe/journal/journaltoolbox.py:504
+msgid "Anytime"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:181
+msgid "Since yesterday"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:184
+msgid "Past week"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:187
+msgid "Past month"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:190
+msgid "Past year"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:547 src/jarabe/journal/palettes.py:116
+msgid "Copy to"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:555 src/jarabe/journal/palettes.py:133
+#: src/jarabe/view/viewsource.py:382
+msgid "Duplicate"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:561
+msgid "Refresh"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:603 src/jarabe/journal/palettes.py:182
+#: src/jarabe/journal/palettes.py:403 src/jarabe/journal/volumestoolbar.py:311
+#, python-format
+msgid "Error while copying the entry. %s"
+msgstr ""
+
+#. TRANS: Action label for starting an entry.
+#: src/jarabe/journal/journaltoolbox.py:688 src/jarabe/journal/palettes.py:90
+msgid "Start"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:708 src/jarabe/journal/palettes.py:111
+#: src/jarabe/journal/palettes.py:542
+msgid "No activity to start entry"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:726
+msgid "Sort view"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:737
+msgid "Sort by date modified"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:738
+msgid "Sort by date created"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:739
+msgid "Sort by size"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:810
+msgid "Deselect all"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:823
+msgid "Select all"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:849
+#, python-format
+msgid "Do you want to erase %d entry?"
+msgid_plural "Do you want to erase %d entries?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/jarabe/journal/journaltoolbox.py:863 src/jarabe/journal/palettes.py:407
+msgid "Copy"
+msgstr ""
+
+#. TRANS: Do not translate %(selected)d and %(total)d.
+#: src/jarabe/journal/journaltoolbox.py:914
+#, python-format
+msgid "Selected %(selected)d of %(total)d"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:949
+msgid "Select filter"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:1105
+msgid "Add New"
+msgstr ""
+
+#: src/jarabe/journal/journaltoolbox.py:1112
+msgid "Add new entry"
+msgstr ""
+
+#: src/jarabe/journal/listview.py:507
+msgid "Your project is empty"
+msgstr ""
+
+#: src/jarabe/journal/listview.py:521
+msgid "No Projects"
+msgstr ""
+
+#: src/jarabe/journal/misc.py:321
+#, python-format
+msgid "Older Version Of %s Activity"
+msgstr ""
+
+#: src/jarabe/journal/misc.py:322
+#, python-format
+msgid "Do you want to downgrade to version %s?"
+msgstr ""
+
+#: src/jarabe/journal/modalalert.py:62
+msgid "Your Journal is full"
+msgstr ""
+
+#: src/jarabe/journal/modalalert.py:67
+msgid "Please delete some old Journal entries to make space for new ones."
+msgstr ""
+
+#: src/jarabe/journal/modalalert.py:81
+msgid "Show Journal"
+msgstr ""
+
+#: src/jarabe/journal/objectchooser.py:170
+msgid "Choose an object"
+msgstr ""
+
+#: src/jarabe/journal/objectchooser.py:175
+#, python-format
+msgid "Choose an object to open with %s activity"
+msgstr ""
+
+#: src/jarabe/journal/objectchooser.py:183 src/jarabe/view/viewhelp.py:324
+#: src/jarabe/view/viewsource.py:582
+msgid "Close"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:88
+msgid "Resume with"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:91
+msgid "Start with"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:127
+msgid "Send to project..."
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:141
+msgid "Send to"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:150
+msgid "View Details"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:223
+msgid "Entries without a file cannot be sent."
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:301 src/jarabe/journal/volumestoolbar.py:213
+msgid "Documents"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:392 src/jarabe/journal/palettes.py:452
+#: src/jarabe/journal/volumestoolbar.py:302
+msgid "Entries without a file cannot be copied."
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:412
+#, python-format
+msgid "Do you want to copy %d entry?"
+msgid_plural "Do you want to copy %d entries?"
+msgstr[0] ""
+msgstr[1] ""
+
+#: src/jarabe/journal/palettes.py:437
+msgid "Clipboard"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:507
+msgid "No friends present"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:512
+msgid "No valid connection found"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:540
+msgid "No activity to resume entry"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:610 src/jarabe/view/palettes.py:135
+msgid "Stop"
+msgstr ""
+
+#: src/jarabe/journal/palettes.py:645
+#, python-format
+msgid "%(index)d of %(total)d : %(object_title)s"
+msgstr ""
+
+#: src/jarabe/journal/volumestoolbar.py:376 src/jarabe/view/palettes.py:263
+#: src/jarabe/view/palettes.py:330
+#, python-format
+msgid "%(free_space)d MiB Free"
+msgstr ""
+
+#: src/jarabe/model/desktop.py:84
+#, python-format
+msgid "Favorites view %d"
+msgstr ""
+
+#: src/jarabe/model/network.py:216
+msgid "The reason for the device state change is unknown."
+msgstr ""
+
+#: src/jarabe/model/network.py:218
+msgid "The state change is normal."
+msgstr ""
+
+#: src/jarabe/model/network.py:220
+msgid "The device is now managed."
+msgstr ""
+
+#: src/jarabe/model/network.py:222
+msgid "The device is no longer managed."
+msgstr ""
+
+#: src/jarabe/model/network.py:224
+msgid "The device could not be readied for configuration."
+msgstr ""
+
+#: src/jarabe/model/network.py:226
+msgid ""
+"IP configuration could not be reserved (no available address, timeout, etc)."
+msgstr ""
+
+#: src/jarabe/model/network.py:229
+msgid "The IP configuration is no longer valid."
+msgstr ""
+
+#: src/jarabe/model/network.py:231
+msgid "Secrets were required, but not provided."
+msgstr ""
+
+#: src/jarabe/model/network.py:233
+msgid ""
+"The 802.1X supplicant disconnected from the access point or authentication "
+"server."
+msgstr ""
+
+#: src/jarabe/model/network.py:236
+msgid "Configuration of the 802.1X supplicant failed."
+msgstr ""
+
+#: src/jarabe/model/network.py:238
+msgid "The 802.1X supplicant quit or failed unexpectedly."
+msgstr ""
+
+#: src/jarabe/model/network.py:240
+msgid "The 802.1X supplicant took too long to authenticate."
+msgstr ""
+
+#: src/jarabe/model/network.py:242
+msgid "The PPP service failed to start within the allowed time."
+msgstr ""
+
+#: src/jarabe/model/network.py:244
+msgid "The PPP service disconnected unexpectedly."
+msgstr ""
+
+#: src/jarabe/model/network.py:246
+msgid "The PPP service quit or failed unexpectedly."
+msgstr ""
+
+#: src/jarabe/model/network.py:248
+msgid "The DHCP service failed to start within the allowed time."
+msgstr ""
+
+#: src/jarabe/model/network.py:250
+msgid "The DHCP service reported an unexpected error."
+msgstr ""
+
+#: src/jarabe/model/network.py:252
+msgid "The DHCP service quit or failed unexpectedly."
+msgstr ""
+
+#: src/jarabe/model/network.py:254
+msgid "The shared connection service failed to start."
+msgstr ""
+
+#: src/jarabe/model/network.py:256
+msgid "The shared connection service quit or failed unexpectedly."
+msgstr ""
+
+#: src/jarabe/model/network.py:259
+msgid "The AutoIP service failed to start."
+msgstr ""
+
+#: src/jarabe/model/network.py:261
+msgid "The AutoIP service reported an unexpected error."
+msgstr ""
+
+#: src/jarabe/model/network.py:263
+msgid "The AutoIP service quit or failed unexpectedly."
+msgstr ""
+
+#: src/jarabe/model/network.py:265
+msgid "Dialing failed because the line was busy."
+msgstr ""
+
+#: src/jarabe/model/network.py:267
+msgid "Dialing failed because there was no dial tone."
+msgstr ""
+
+#: src/jarabe/model/network.py:269
+msgid "Dialing failed because there was no carrier."
+msgstr ""
+
+#: src/jarabe/model/network.py:271
+msgid "Dialing timed out."
+msgstr ""
+
+#: src/jarabe/model/network.py:273
+msgid "Dialing failed."
+msgstr ""
+
+#: src/jarabe/model/network.py:275
+msgid "Modem initialization failed."
+msgstr ""
+
+#: src/jarabe/model/network.py:277
+msgid "Failed to select the specified GSM APN"
+msgstr ""
+
+#: src/jarabe/model/network.py:279
+msgid "Not searching for networks."
+msgstr ""
+
+#: src/jarabe/model/network.py:281
+msgid "Network registration was denied."
+msgstr ""
+
+#: src/jarabe/model/network.py:283
+msgid "Network registration timed out."
+msgstr ""
+
+#: src/jarabe/model/network.py:285
+msgid "Failed to register with the requested GSM network."
+msgstr ""
+
+#: src/jarabe/model/network.py:287
+msgid "PIN check failed."
+msgstr ""
+
+#: src/jarabe/model/network.py:289
+msgid "Necessary firmware for the device may be missing."
+msgstr ""
+
+#: src/jarabe/model/network.py:291
+msgid "The device was removed."
+msgstr ""
+
+#: src/jarabe/model/network.py:293
+msgid "NetworkManager went to sleep."
+msgstr ""
+
+#: src/jarabe/model/network.py:295
+msgid "The device's active connection was removed or disappeared."
+msgstr ""
+
+#: src/jarabe/model/network.py:298
+msgid "A user or client requested the disconnection."
+msgstr ""
+
+#: src/jarabe/model/network.py:300
+msgid "The device's carrier/link changed."
+msgstr ""
+
+#: src/jarabe/model/network.py:302
+msgid "The device's existing connection was assumed."
+msgstr ""
+
+#: src/jarabe/model/network.py:304
+msgid "The supplicant is now available."
+msgstr ""
+
+#: src/jarabe/model/network.py:306
+msgid "The modem could not be found."
+msgstr ""
+
+#: src/jarabe/model/network.py:308
+msgid "The Bluetooth connection failed or timed out."
+msgstr ""
+
+#: src/jarabe/model/network.py:310
+msgid "Unused."
+msgstr ""
+
+#: src/jarabe/model/screenshot.py:58 src/jarabe/view/viewhelp.py:83
+msgid "Mesh"
+msgstr ""
+
+#: src/jarabe/model/screenshot.py:71
+msgid "Screenshot"
+msgstr ""
+
+#: src/jarabe/model/screenshot.py:73
+#, python-format
+msgid "Screenshot of \"%s\""
+msgstr ""
+
+#: src/jarabe/view/alerts.py:37 src/jarabe/view/alerts.py:47
+msgid "Activity launcher"
+msgstr ""
+
+#: src/jarabe/view/alerts.py:38
+#, python-format
+msgid ""
+"%(activity)s is already running. Please stop %(activity)s before launching "
+"it again."
+msgstr ""
+
+#: src/jarabe/view/alerts.py:48
+msgid ""
+"The maximum number of open activities has been reached. Please close an "
+"activity before launching a new one."
+msgstr ""
+
+#: src/jarabe/view/buddymenu.py:74
+msgid "Remove friend"
+msgstr ""
+
+#: src/jarabe/view/buddymenu.py:77
+msgid "Make friend"
+msgstr ""
+
+#: src/jarabe/view/buddymenu.py:109
+msgid "Shutdown"
+msgstr ""
+
+#: src/jarabe/view/buddymenu.py:114
+msgid "Restart"
+msgstr ""
+
+#: src/jarabe/view/buddymenu.py:120
+msgid "Logout"
+msgstr ""
+
+#: src/jarabe/view/buddymenu.py:125
+msgid "My Settings"
+msgstr ""
+
+#: src/jarabe/view/buddymenu.py:188
+#, python-format
+msgid "Invite to %s"
+msgstr ""
+
+#: src/jarabe/view/launcher.py:158
+#, python-format
+msgid "<b>%s</b> failed to start."
+msgstr ""
+
+#: src/jarabe/view/palettes.py:55
+msgid "Starting..."
+msgstr ""
+
+#: src/jarabe/view/palettes.py:65
+msgid "Activity failed to start"
+msgstr ""
+
+#: src/jarabe/view/palettes.py:107
+msgid "View Source"
+msgstr ""
+
+#: src/jarabe/view/palettes.py:114
+msgid "View Help"
+msgstr ""
+
+#: src/jarabe/view/palettes.py:190
+msgid "Start new"
+msgstr ""
+
+#: src/jarabe/view/viewhelp.py:282
+msgid "Help Manual"
+msgstr ""
+
+#: src/jarabe/view/viewhelp.py:296
+msgid "Social Help"
+msgstr ""
+
+#: src/jarabe/view/viewhelp.py:310
+msgid "Forward"
+msgstr ""
+
+#: src/jarabe/view/viewhelp.py:315
+#, python-format
+msgid "Help: %s"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:367
+msgid "Instance Source"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:395
+#, python-format
+msgid "Do you want to duplicate %s Activity?"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:397
+msgid "This may take a few minutes"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:411
+msgid "Duplicating activity..."
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:450
+msgid "Duplicated"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:451
+msgid "The activity has been duplicated"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:465
+msgid "Duplicated activity already exists"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:466
+msgid "Delete your copy before trying to duplicate the activity again"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:481
+msgid "Source"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:545
+msgid "Activity Bundle Source"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:564
+msgid "Sugar Toolkit Source"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:571
+#, python-format
+msgid "View source: %s"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:572
+#, python-format
+msgid "View source: %r"
+msgstr ""
+
+#: src/jarabe/view/viewsource.py:813
+msgid "Please select a file in the left panel."
+msgstr ""
diff --git b/src/jarabe/.gitignore a/src/jarabe/.gitignore
new file mode 100644
index 0000000..4acd06b
--- /dev/null
+++ a/src/jarabe/.gitignore
@@ -0,0 +1 @@
+config.py
diff --git b/src/jarabe/desktop/favoriteslayout.py a/src/jarabe/desktop/favoriteslayout.py
index 2d3e998..aaaf513 100644
--- b/src/jarabe/desktop/favoriteslayout.py
+++ a/src/jarabe/desktop/favoriteslayout.py
@@ -247,7 +247,7 @@ class RandomLayout(SpreadLayout):
x = min(x, allocation.width - child_requisition.width)
y = min(y, allocation.height - child_requisition.height)
elif hasattr(child, 'get_bundle_id'):
- name_hash = hashlib.md5(child.get_bundle_id().decode())
+ name_hash = hashlib.md5(child.get_bundle_id().encode('utf-8'))
x = int(name_hash.hexdigest()[:5], 16) % \
(allocation.width - child_requisition.width)
y = int(name_hash.hexdigest()[-5:], 16) % \
diff --git b/src/jarabe/desktop/meshbox.py a/src/jarabe/desktop/meshbox.py
index da0a775..0127492 100644
--- b/src/jarabe/desktop/meshbox.py
+++ a/src/jarabe/desktop/meshbox.py
@@ -486,7 +486,7 @@ class MeshBox(ViewContainer):
# if we have mesh hardware, ignore OLPC mesh networks that appear as
# normal wifi networks
if len(self._mesh) > 0 and ap.mode == network.NM_802_11_MODE_ADHOC \
- and ap.ssid == 'olpc-mesh':
+ and ap.ssid == b'olpc-mesh':
logging.debug('ignoring OLPC mesh IBSS')
ap.disconnect()
return
diff --git b/src/jarabe/desktop/networkviews.py a/src/jarabe/desktop/networkviews.py
index d63cf01..1bf6cc3 100644
--- b/src/jarabe/desktop/networkviews.py
+++ a/src/jarabe/desktop/networkviews.py
@@ -454,7 +454,7 @@ class WirelessNetworkView(EventPulsingIcon):
def is_olpc_mesh(self):
return self._mode == network.NM_802_11_MODE_ADHOC \
- and self._ssid == 'olpc-mesh'
+ and self._ssid == b'olpc-mesh'
def remove_all_aps(self):
for ap in list(self._access_points.values()):
diff --git b/src/jarabe/journal/journalentrybundle.py a/src/jarabe/journal/journalentrybundle.py
index 0656b6a..233c899 100644
--- b/src/jarabe/journal/journalentrybundle.py
+++ a/src/jarabe/journal/journalentrybundle.py
@@ -87,7 +87,7 @@ class JournalEntryBundle(Bundle):
preview_path = os.path.join(bundle_dir, 'preview', uid)
if not os.path.exists(preview_path):
return ''
- f = open(preview_path, 'r')
+ f = open(preview_path, 'rb')
try:
preview_data = f.read()
finally:
diff --git b/src/jarabe/model/buddy.py a/src/jarabe/model/buddy.py
index 6683a52..179d67e 100644
--- b/src/jarabe/model/buddy.py
+++ a/src/jarabe/model/buddy.py
@@ -57,6 +57,9 @@ class BaseBuddyModel(GObject.GObject):
return self._key
def set_key(self, key):
+ if isinstance(key, bytes):
+ key = key.decode('utf-8')
+
self._key = key
key = GObject.Property(type=object, getter=get_key, setter=set_key)
@@ -160,9 +163,8 @@ class OwnerBuddyModel(BaseBuddyModel):
if CONNECTION_INTERFACE_BUDDY_INFO in connection:
properties = {}
if self.props.key is not None:
- if isinstance(self.props.key, str):
- self.props.key = self.props.key.encode()
- properties['key'] = dbus.ByteArray(self.props.key)
+ properties['key'] = dbus.ByteArray(
+ self.props.key.encode('utf-8'))
if self.props.color is not None:
properties['color'] = self.props.color.to_string()
diff --git b/src/jarabe/model/network.py a/src/jarabe/model/network.py
index a26b62d..edb6758 100644
--- b/src/jarabe/model/network.py
+++ a/src/jarabe/model/network.py
@@ -429,7 +429,7 @@ class OlpcMesh(object):
def get_dict(self):
ret = {
- 'ssid': dbus.ByteArray('olpc-mesh'),
+ 'ssid': dbus.ByteArray(b'olpc-mesh'),
'channel': self.channel,
}
@@ -647,7 +647,7 @@ class AccessPoint(GObject.GObject):
self._initialized = False
self._bus = dbus.SystemBus()
- self.ssid = ''
+ self.ssid = b''
self.strength = 0
self.flags = 0
self.wpa_flags = 0
@@ -970,7 +970,7 @@ def _migrate_old_wifi_connections():
try:
settings = Settings()
settings.connection.id = section
- ssid = config.get(section, 'ssid')
+ ssid = config.get(section, 'ssid').encode()
settings.wireless.ssid = dbus.ByteArray(ssid)
config_uuid = config.get(section, 'uuid')
settings.connection.uuid = config_uuid
diff --git b/src/jarabe/view/Makefile.am a/src/jarabe/view/Makefile.am
index da7fe1d..3aea66f 100644
--- b/src/jarabe/view/Makefile.am
+++ a/src/jarabe/view/Makefile.am
@@ -15,5 +15,4 @@ sugar_PYTHON = \
tabbinghandler.py \
viewsource.py \
viewhelp.py \
- viewhelp_webkit1.py \
viewhelp_webkit2.py
diff --git b/src/jarabe/view/viewhelp.py a/src/jarabe/view/viewhelp.py
index baf8af0..0cd9498 100644
--- b/src/jarabe/view/viewhelp.py
+++ a/src/jarabe/view/viewhelp.py
@@ -33,17 +33,7 @@ from sugar3.graphics.toolbutton import ToolButton
from sugar3.graphics.radiotoolbutton import RadioToolButton
from sugar3.bundle.activitybundle import get_bundle_instance
from jarabe.model import shell
-
-
-try:
- olpc_build = open('/boot/olpc_build', 'r').readline()
-except:
- olpc_build = ''
-
-if olpc_build.startswith('13'):
- from jarabe.view.viewhelp_webkit1 import Browser
-else:
- from jarabe.view.viewhelp_webkit2 import Browser
+from jarabe.view.viewhelp_webkit2 import Browser
_logger = logging.getLogger('ViewHelp')
diff --git b/tests/data/activity-1.xo a/tests/data/activity-1.xo
new file mode 100644
index 0000000..f7ae005
Binary files /dev/null and a/tests/data/activity-1.xo differ
diff --git b/tests/data/activity.svg a/tests/data/activity.svg
new file mode 100644
index 0000000..8da7c63
--- /dev/null
+++ a/tests/data/activity.svg
@@ -0,0 +1,26 @@
+<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#010101">
+ <!ENTITY fill_color "#FFFFFF">
+]>
+<svg enable-background="new 0 0 55 55" height="55px" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+ <g display="block" id="activity-helloworld">
+ <path d="M9.263,48.396c0.682,1.152,6.027,0.059,8.246-1.463 c2.102-1.432,3.207-2.596,4.336-2.596c1.133,0,12.54,0.92,20.935-5.715c7.225-5.707,9.773-13.788,4.52-21.437 c-5.252-7.644-13.832-9.08-20.878-8.56C16.806,9.342,4.224,16.91,4.677,28.313c0.264,6.711,3.357,9.143,4.922,10.703 c1.562,1.566,4.545,1.566,2.992,5.588C11.981,46.183,8.753,47.522,9.263,48.396z" display="inline" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5"/>
+ </g>
+ <circle cx="27.375" cy="27.5" r="19.903"
+ transform="matrix(0.6,0,0,0.6,10.95,11)"
+ id="circle4" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" display="inline" />
+ <g transform="matrix(0.6,0,0,0.6,10.95,11)" id="g6" style="display:inline">
+ <path d="m 27.376,7.598 c 0,0 -11.205,8.394 -11.205,19.976 0,11.583 11.205,19.829 11.205,19.829"
+ id="path8" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+ <path d="m 27.376,7.598 c 0,0 11.066,9.141 11.066,19.976 0,10.839 -11.066,19.829 -11.066,19.829"
+ id="path10" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+ <line x1="27.375999" x2="27.375999" y1="7.598" y2="47.402"
+ id="line12" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+ <line x1="27.375999" x2="27.375999" y1="7.598" y2="47.402"
+ id="line14" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+ <line x1="27.375999" x2="27.375999" y1="7.598" y2="47.402"
+ id="line16" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+ <line x1="7.4720001" x2="47.278" y1="27.5" y2="27.5"
+ id="line18" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" />
+ </g>
+</svg>
diff --git b/tests/data/microformat.html a/tests/data/microformat.html
new file mode 100644
index 0000000..6fea175
--- /dev/null
+++ a/tests/data/microformat.html
@@ -0,0 +1,19 @@
+<span id="olpc-activity-group-name">activities</span>
+
+<div class="olpc-activity-info">
+<span class="olpc-activity-id" style="display:none;">org.sugarlabs.AbacusActivity</span>
+<span class="olpc-activity-url"><a href="http://download.sugarlabs.org/abacus-43.xo">Abacus</a></span>
+<span class="olpc-activity-version">43</span>
+</div>
+
+<div class="olpc-activity-info">
+<span class="olpc-activity-id" style="display:none;">org.sugarlabs.AbacusActivity</span>
+<span class="olpc-activity-url"><a href="http://download.sugarlabs.org/activities/4293/abacus-41.1.xo">Abacus</a></span>
+<span class="olpc-activity-version">41.1</span>
+</div>
+
+<div class="olpc-activity-info">
+<span class="olpc-activity-id" style="display:none;">org.laptop.WebActivity</span>
+<span class="olpc-activity-url"><a href="browse-149.xo">Browse</a></span>
+<span class="olpc-activity-version">149</span>
+</div>
diff --git b/tests/data/sample-1.xol a/tests/data/sample-1.xol
new file mode 100644
index 0000000..52f384d
Binary files /dev/null and a/tests/data/sample-1.xol differ
diff --git b/tests/data/test.txt a/tests/data/test.txt
new file mode 100644
index 0000000..ce01362
--- /dev/null
+++ a/tests/data/test.txt
@@ -0,0 +1 @@
+hello
diff --git b/tests/extensions/cpsection/__init__.py a/tests/extensions/cpsection/__init__.py
new file mode 100644
index 0000000..3ad9513
--- /dev/null
+++ a/tests/extensions/cpsection/__init__.py
@@ -0,0 +1,2 @@
+from pkgutil import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git b/tests/extensions/cpsection/webaccount/__init__.py a/tests/extensions/cpsection/webaccount/__init__.py
new file mode 100644
index 0000000..3ad9513
--- /dev/null
+++ a/tests/extensions/cpsection/webaccount/__init__.py
@@ -0,0 +1,2 @@
+from pkgutil import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git b/tests/extensions/cpsection/webaccount/services/__init__.py a/tests/extensions/cpsection/webaccount/services/__init__.py
new file mode 100644
index 0000000..3ad9513
--- /dev/null
+++ a/tests/extensions/cpsection/webaccount/services/__init__.py
@@ -0,0 +1,2 @@
+from pkgutil import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git b/tests/extensions/cpsection/webaccount/services/mock/__init__.py a/tests/extensions/cpsection/webaccount/services/mock/__init__.py
new file mode 100644
index 0000000..3ad9513
--- /dev/null
+++ a/tests/extensions/cpsection/webaccount/services/mock/__init__.py
@@ -0,0 +1,2 @@
+from pkgutil import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git b/tests/extensions/cpsection/webaccount/services/mock/service.py a/tests/extensions/cpsection/webaccount/services/mock/service.py
new file mode 100644
index 0000000..bd29dab
--- /dev/null
+++ a/tests/extensions/cpsection/webaccount/services/mock/service.py
@@ -0,0 +1,45 @@
+# Copyright (C) 2013, Walter Bender - Raul Gutierrez Segales
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+from gi.repository import Gtk
+
+from jarabe.webservice import accountsmanager
+
+from cpsection.webaccount.web_service import WebService
+
+_SERVICE_NAME = 'mock'
+
+
+class WebService(WebService):
+
+ def __init__(self):
+ self._account = accountsmanager.get_account(_SERVICE_NAME)
+
+ def get_icon_name(self):
+ return _SERVICE_NAME
+
+ def config_service_cb(self, widget, event, container):
+ label = Gtk.Label(_SERVICE_NAME)
+
+ for c in container.get_children():
+ container.remove(c)
+
+ container.add(label)
+ container.show_all()
+
+
+def get_service():
+ return WebService()
diff --git b/tests/extensions/cpsection/webaccount/web_service.py a/tests/extensions/cpsection/webaccount/web_service.py
new file mode 100644
index 0000000..998acb1
--- /dev/null
+++ a/tests/extensions/cpsection/webaccount/web_service.py
@@ -0,0 +1,22 @@
+# Copyright (C) 2013, Walter Bender - Raul Gutierrez Segales
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+class WebService():
+ def get_icon_name(self):
+ raise "Not implemented"
+
+ def config_service_cb(self, widget, event, container):
+ raise "Not implemented"
diff --git b/tests/extensions/webservice/__init__.py a/tests/extensions/webservice/__init__.py
new file mode 100644
index 0000000..3ad9513
--- /dev/null
+++ a/tests/extensions/webservice/__init__.py
@@ -0,0 +1,2 @@
+from pkgutil import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git b/tests/extensions/webservice/mock/__init__.py a/tests/extensions/webservice/mock/__init__.py
new file mode 100644
index 0000000..3ad9513
--- /dev/null
+++ a/tests/extensions/webservice/mock/__init__.py
@@ -0,0 +1,2 @@
+from pkgutil import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git b/tests/extensions/webservice/mock/account.py a/tests/extensions/webservice/mock/account.py
new file mode 100644
index 0000000..3f4520d
--- /dev/null
+++ a/tests/extensions/webservice/mock/account.py
@@ -0,0 +1,72 @@
+# Copyright (c) 2013 Walter Bender
+
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+import os
+
+from sugar3.graphics.menuitem import MenuItem
+from jarabe.webservice import account
+
+ACCOUNT_NAME = 'mock'
+
+
+class MockAccount(account.Account):
+ def __init__(self):
+ return
+
+ def get_description(self):
+ return ACCOUNT_NAME
+
+ def get_shared_journal_entry(self):
+ return MockSharedJournalEntry()
+
+ def get_token_state(self):
+ return int(os.environ["MOCK_ACCOUNT_STATE"])
+
+
+class MockSharedJournalEntry(account.SharedJournalEntry):
+ def __init__(self):
+ return
+
+ def get_share_menu(self, metadata):
+ share_menu = ShareMenu(metadata)
+ return share_menu
+
+ def get_refresh_menu(self):
+ refresh_menu = RefreshMenu()
+ return refresh_menu
+
+
+class ShareMenu(MenuItem):
+ def __init__(self, metadata):
+ MenuItem.__init__(self, text_label=ACCOUNT_NAME)
+ self.show()
+
+
+class RefreshMenu(MenuItem):
+ def __init__(self):
+ MenuItem.__init__(self, text_label=ACCOUNT_NAME)
+ self.show()
+
+ def set_metadata(self, metadata):
+ return
+
+
+def get_account():
+ return MockAccount()
diff --git b/tests/extensions/webservice/mock/icons/mock.svg a/tests/extensions/webservice/mock/icons/mock.svg
new file mode 100644
index 0000000..7a9434c
--- /dev/null
+++ a/tests/extensions/webservice/mock/icons/mock.svg
@@ -0,0 +1,25 @@
+<?xml version="1.0" ?><!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) --><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [
+ <!ENTITY stroke_color "#A0A0A0">
+ <!ENTITY fill_color "#282828">
+]><svg enable-background="new 0 0 55.125 55" height="55px" id="Layer_1" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
+ <rect
+ width="54"
+ height="54"
+ ry="3.5"
+ x="0.5"
+ y="0.5"
+ style="fill:&fill_color;;fill-opacity:1;fill-rule:nonzero;stroke:#FFFFFF;stroke-width:1.0;stroke-opacity:1" />
+ <rect
+ width="46.25"
+ height="7.75"
+ ry="0"
+ x="4.5"
+ y="42"
+ style="fill:&stroke_color;;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+<text>
+ <tspan
+ x="6"
+ y="45"
+ id="tspan2839"
+ style="font-size:44px;font-style:normal;font-variant:normal;font-weight:bold;fill:#ffffff;font-family:DejaVu Sans;">M</tspan></text>
+</svg>
diff --git b/tests/extensions/webservice/mock/mock/__init__.py a/tests/extensions/webservice/mock/mock/__init__.py
new file mode 100644
index 0000000..3ad9513
--- /dev/null
+++ a/tests/extensions/webservice/mock/mock/__init__.py
@@ -0,0 +1,2 @@
+from pkgutil import extend_path
+__path__ = extend_path(__path__, __name__)
diff --git b/tests/extensions/webservice/mock/mock/mock.py a/tests/extensions/webservice/mock/mock/mock.py
new file mode 100644
index 0000000..e69de29
diff --git b/tests/test_activitieslist.py a/tests/test_activitieslist.py
new file mode 100644
index 0000000..722424f
--- /dev/null
+++ a/tests/test_activitieslist.py
@@ -0,0 +1,27 @@
+# Copyright (C) 2013, Daniel Narvaez
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from sugar3.test import unittest
+from sugar3.test import uitree
+
+
+class TestActivitiesList(unittest.UITestCase):
+ def test_activity_list_palette(self):
+ with self.run_view("activitieslist"):
+ root = uitree.get_root()
+
+ for name in ["Make favorite", "Erase", "Start new"]:
+ node = root.find_child(name=name, role_name="label")
+ self.assertIsNotNone(node)
diff --git b/tests/test_backup.py a/tests/test_backup.py
new file mode 100644
index 0000000..0fe832c
--- /dev/null
+++ a/tests/test_backup.py
@@ -0,0 +1,47 @@
+# Copyright (C) 2014, Gonzalo Odiard
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import unittest
+import sys
+
+from jarabe import config
+
+# we need import from the extensions path
+sys.path.append(config.ext_path)
+
+from cpsection.backup.backupmanager import BackupManager
+from cpsection.backup.backends.backend_tools import Backend
+
+
+class TestBackup(unittest.TestCase):
+
+ def setUp(self):
+ self.manager = BackupManager()
+ self._backends = self.manager.get_backends()
+
+ def test_get_backend(self):
+ self.assertTrue(len(self._backends) > 0)
+
+ def test_backend_backup_restore(self):
+ for backend in self._backends:
+ # verify the backend have the methods needed
+ self.assertIsInstance(backend.get_name(), str)
+
+ self.assertIsInstance(backend.get_backup(), Backend)
+
+ self.assertIsInstance(backend.get_restore(), Backend)
+
+ def test_need_stop_activities(self):
+ self.assertFalse(self.manager.need_stop_activities())
diff --git b/tests/test_bundleregistry.py a/tests/test_bundleregistry.py
new file mode 100644
index 0000000..743d40c
--- /dev/null
+++ a/tests/test_bundleregistry.py
@@ -0,0 +1,60 @@
+# Copyright (C) 2013, One Laptop per Child
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import shutil
+import tempfile
+import unittest
+import os
+
+from jarabe.model import bundleregistry
+from sugar3.bundle.helpers import bundle_from_archive
+
+tests_dir = os.getcwd()
+data_dir = os.path.join(tests_dir, "data")
+base_dir = os.path.dirname(tests_dir)
+
+os.environ["SUGAR_MIME_DEFAULTS"] = \
+ os.path.join(base_dir, "data", "mime.defaults")
+
+
+class TestBundleRegistry(unittest.TestCase):
+ def setUp(self):
+ activities_path = tempfile.mkdtemp()
+ library_path = tempfile.mkdtemp()
+ os.environ['SUGAR_ACTIVITIES_PATH'] = activities_path
+ os.environ['SUGAR_LIBRARY_PATH'] = library_path
+
+ def tearDown(self):
+ activities_path = os.environ.pop('SUGAR_ACTIVITIES_PATH', None)
+ if activities_path:
+ shutil.rmtree(activities_path)
+
+ library_path = os.environ.pop('SUGAR_LIBRARY_PATH', None)
+ if library_path:
+ shutil.rmtree(library_path)
+
+ def test_install_content(self):
+ registry = bundleregistry.get_registry()
+ bundle = bundle_from_archive(os.path.join(data_dir, 'sample-1.xol'))
+ registry.install(bundle)
+ installed_bundle = registry.get_bundle("org.sugarlabs.samplecontent")
+ self.assertIsNotNone(installed_bundle)
+
+ def test_install_activity(self):
+ registry = bundleregistry.get_registry()
+ bundle = bundle_from_archive(os.path.join(data_dir, 'activity-1.xo'))
+ registry.install(bundle)
+ installed_bundle = registry.get_bundle("org.sugarlabs.MyActivity")
+ self.assertIsNotNone(installed_bundle)
diff --git b/tests/test_desktop_config.py a/tests/test_desktop_config.py
new file mode 100644
index 0000000..d561262
--- /dev/null
+++ a/tests/test_desktop_config.py
@@ -0,0 +1,77 @@
+# Copyright (C) 2013, Walter Bender
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from sugar3.test import unittest
+
+from gi.repository import Gio
+from gi.repository import GLib
+
+from jarabe.model import desktop
+
+_DESKTOP_CONF_DIR = 'org.sugarlabs.desktop'
+_HOMEVIEWS_KEY = 'homeviews'
+
+_VIEW_ICONS = [{'layout': 'box-layout', 'view-icon': 'view-radial',
+ 'favorite-icon': 'emblem-locked'}]
+_MOCK_LIST = [{'layout': 'box-layout', 'view-icon': 'view-radial',
+ 'favorite-icon': 'emblem-locked'},
+ {'layout': 'ring-layout', 'view-icon': 'view-box',
+ 'favorite-icon': 'emblem-favorite'}]
+
+
+class TestDesktopConfig(unittest.UITestCase):
+
+ def setUp(self):
+ self.target = []
+
+ settings = Gio.Settings.new(_DESKTOP_CONF_DIR)
+ self._save_homeviews = settings.get_value(_HOMEVIEWS_KEY)
+
+ self.model = desktop.get_model()
+ self.model.connect('desktop-view-icons-changed',
+ self.__desktop_view_icons_changed_cb)
+
+ def __desktop_view_icons_changed_cb(self, model):
+ number_of_views = desktop.get_number_of_views()
+ self.assertTrue(number_of_views == len(self.target))
+
+ view_icons = desktop.get_view_icons()
+ self.assertTrue(len(view_icons) == len(self.target))
+
+ right_view_icons = [view['view-icon'] for view in self.target]
+ for i in range(len(view_icons)):
+ self.assertTrue(view_icons[i] in right_view_icons)
+
+ favorite_icons = desktop.get_favorite_icons()
+ self.assertTrue(len(favorite_icons) >= len(self.target))
+
+ def test_unset_views(self):
+ self.target = _VIEW_ICONS
+ with self.run_view("gtk_main"):
+ settings = Gio.Settings.new(_DESKTOP_CONF_DIR)
+ variant = GLib.Variant('aa{ss}', self.target)
+ settings.set_value(_HOMEVIEWS_KEY, variant)
+
+ def test_set_views(self):
+ self.target = _MOCK_LIST
+ with self.run_view("gtk_main"):
+ settings = Gio.Settings.new(_DESKTOP_CONF_DIR)
+ variant = GLib.Variant('aa{ss}', self.target)
+ settings.set_value(_HOMEVIEWS_KEY, variant)
+
+ def tearDown(self):
+ self.target = self._save_homeviews.unpack()
+ settings = Gio.Settings.new(_DESKTOP_CONF_DIR)
+ settings.set_value(_HOMEVIEWS_KEY, self._save_homeviews)
diff --git b/tests/test_downloader.py a/tests/test_downloader.py
new file mode 100644
index 0000000..7e661ce
--- /dev/null
+++ a/tests/test_downloader.py
@@ -0,0 +1,89 @@
+# Copyright (C) 2013, One Laptop per Child
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import unittest
+import threading
+import http.server
+import socketserver
+
+from gi.repository import Gtk
+
+from sugar3 import env
+from jarabe.util.downloader import Downloader
+
+profile_data_dir = os.path.join(env.get_profile_path(), 'data')
+if not os.path.isdir(profile_data_dir):
+ os.makedirs(profile_data_dir)
+
+tests_dir = os.getcwd()
+data_dir = os.path.join(tests_dir, "data")
+
+
+class TestDownloader(unittest.TestCase):
+ def setUp(self):
+ handler = http.server.SimpleHTTPRequestHandler
+ self._server = socketserver.TCPServer(("", 0), handler)
+ self._port = self._server.server_address[1]
+ self._server_thread = threading.Thread(target=self._run_http_server)
+ self._server_thread.daemon = True
+ self._server_thread.start()
+
+ def tearDown(self):
+ self._server.shutdown()
+ self._server_thread.join()
+
+ def _run_http_server(self):
+ self._server.serve_forever()
+
+ def download_complete_cb(self, downloader, result):
+ self._complete = True
+ self._result = result
+
+ def test_download_to_temp(self):
+ downloader = Downloader("http://0.0.0.0:%d/data/test.txt" % self._port)
+ self._complete = False
+ downloader.connect('complete', self.download_complete_cb)
+ downloader.download_to_temp()
+
+ while not self._complete:
+ Gtk.main_iteration()
+
+ self.assertIsNone(self._result)
+ path = downloader.get_local_file_path()
+ text = open(path, "r").read()
+ self.assertEqual("hello\n", text)
+
+ def test_download(self):
+ downloader = Downloader("http://0.0.0.0:%d/data/test.txt" % self._port)
+ self._complete = False
+ downloader.connect('complete', self.download_complete_cb)
+ downloader.download()
+
+ while not self._complete:
+ Gtk.main_iteration()
+
+ self.assertEqual("hello\n", self._result.get_data())
+
+ def test_get_size(self):
+ downloader = Downloader("http://0.0.0.0:%d/data/test.txt" % self._port)
+ self._complete = False
+ downloader.connect('complete', self.download_complete_cb)
+ downloader.get_size()
+
+ while not self._complete:
+ Gtk.main_iteration()
+
+ self.assertEqual(6, self._result)
diff --git b/tests/test_journaltoolbox.py a/tests/test_journaltoolbox.py
new file mode 100644
index 0000000..3631638
--- /dev/null
+++ a/tests/test_journaltoolbox.py
@@ -0,0 +1,31 @@
+# Copyright (C) 2012, Daniel Narvaez
+# Copyright (C) 2013, Walter Bender
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from sugar3.test import unittest
+from sugar3.test import uitree
+
+ACCOUNT_NAME = 'mock'
+
+
+class TestDetailToolBox(unittest.UITestCase):
+
+ def test_detail_toolbox(self):
+ with self.run_view("journal_detailstoolbox"):
+ root = uitree.get_root()
+
+ for name in ['Clipboard', ACCOUNT_NAME]:
+ node = root.find_child(name=name, role_name='menu item')
+ self.assertIsNotNone(node)
diff --git b/tests/test_microformat.py a/tests/test_microformat.py
new file mode 100644
index 0000000..4ce3ebe
--- /dev/null
+++ a/tests/test_microformat.py
@@ -0,0 +1,52 @@
+# Copyright (C) 2013, One Laptop per Child
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import unittest
+import os
+
+from sugar3.bundle.bundleversion import NormalizedVersion
+
+from jarabe.model.update.microformat import _UpdateHTMLParser
+from jarabe.model.update.microformat import MetadataLookup
+
+tests_dir = os.getcwd()
+data_dir = os.path.join(tests_dir, "data")
+
+
+class TestMicroformat(unittest.TestCase):
+ def test_html_parser(self):
+ parser = _UpdateHTMLParser("http://www.sugarlabs.org")
+ fd = open(os.path.join(data_dir, "microformat.html"), "r")
+ parser.feed(fd.read())
+ parser.close()
+
+ results = parser.results
+ self.assertIn('org.sugarlabs.AbacusActivity', list(results.keys()))
+ self.assertIn('org.laptop.WebActivity', list(results.keys()))
+
+ # test that we picked the newest version
+ version, url = results['org.sugarlabs.AbacusActivity']
+ self.assertEqual(NormalizedVersion("43"), version)
+ self.assertEqual("http://download.sugarlabs.org/abacus-43.xo", url)
+
+ # test resolve relative url
+ version, url = results['org.laptop.WebActivity']
+ self.assertEqual("http://www.sugarlabs.org/browse-149.xo", url)
+
+ def test_zip_name_lookup(self):
+ fd = open(os.path.join(data_dir, "activity-1.xo"))
+ lookup = MetadataLookup(None)
+ name = lookup._name_from_fd(fd)
+ self.assertEqual("My Activity", name)
diff --git b/tests/test_modemconfiguration.py a/tests/test_modemconfiguration.py
new file mode 100644
index 0000000..b8b61e5
--- /dev/null
+++ a/tests/test_modemconfiguration.py
@@ -0,0 +1,188 @@
+# -*- encoding: utf-8 -*-
+# Copyright (C) 2013, Miguel González
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import unittest
+from xml.etree.cElementTree import ElementTree
+
+from mock import patch
+
+from cpsection.modemconfiguration.model import CountryCodeParser, \
+ ServiceProvidersParser, ServiceProviders, PROVIDERS_PATH
+from cpsection.modemconfiguration.model import CONF_SP_COUNTRY, \
+ CONF_SP_PROVIDER, CONF_SP_PLAN
+
+
+class CountryCodeParserTest(unittest.TestCase):
+ def test_get_country(self):
+ self.assertEqual(CountryCodeParser().get('ad'), 'Andorra')
+ self.assertEqual(CountryCodeParser().get('es'), 'Spain')
+ self.assertEqual(CountryCodeParser().get('zw'), 'Zimbabwe')
+
+ def test_raise_if_not_found(self):
+ with self.assertRaises(KeyError):
+ CountryCodeParser().get('xx')
+
+
+class ServiceProvidersParserTest(unittest.TestCase):
+ def setUp(self):
+ self.tree = ElementTree(file=PROVIDERS_PATH)
+ self.countries_from_xml = self.tree.findall('country')
+ self.db = ServiceProvidersParser()
+ self.countries_from_class = self.db.get_countries()
+
+ def test_get_countries(self):
+ for country in self.countries_from_class:
+ self.assertEqual(country.tag, 'country')
+
+ def test_get_country_idx_by_code(self):
+ for idx, country in enumerate(self.countries_from_class):
+ country_code = country.attrib['code']
+ country_idx = self.db.get_country_idx_by_code(country_code)
+ self.assertEqual(idx, country_idx)
+
+ def test_get_country_name_by_idx(self):
+ for idx, country in enumerate(self.countries_from_class):
+ country_code = country.attrib['code']
+ self.assertEqual(
+ CountryCodeParser().get(country_code),
+ self.db.get_country_name_by_idx(idx)
+ )
+
+ def test_get_providers(self):
+ for country_idx, country in enumerate(self.countries_from_class):
+ providers = self.db.get_providers(country_idx)
+ for provider in providers:
+ self.assertEqual(provider.tag, 'provider')
+ self.assertIsNotNone(provider.find('.//gsm'))
+
+ def test_get_plans(self):
+ for country_idx, country in enumerate(self.countries_from_class):
+ providers = self.db.get_providers(country_idx)
+ for provider_idx, provider in enumerate(providers):
+ plans = self.db.get_plans(country_idx, provider_idx)
+ for plan in plans:
+ self.assertEqual(plan.tag, 'apn')
+
+ def get_providers(self, country_xml):
+ """Given a country element find all provider with a gsm tag."""
+ idx = 0
+ for provider in country_xml.findall('provider'):
+ if provider.find('.//gsm'):
+ yield idx, provider
+ idx = idx + 1
+
+ def get_plans(self, provider_xml):
+ """Given a provider element find all apn elements."""
+ for idx, plan in enumerate(provider_xml.findall('.//apn')):
+ yield idx, plan
+
+ def test_get_some_specific_values(self):
+ for country in self.countries_from_xml:
+ country_code = country.attrib['code']
+ country_idx = self.db.get_country_idx_by_code(country_code)
+
+ for provider_idx, provider in self.get_providers(country):
+ plans_from_class = self.db.get_plans(country_idx,
+ provider_idx)
+
+ for plan_idx, plan in self.get_plans(provider):
+ plan_from_class = plans_from_class[plan_idx]
+ self.assertEqual(plan.attrib['value'],
+ plan_from_class.attrib['value'])
+
+
+class ServiceProvidersTest(unittest.TestCase):
+ def setUp(self):
+ self.db = ServiceProviders()
+ self.countries = self.db.get_countries()
+
+ def test_go_trough_all_combo_options(self):
+ # Traverse countries
+ for country in self.countries:
+ # Check if country is stored
+ self.db.set_country(country.idx)
+ new_country = self.db.get_country()
+ self.assertEqual(country.code, new_country.code)
+
+ # Traverse providers for country
+ providers = self.db.get_providers()
+ for provider in providers:
+ # Check if provider is stored
+ self.db.set_provider(provider.idx)
+ new_provider = self.db.get_provider()
+ self.assertEqual(provider.name, new_provider.name)
+
+ # Traverse plans for provider
+ plans = self.db.get_plans()
+ for plan in plans:
+ # Check if plan is stored
+ self.db.set_plan(plan.idx)
+ new_plan = self.db.get_plan()
+ self.assertEqual(plan.name, new_plan.name)
+
+ # Check if selection is permanently stored
+ db2 = ServiceProviders()
+ country2 = db2.get_country()
+ provider2 = db2.get_provider()
+ plan2 = db2.get_plan()
+ self.assertEqual(country2.idx, country.idx)
+ self.assertEqual(provider2.idx, provider.idx)
+ self.assertEqual(plan2.idx, plan.idx)
+
+
+class FakeConfClient(object):
+
+ def __init__(self, **kwargs):
+ self.store = {
+ CONF_SP_COUNTRY: None,
+ CONF_SP_PROVIDER: None,
+ CONF_SP_PLAN: None,
+ }
+ self.store.update(kwargs)
+
+ def get_string(self, key):
+ return self.store[key]
+
+ def set_string(self, key, value):
+ self.store[key] = value
+ return
+
+ def get_int(self, key):
+ return self.store[key]
+
+ def set_int(self, key, value):
+ self.store[key] = value
+ return
+
+
+class ServiceProvidersGuessCountryTest(unittest.TestCase):
+ def setUp(self):
+ # patch Gio.Settings to use a fake client
+ conf_patcher = patch('gi.repository.Gio.Settings')
+ conf_mock = conf_patcher.start()
+ conf_mock.return_value = FakeConfClient(CONF_SP_COUNTRY=None)
+ self.addCleanup(conf_patcher.stop)
+
+ def test_guess_country(self):
+ LOCALE = ('hi_IN', 'UTF-8')
+ default_country_code = LOCALE[0][3:5].lower()
+
+ with patch('locale.getdefaultlocale') as locale_mock:
+ locale_mock.return_value = LOCALE
+
+ db = ServiceProviders()
+ country = db.get_country()
+ self.assertEqual(country.code, default_country_code)
diff --git b/tests/test_user_profile.py a/tests/test_user_profile.py
new file mode 100644
index 0000000..f9950de
--- /dev/null
+++ a/tests/test_user_profile.py
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014, Ignacio Rodriguez
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import unittest
+
+from cpsection.aboutme import model
+from jarabe.intro.agepicker import AGES
+from jarabe.intro.genderpicker import GENDERS
+
+TEST_NICKS = ['Ajay Garg', 'Aleksey Lim',
+ 'Bernie H. Innocenti', 'Daniel Narvaez',
+ 'Emil Dudev', 'Gonzalo Odiard',
+ 'Ignacio Rodríguez', 'Jorge Alberto Gómez López',
+ 'Sai Vineet', 'Sam Parkinson',
+ 'Sascha Silbe', 'Walter Bender']
+
+TEST_COLORS = [['#FF8F00', '#FF2B34'],
+ ['#00A0FF', '#008009'],
+ ['#BCCEFF', '#F8E800'],
+ ['#FF2B34', '#7F00BF'],
+ ['#FF2B34', '#5E008C'],
+ ['#BCCDFF', '#AC32FF'],
+ ['#00EA11', '#9A5200'],
+ ['#A700FF', '#FF8F00'],
+ ['#00EA11', '#7F00BF'],
+ ['#8BFF7A', '#F8E800'],
+ ['#00A0FF', '#5E008C'],
+ ['#7F00BF', '#AC32FF']]
+
+
+class TestUserProfile(unittest.TestCase):
+ def test_user_gender_age(self):
+ for gender in GENDERS:
+ for age in AGES:
+ model.set_gender(gender)
+ model.set_age(age)
+ self.assertEqual(model.get_age(), age)
+ self.assertEqual(model.get_gender(), gender)
+
+ def test_user_nick(self):
+ for nick in TEST_NICKS:
+ model.set_nick(nick)
+ self.assertEqual(model.get_nick(), nick)
+
+ def test_user_color(self):
+ for new_color in TEST_COLORS:
+ new_color = "%s,%s" % (new_color[0], new_color[1])
+ model.set_color_xo(new_color)
+ self.assertEqual(model.get_color(), new_color)
diff --git b/tests/test_webaccount.py a/tests/test_webaccount.py
new file mode 100644
index 0000000..7c4681a
--- /dev/null
+++ a/tests/test_webaccount.py
@@ -0,0 +1,31 @@
+# Copyright (C) 2012, Daniel Narvaez
+# Copyright (C) 2013, Walter Bender
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from sugar3.test import unittest
+from sugar3.test import uitree
+
+ACCOUNT_NAME = 'mock'
+
+
+class TestWebAccount(unittest.UITestCase):
+
+ def test_webaccount(self):
+ with self.run_view("webaccount"):
+ root = uitree.get_root()
+
+ for name in [ACCOUNT_NAME]:
+ node = root.find_child(name=name, role_name='label')
+ self.assertIsNotNone(node)
diff --git b/tests/test_webservice.py a/tests/test_webservice.py
new file mode 100644
index 0000000..56de599
--- /dev/null
+++ a/tests/test_webservice.py
@@ -0,0 +1,114 @@
+# Copyright (C) 2013, Walter Bender
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import sys
+import unittest
+
+from gi.repository import Gtk
+
+from jarabe import config
+from jarabe.webservice.account import Account
+from jarabe.webservice import accountsmanager
+
+ACCOUNT_NAME = 'mock'
+
+tests_dir = os.getcwd()
+extension_dir = os.path.join(tests_dir, 'extensions')
+web_extension_dir = os.path.join(extension_dir, 'webservice')
+
+
+class TestWebAccounts(unittest.TestCase):
+ def setUp(self):
+ os.environ["MOCK_ACCOUNT_STATE"] = str(Account.STATE_NONE)
+ self.save_ext_path = config.ext_path
+ config.ext_path = extension_dir
+ sys.path.append(config.ext_path)
+
+ def test_get_description(self):
+ accounts = accountsmanager.get_all_accounts()
+ found_mock_account = False
+ for account in accounts:
+ if account.get_description() == ACCOUNT_NAME:
+ found_mock_account = True
+ break
+ self.assertTrue(found_mock_account)
+
+ def test_icon_theme(self):
+ icon_theme = Gtk.IconTheme.get_default()
+ icon_search_path = icon_theme.get_search_path()
+ icon_path = os.path.join(web_extension_dir, ACCOUNT_NAME, 'icons')
+ self.assertTrue(icon_path in icon_search_path)
+
+ def test_get_webaccount_services(self):
+ services = accountsmanager.get_webaccount_services()
+ self.assertTrue(len(services) > 0)
+
+ def test_get_all_accounts(self):
+ accounts = accountsmanager.get_all_accounts()
+ self.assertTrue(len(accounts) > 0)
+
+ def test_get_account(self):
+ account = accountsmanager.get_account('mock')
+ self.assertIsNotNone(account)
+
+ def test_get_service(self):
+ account = accountsmanager.get_service('mock')
+ self.assertIsNotNone(account)
+
+ def test_get_configured_accounts(self):
+ os.environ["MOCK_ACCOUNT_STATE"] = str(Account.STATE_VALID)
+ accounts = accountsmanager.get_configured_accounts()
+ count = len(accounts)
+ self.assertTrue(count > 0)
+
+ self.assertTrue(accountsmanager.has_configured_accounts())
+
+ os.environ["MOCK_ACCOUNT_STATE"] = str(Account.STATE_NONE)
+ accounts = accountsmanager.get_configured_accounts()
+ self.assertTrue(len(accounts) == count - 1)
+
+ os.environ["MOCK_ACCOUNT_STATE"] = str(Account.STATE_EXPIRED)
+ accounts = accountsmanager.get_configured_accounts()
+ self.assertTrue(len(accounts) == count)
+
+ def test_get_active_accounts(self):
+ os.environ["MOCK_ACCOUNT_STATE"] = str(Account.STATE_VALID)
+ accounts = accountsmanager.get_active_accounts()
+ count = len(accounts)
+ self.assertTrue(count > 0)
+
+ os.environ["MOCK_ACCOUNT_STATE"] = str(Account.STATE_EXPIRED)
+ accounts = accountsmanager.get_active_accounts()
+ self.assertTrue(len(accounts) == count - 1)
+
+ def test_share_menu(self):
+ accounts = accountsmanager.get_all_accounts()
+ for account in accounts:
+ shared_journal_entry = account.get_shared_journal_entry()
+ share_menu = shared_journal_entry.get_share_menu(
+ {'account': 'mock'})
+ self.assertIsNotNone(share_menu)
+
+ def test_refresh_menu(self):
+ accounts = accountsmanager.get_all_accounts()
+ for account in accounts:
+ shared_journal_entry = account.get_shared_journal_entry()
+ refresh_menu = shared_journal_entry.get_refresh_menu()
+ self.assertIsNotNone(refresh_menu)
+
+ def tearDown(self):
+ sys.path.remove(config.ext_path)
+ config.ext_path = self.save_ext_path
diff --git b/tests/views/activitieslist.py a/tests/views/activitieslist.py
new file mode 100644
index 0000000..e954b47
--- /dev/null
+++ a/tests/views/activitieslist.py
@@ -0,0 +1,59 @@
+# Copyright (C) 2013, Daniel Narvaez
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+
+from gi.repository import Gtk
+from dbus.mainloop.glib import DBusGMainLoop
+DBusGMainLoop(set_as_default=True)
+
+from jarabe.desktop.activitieslist import ActivityListPalette
+
+
+tests_dir = os.getcwd()
+base_dir = os.path.dirname(tests_dir)
+data_dir = os.path.join(tests_dir, "data")
+
+
+class MockActivityInfo:
+ def get_bundle_id(self):
+ return "mock"
+
+ def get_activity_version(self):
+ return 1
+
+ def get_is_favorite(self):
+ return False
+
+ def get_icon(self):
+ return os.path.join(data_dir, "activity.svg")
+
+ def get_name(self):
+ return "mock"
+
+ def get_path(self):
+ return "mock"
+
+ def is_user_activity(self):
+ return True
+
+
+os.environ["SUGAR_MIME_DEFAULTS"] = \
+ os.path.join(base_dir, "data", "mime.defaults")
+
+palette = ActivityListPalette(MockActivityInfo())
+palette.popup()
+
+Gtk.main()
diff --git b/tests/views/gtk_main.py a/tests/views/gtk_main.py
new file mode 100644
index 0000000..2dc088d
--- /dev/null
+++ a/tests/views/gtk_main.py
@@ -0,0 +1,18 @@
+# Copyright (C) 2013, Walter Bender
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from gi.repository import Gtk
+
+Gtk.main()
diff --git b/tests/views/journal_detailstoolbox.py a/tests/views/journal_detailstoolbox.py
new file mode 100644
index 0000000..77e4fee
--- /dev/null
+++ a/tests/views/journal_detailstoolbox.py
@@ -0,0 +1,54 @@
+# Copyright (C) 2013, Walter Bender
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import sys
+
+from gi.repository import Gtk
+from dbus.mainloop.glib import DBusGMainLoop
+DBusGMainLoop(set_as_default=True)
+
+from jarabe import config
+from jarabe.journal.journaltoolbox import DetailToolbox
+from jarabe.journal.journalwindow import JournalWindow
+from jarabe.webservice.account import Account
+
+ACCOUNT_NAME = 'mock'
+
+
+class JournalMock(JournalWindow):
+ def get_mount_point(self):
+ return '/'
+
+
+tests_dir = os.getcwd()
+extension_dir = os.path.join(tests_dir, 'extensions')
+
+os.environ["MOCK_ACCOUNT_STATE"] = str(Account.STATE_VALID)
+config.ext_path = extension_dir
+sys.path.append(config.ext_path)
+
+window = Gtk.Window()
+
+toolbox = DetailToolbox(JournalMock())
+toolbox.show()
+
+window.add(toolbox)
+window.show()
+
+toolbox.set_metadata({'mountpoint': '/', 'uid': '', 'title': 'mock'})
+toolbox._copy.palette.popup(immediate=True)
+
+Gtk.main()
diff --git b/tests/views/webaccount.py a/tests/views/webaccount.py
new file mode 100644
index 0000000..f40ebb6
--- /dev/null
+++ a/tests/views/webaccount.py
@@ -0,0 +1,46 @@
+# Copyright (C) 2013, Walter Bender
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import os
+import sys
+
+from gi.repository import Gtk
+
+from jarabe import config
+from jarabe.webservice.account import Account
+from jarabe.webservice import accountsmanager
+
+ACCOUNT_NAME = 'mock'
+
+tests_dir = os.getcwd()
+extension_dir = os.path.join(tests_dir, 'extensions')
+
+os.environ["MOCK_ACCOUNT_STATE"] = str(Account.STATE_VALID)
+config.ext_path = extension_dir
+sys.path.append(config.ext_path)
+
+window = Gtk.Window()
+box = Gtk.HBox()
+box.show()
+window.add(box)
+
+services = accountsmanager.get_webaccount_services()
+for service in services:
+ if service.get_icon_name() == ACCOUNT_NAME:
+ service.config_service_cb(None, None, box)
+
+window.show()
+
+Gtk.main()