Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSayamindu Dasgupta <sayamindu@gmail.com>2007-12-02 20:54:17 (GMT)
committer Sayamindu Dasgupta <sayamindu@gmail.com>2007-12-02 20:54:17 (GMT)
commit306bea0c24506c9c1a248cdf1bc2ef577edb368a (patch)
tree6b63be1c9a5785607d4b46010a9a25ab100d92b5
parent0225360178f256f7f92bdc8a666cd4335dce66d8 (diff)
parent2da8bb44d4ee4b244e32d4045859732e307b88f1 (diff)
Merge branch 'master' of git+ssh://dev.laptop.org/git/sugar
-rwxr-xr-xbin/sugar-shell9
-rw-r--r--lib/sugar/activity/activityfactory.py16
-rw-r--r--lib/sugar/bundle/bundle.py2
-rw-r--r--lib/sugar/bundle/contentbundle.py5
-rw-r--r--lib/sugar/env.py8
-rw-r--r--lib/sugar/graphics/palette.py5
-rw-r--r--po/ja.po412
-rw-r--r--po/ml.po412
-rw-r--r--po/pa.po412
9 files changed, 1261 insertions, 20 deletions
diff --git a/bin/sugar-shell b/bin/sugar-shell
index ba36fc9..b0f66b4 100755
--- a/bin/sugar-shell
+++ b/bin/sugar-shell
@@ -19,7 +19,6 @@ import sys
import os
from ConfigParser import ConfigParser
import gettext
-import signal
import pygtk
pygtk.require('2.0')
@@ -86,12 +85,6 @@ def _shell_started_cb():
hw_manager = hardwaremanager.get_manager()
hw_manager.set_dcon_freeze(0)
-def _sigchild_handler(signum, frame):
- try:
- os.wait()
- except OSError:
- pass
-
def main():
gobject.idle_add(_shell_started_cb)
@@ -111,8 +104,6 @@ def main():
win.show_all()
gtk.main()
- signal.signal(signal.SIGCHLD, _sigchild_handler)
-
if os.environ.has_key("SUGAR_TP_DEBUG"):
# Allow the user time to start up telepathy connection managers
# using the Sugar DBus bus address
diff --git a/lib/sugar/activity/activityfactory.py b/lib/sugar/activity/activityfactory.py
index 85c0832..119dcea 100644
--- a/lib/sugar/activity/activityfactory.py
+++ b/lib/sugar/activity/activityfactory.py
@@ -18,6 +18,7 @@
import logging
import subprocess
+import signal
import dbus
import gobject
@@ -53,6 +54,16 @@ _RAINBOW_SERVICE_NAME = "org.laptop.security.Rainbow"
_RAINBOW_ACTIVITY_FACTORY_PATH = "/"
_RAINBOW_ACTIVITY_FACTORY_INTERFACE = "org.laptop.security.Rainbow"
+_children_pid = []
+
+def _sigchild_handler(signum, frame):
+ for child_pid in _children_pid:
+ pid, status = os.waitpid(child_pid, os.WNOHANG)
+ if pid > 0:
+ _children_pid.remove(pid)
+
+signal.signal(signal.SIGCHLD, _sigchild_handler)
+
def create_activity_id():
"""Generate a new, unique ID for this activity"""
pservice = presenceservice.get_instance()
@@ -224,8 +235,9 @@ class ActivityCreationHandler(gobject.GObject):
self._handle.uri)
if not self._use_rainbow:
- process = subprocess.Popen(command, env=environ, cwd=activity.path,
- stdout=log_file, stderr=log_file)
+ p = subprocess.Popen(command, env=environ, cwd=activity.path,
+ stdout=log_file, stderr=log_file)
+ _children_pid.append(p.pid)
else:
log_file.close()
system_bus = dbus.SystemBus()
diff --git a/lib/sugar/bundle/bundle.py b/lib/sugar/bundle/bundle.py
index 33fd1a8..f7f18c9 100644
--- a/lib/sugar/bundle/bundle.py
+++ b/lib/sugar/bundle/bundle.py
@@ -108,7 +108,7 @@ class Bundle:
raise AlreadyInstalledException
if not os.path.isdir(install_dir):
- os.mkdir(install_dir)
+ os.mkdir(install_dir, 0775)
# zipfile provides API that in theory would let us do this
# correctly by hand, but handling all the oddities of
diff --git a/lib/sugar/bundle/contentbundle.py b/lib/sugar/bundle/contentbundle.py
index 517ee9a..9e2d36e 100644
--- a/lib/sugar/bundle/contentbundle.py
+++ b/lib/sugar/bundle/contentbundle.py
@@ -21,7 +21,8 @@ from ConfigParser import ConfigParser
import os
from sugar import env
-from sugar.bundle.bundle import Bundle, NotInstalledException
+from sugar.bundle.bundle import Bundle, NotInstalledException, \
+ MalformedBundleException
class ContentBundle(Bundle):
"""A Sugar content bundle
@@ -162,7 +163,7 @@ class ContentBundle(Bundle):
def _run_indexer(self):
os.spawnlp(os.P_WAIT, 'python',
'python',
- os.path.join(env.get_user_library_path(), 'makeIndex.py'))
+ env.get_prefix_path('share/library-common/make_index.py'))
def is_installed(self):
if self._unpacked:
diff --git a/lib/sugar/env.py b/lib/sugar/env.py
index c46b7d0..33b57f3 100644
--- a/lib/sugar/env.py
+++ b/lib/sugar/env.py
@@ -18,7 +18,7 @@
import os
-def _get_prefix_path(base, path=None):
+def get_prefix_path(base, path=None):
if os.environ.has_key('SUGAR_PREFIX'):
prefix = os.environ['SUGAR_PREFIX']
else:
@@ -55,7 +55,7 @@ def get_profile_path(path=None):
base = os.path.join(os.path.expanduser('~/.sugar'), profile_id)
if not os.path.isdir(base):
try:
- os.makedirs(base)
+ os.makedirs(base, 0770)
except OSError, exc:
print "Could not create user directory."
@@ -78,10 +78,10 @@ def get_user_library_path():
return os.path.expanduser('~/Library')
def get_locale_path(path=None):
- return _get_prefix_path('share/locale', path)
+ return get_prefix_path('share/locale', path)
def get_bin_path(path=None):
- return _get_prefix_path('bin', path)
+ return get_prefix_path('bin', path)
def get_service_path(name):
return _get_sugar_path('services', name)
diff --git a/lib/sugar/graphics/palette.py b/lib/sugar/graphics/palette.py
index 5092524..a4cef8f 100644
--- a/lib/sugar/graphics/palette.py
+++ b/lib/sugar/graphics/palette.py
@@ -439,6 +439,8 @@ class Palette(gtk.Window):
def popdown(self, immediate=False):
self._popup_anim.stop()
+ self._mouse_detector.stop()
+
if not immediate:
self._popdown_anim.start()
else:
@@ -482,8 +484,7 @@ class Palette(gtk.Window):
self.popup(immediate=immediate)
def _invoker_mouse_leave_cb(self, invoker):
- if self._mouse_detector is not None:
- self._mouse_detector.stop()
+ self._mouse_detector.stop()
self.popdown()
def _enter_notify_event_cb(self, widget, event):
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..878d789
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,412 @@
+# 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: 2007-11-21 00:36+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: ../shell/intro/intro.py:67
+msgid "Name:"
+msgstr ""
+
+#: ../shell/intro/intro.py:96
+msgid "Click to change color:"
+msgstr ""
+
+#: ../shell/intro/intro.py:146
+msgid "Back"
+msgstr ""
+
+#: ../shell/intro/intro.py:160
+msgid "Done"
+msgstr ""
+
+#: ../shell/intro/intro.py:163
+msgid "Next"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:84
+msgid "Remove friend"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:87
+msgid "Make friend"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:109
+#, python-format
+msgid "Invite to %s"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:59
+msgid "Remove"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:64
+msgid "Open"
+msgstr ""
+
+#. self._stop_item = MenuItem(_('Stop download'), 'stock-close')
+#. TODO: Implement stopping downloads
+#. self._stop_item.connect('activate', self._stop_item_activate_cb)
+#. self.append_menu_item(self._stop_item)
+#: ../shell/view/clipboardmenu.py:74
+msgid "Add to journal"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:200
+#, python-format
+msgid "Clipboard object: %s."
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:149
+msgid "Key Type:"
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:169
+msgid "Authentication Type:"
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:250
+msgid "Encryption Type:"
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:90
+msgid "Starting..."
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:104 ../shell/view/home/MeshBox.py:295
+msgid "Resume"
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:111
+#: ../lib/sugar/activity/activity.py:128
+msgid "Stop"
+msgstr ""
+
+#: ../shell/view/Shell.py:276
+msgid "Screenshot"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:158
+msgid "Reboot"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:163
+msgid "Shutdown"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:169
+msgid "Register"
+msgstr ""
+
+#. Only show disconnect when there's a mesh device, because mesh takes
+#. priority over the normal wireless device. NM doesn't have a "disconnect"
+#. method for a device either (for various reasons) so this doesn't
+#. have a good mapping
+#: ../shell/view/home/MeshBox.py:90 ../shell/view/home/MeshBox.py:197
+#: ../shell/view/devices/network/wireless.py:113
+#: ../shell/view/devices/network/mesh.py:83
+msgid "Disconnect..."
+msgstr ""
+
+#: ../shell/view/home/MeshBox.py:195 ../shell/view/devices/network/mesh.py:37
+#: ../shell/view/devices/network/mesh.py:62
+#: ../shell/view/devices/network/mesh.py:66
+msgid "Mesh Network"
+msgstr ""
+
+#: ../shell/view/home/MeshBox.py:300
+msgid "Join"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:38
+msgid "My Battery life"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:94
+msgid "Battery charging"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:96
+msgid "Battery discharging"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:98
+msgid "Battery fully charged"
+msgstr ""
+
+#: ../shell/view/devices/network/wireless.py:61
+msgid "Disconnected"
+msgstr ""
+
+#: ../shell/view/devices/network/wireless.py:131
+msgid "Channel"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:42
+msgid "Neighborhood"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:54
+msgid "Group"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:66
+msgid "Home"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:78
+msgid "Activity"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:111
+msgid "Share with:"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:113
+msgid "Private"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:114
+msgid "My Neighborhood"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:122
+msgid "Keep"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:241
+msgid "Undo"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:246
+msgid "Redo"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:256
+msgid "Copy"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:261
+msgid "Paste"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:450
+#, python-format
+msgid "%s Activity"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:813
+msgid "Keep error"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:814
+msgid "Keep error: all changes will be lost"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:817
+msgid "Don't stop"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:820
+msgid "Stop anyway"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:164 ../lib/sugar/graphics/alert.py:206
+msgid "Cancel"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:168
+msgid "Ok"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:216
+msgid "Continue"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:244
+msgid "OK"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:175
+#, python-format
+msgid "%d year"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:175
+#, python-format
+msgid "%d years"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:176
+#, python-format
+msgid "%d month"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:176
+#, python-format
+msgid "%d months"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:177
+#, python-format
+msgid "%d week"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:177
+#, python-format
+msgid "%d weeks"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:178
+#, python-format
+msgid "%d day"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:178
+#, python-format
+msgid "%d days"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:179
+#, python-format
+msgid "%d hour"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:179
+#, python-format
+msgid "%d hours"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:180
+#, python-format
+msgid "%d minute"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:180
+#, python-format
+msgid "%d minutes"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:181
+#, python-format
+msgid "%d second"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:181
+#, python-format
+msgid "%d seconds"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:191
+msgid " and "
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:193
+msgid ", "
+msgstr ""
+
+#: ../shell/controlpanel/control.py:213
+msgid "To apply your changes you have to restart sugar.\n"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:267
+msgid "Error in specified color modifiers."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:270
+msgid "Error in specified colors."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:307
+msgid "off"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:309
+msgid "on"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:310
+msgid "State is unknown."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:332
+msgid "Error in specified radio argument use on/off."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:336
+msgid "Permission denied. You need to be root to run this method."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:366
+msgid "Error in reading timezone"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:397
+#, python-format
+msgid "Error copying timezone (from %s): %s"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:402
+#, python-format
+msgid "Changing permission of timezone: %s"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:413
+msgid "Error timezone does not exist."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:418 ../shell/controlpanel/control.py:438
+#, python-format
+msgid "Could not access %s. Create standard settings."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:466
+#, python-format
+msgid "Language for code=%s could not be determined."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:476
+#, python-format
+msgid "Sorry I do not speak '%s'."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:105
+msgid "Connected to a School Mesh Portal"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:107
+msgid "Looking for a School Mesh Portal..."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:110
+msgid "Connected to an XO Mesh Portal"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:112
+msgid "Looking for an XO Mesh Portal..."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:115
+msgid "Connected to a Simple Mesh"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:117
+msgid "Starting a Simple Mesh"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:124
+msgid "Unknown Mesh"
+msgstr ""
diff --git a/po/ml.po b/po/ml.po
new file mode 100644
index 0000000..878d789
--- /dev/null
+++ b/po/ml.po
@@ -0,0 +1,412 @@
+# 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: 2007-11-21 00:36+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: ../shell/intro/intro.py:67
+msgid "Name:"
+msgstr ""
+
+#: ../shell/intro/intro.py:96
+msgid "Click to change color:"
+msgstr ""
+
+#: ../shell/intro/intro.py:146
+msgid "Back"
+msgstr ""
+
+#: ../shell/intro/intro.py:160
+msgid "Done"
+msgstr ""
+
+#: ../shell/intro/intro.py:163
+msgid "Next"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:84
+msgid "Remove friend"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:87
+msgid "Make friend"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:109
+#, python-format
+msgid "Invite to %s"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:59
+msgid "Remove"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:64
+msgid "Open"
+msgstr ""
+
+#. self._stop_item = MenuItem(_('Stop download'), 'stock-close')
+#. TODO: Implement stopping downloads
+#. self._stop_item.connect('activate', self._stop_item_activate_cb)
+#. self.append_menu_item(self._stop_item)
+#: ../shell/view/clipboardmenu.py:74
+msgid "Add to journal"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:200
+#, python-format
+msgid "Clipboard object: %s."
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:149
+msgid "Key Type:"
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:169
+msgid "Authentication Type:"
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:250
+msgid "Encryption Type:"
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:90
+msgid "Starting..."
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:104 ../shell/view/home/MeshBox.py:295
+msgid "Resume"
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:111
+#: ../lib/sugar/activity/activity.py:128
+msgid "Stop"
+msgstr ""
+
+#: ../shell/view/Shell.py:276
+msgid "Screenshot"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:158
+msgid "Reboot"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:163
+msgid "Shutdown"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:169
+msgid "Register"
+msgstr ""
+
+#. Only show disconnect when there's a mesh device, because mesh takes
+#. priority over the normal wireless device. NM doesn't have a "disconnect"
+#. method for a device either (for various reasons) so this doesn't
+#. have a good mapping
+#: ../shell/view/home/MeshBox.py:90 ../shell/view/home/MeshBox.py:197
+#: ../shell/view/devices/network/wireless.py:113
+#: ../shell/view/devices/network/mesh.py:83
+msgid "Disconnect..."
+msgstr ""
+
+#: ../shell/view/home/MeshBox.py:195 ../shell/view/devices/network/mesh.py:37
+#: ../shell/view/devices/network/mesh.py:62
+#: ../shell/view/devices/network/mesh.py:66
+msgid "Mesh Network"
+msgstr ""
+
+#: ../shell/view/home/MeshBox.py:300
+msgid "Join"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:38
+msgid "My Battery life"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:94
+msgid "Battery charging"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:96
+msgid "Battery discharging"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:98
+msgid "Battery fully charged"
+msgstr ""
+
+#: ../shell/view/devices/network/wireless.py:61
+msgid "Disconnected"
+msgstr ""
+
+#: ../shell/view/devices/network/wireless.py:131
+msgid "Channel"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:42
+msgid "Neighborhood"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:54
+msgid "Group"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:66
+msgid "Home"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:78
+msgid "Activity"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:111
+msgid "Share with:"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:113
+msgid "Private"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:114
+msgid "My Neighborhood"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:122
+msgid "Keep"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:241
+msgid "Undo"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:246
+msgid "Redo"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:256
+msgid "Copy"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:261
+msgid "Paste"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:450
+#, python-format
+msgid "%s Activity"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:813
+msgid "Keep error"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:814
+msgid "Keep error: all changes will be lost"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:817
+msgid "Don't stop"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:820
+msgid "Stop anyway"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:164 ../lib/sugar/graphics/alert.py:206
+msgid "Cancel"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:168
+msgid "Ok"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:216
+msgid "Continue"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:244
+msgid "OK"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:175
+#, python-format
+msgid "%d year"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:175
+#, python-format
+msgid "%d years"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:176
+#, python-format
+msgid "%d month"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:176
+#, python-format
+msgid "%d months"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:177
+#, python-format
+msgid "%d week"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:177
+#, python-format
+msgid "%d weeks"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:178
+#, python-format
+msgid "%d day"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:178
+#, python-format
+msgid "%d days"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:179
+#, python-format
+msgid "%d hour"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:179
+#, python-format
+msgid "%d hours"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:180
+#, python-format
+msgid "%d minute"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:180
+#, python-format
+msgid "%d minutes"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:181
+#, python-format
+msgid "%d second"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:181
+#, python-format
+msgid "%d seconds"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:191
+msgid " and "
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:193
+msgid ", "
+msgstr ""
+
+#: ../shell/controlpanel/control.py:213
+msgid "To apply your changes you have to restart sugar.\n"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:267
+msgid "Error in specified color modifiers."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:270
+msgid "Error in specified colors."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:307
+msgid "off"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:309
+msgid "on"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:310
+msgid "State is unknown."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:332
+msgid "Error in specified radio argument use on/off."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:336
+msgid "Permission denied. You need to be root to run this method."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:366
+msgid "Error in reading timezone"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:397
+#, python-format
+msgid "Error copying timezone (from %s): %s"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:402
+#, python-format
+msgid "Changing permission of timezone: %s"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:413
+msgid "Error timezone does not exist."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:418 ../shell/controlpanel/control.py:438
+#, python-format
+msgid "Could not access %s. Create standard settings."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:466
+#, python-format
+msgid "Language for code=%s could not be determined."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:476
+#, python-format
+msgid "Sorry I do not speak '%s'."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:105
+msgid "Connected to a School Mesh Portal"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:107
+msgid "Looking for a School Mesh Portal..."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:110
+msgid "Connected to an XO Mesh Portal"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:112
+msgid "Looking for an XO Mesh Portal..."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:115
+msgid "Connected to a Simple Mesh"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:117
+msgid "Starting a Simple Mesh"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:124
+msgid "Unknown Mesh"
+msgstr ""
diff --git a/po/pa.po b/po/pa.po
new file mode 100644
index 0000000..878d789
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,412 @@
+# 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: 2007-11-21 00:36+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: ../shell/intro/intro.py:67
+msgid "Name:"
+msgstr ""
+
+#: ../shell/intro/intro.py:96
+msgid "Click to change color:"
+msgstr ""
+
+#: ../shell/intro/intro.py:146
+msgid "Back"
+msgstr ""
+
+#: ../shell/intro/intro.py:160
+msgid "Done"
+msgstr ""
+
+#: ../shell/intro/intro.py:163
+msgid "Next"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:84
+msgid "Remove friend"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:87
+msgid "Make friend"
+msgstr ""
+
+#: ../shell/view/BuddyMenu.py:109
+#, python-format
+msgid "Invite to %s"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:59
+msgid "Remove"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:64
+msgid "Open"
+msgstr ""
+
+#. self._stop_item = MenuItem(_('Stop download'), 'stock-close')
+#. TODO: Implement stopping downloads
+#. self._stop_item.connect('activate', self._stop_item_activate_cb)
+#. self.append_menu_item(self._stop_item)
+#: ../shell/view/clipboardmenu.py:74
+msgid "Add to journal"
+msgstr ""
+
+#: ../shell/view/clipboardmenu.py:200
+#, python-format
+msgid "Clipboard object: %s."
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:149
+msgid "Key Type:"
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:169
+msgid "Authentication Type:"
+msgstr ""
+
+#: ../shell/hardware/keydialog.py:250
+msgid "Encryption Type:"
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:90
+msgid "Starting..."
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:104 ../shell/view/home/MeshBox.py:295
+msgid "Resume"
+msgstr ""
+
+#: ../shell/view/home/activitiesdonut.py:111
+#: ../lib/sugar/activity/activity.py:128
+msgid "Stop"
+msgstr ""
+
+#: ../shell/view/Shell.py:276
+msgid "Screenshot"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:158
+msgid "Reboot"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:163
+msgid "Shutdown"
+msgstr ""
+
+#: ../shell/view/home/HomeBox.py:169
+msgid "Register"
+msgstr ""
+
+#. Only show disconnect when there's a mesh device, because mesh takes
+#. priority over the normal wireless device. NM doesn't have a "disconnect"
+#. method for a device either (for various reasons) so this doesn't
+#. have a good mapping
+#: ../shell/view/home/MeshBox.py:90 ../shell/view/home/MeshBox.py:197
+#: ../shell/view/devices/network/wireless.py:113
+#: ../shell/view/devices/network/mesh.py:83
+msgid "Disconnect..."
+msgstr ""
+
+#: ../shell/view/home/MeshBox.py:195 ../shell/view/devices/network/mesh.py:37
+#: ../shell/view/devices/network/mesh.py:62
+#: ../shell/view/devices/network/mesh.py:66
+msgid "Mesh Network"
+msgstr ""
+
+#: ../shell/view/home/MeshBox.py:300
+msgid "Join"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:38
+msgid "My Battery life"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:94
+msgid "Battery charging"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:96
+msgid "Battery discharging"
+msgstr ""
+
+#: ../shell/view/devices/battery.py:98
+msgid "Battery fully charged"
+msgstr ""
+
+#: ../shell/view/devices/network/wireless.py:61
+msgid "Disconnected"
+msgstr ""
+
+#: ../shell/view/devices/network/wireless.py:131
+msgid "Channel"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:42
+msgid "Neighborhood"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:54
+msgid "Group"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:66
+msgid "Home"
+msgstr ""
+
+#: ../shell/view/frame/zoomtoolbar.py:78
+msgid "Activity"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:111
+msgid "Share with:"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:113
+msgid "Private"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:114
+msgid "My Neighborhood"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:122
+msgid "Keep"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:241
+msgid "Undo"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:246
+msgid "Redo"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:256
+msgid "Copy"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:261
+msgid "Paste"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:450
+#, python-format
+msgid "%s Activity"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:813
+msgid "Keep error"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:814
+msgid "Keep error: all changes will be lost"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:817
+msgid "Don't stop"
+msgstr ""
+
+#: ../lib/sugar/activity/activity.py:820
+msgid "Stop anyway"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:164 ../lib/sugar/graphics/alert.py:206
+msgid "Cancel"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:168
+msgid "Ok"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:216
+msgid "Continue"
+msgstr ""
+
+#: ../lib/sugar/graphics/alert.py:244
+msgid "OK"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:175
+#, python-format
+msgid "%d year"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:175
+#, python-format
+msgid "%d years"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:176
+#, python-format
+msgid "%d month"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:176
+#, python-format
+msgid "%d months"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:177
+#, python-format
+msgid "%d week"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:177
+#, python-format
+msgid "%d weeks"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:178
+#, python-format
+msgid "%d day"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:178
+#, python-format
+msgid "%d days"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:179
+#, python-format
+msgid "%d hour"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:179
+#, python-format
+msgid "%d hours"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:180
+#, python-format
+msgid "%d minute"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:180
+#, python-format
+msgid "%d minutes"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:181
+#, python-format
+msgid "%d second"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:181
+#, python-format
+msgid "%d seconds"
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:191
+msgid " and "
+msgstr ""
+
+#: ../lib/sugar/graphics/objectchooser.py:193
+msgid ", "
+msgstr ""
+
+#: ../shell/controlpanel/control.py:213
+msgid "To apply your changes you have to restart sugar.\n"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:267
+msgid "Error in specified color modifiers."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:270
+msgid "Error in specified colors."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:307
+msgid "off"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:309
+msgid "on"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:310
+msgid "State is unknown."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:332
+msgid "Error in specified radio argument use on/off."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:336
+msgid "Permission denied. You need to be root to run this method."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:366
+msgid "Error in reading timezone"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:397
+#, python-format
+msgid "Error copying timezone (from %s): %s"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:402
+#, python-format
+msgid "Changing permission of timezone: %s"
+msgstr ""
+
+#: ../shell/controlpanel/control.py:413
+msgid "Error timezone does not exist."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:418 ../shell/controlpanel/control.py:438
+#, python-format
+msgid "Could not access %s. Create standard settings."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:466
+#, python-format
+msgid "Language for code=%s could not be determined."
+msgstr ""
+
+#: ../shell/controlpanel/control.py:476
+#, python-format
+msgid "Sorry I do not speak '%s'."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:105
+msgid "Connected to a School Mesh Portal"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:107
+msgid "Looking for a School Mesh Portal..."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:110
+msgid "Connected to an XO Mesh Portal"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:112
+msgid "Looking for an XO Mesh Portal..."
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:115
+msgid "Connected to a Simple Mesh"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:117
+msgid "Starting a Simple Mesh"
+msgstr ""
+
+#: ../shell/view/devices/network/mesh.py:124
+msgid "Unknown Mesh"
+msgstr ""